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 converting 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):
