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):
        (WebCore::InlineIterator::previousInSameNode):
        * rendering/InlineTextBox.cpp:
        (WebCore::adjustCharactersAndLengthForHyphen):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        * rendering/RenderBlock.cpp:
        (WebCore::constructTextRunInternal):
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::endsWithASCIISpaces):
        (WebCore::reachedEndOfTextRenderer):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::textWidth):
        (WebCore::tryHyphenating):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::getStringToRender):
        (WebCore::RenderCombineText::combineText):
        * rendering/RenderCombineText.h:
        (RenderCombineText):
        * rendering/RenderText.cpp:
        (SameSizeAsRenderText):
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::widthFromCache):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        (WebCore::RenderText::is8Bit):
        (WebCore::RenderText::characters8):
        (WebCore::RenderText::characters16):
        (WebCore::RenderText::characterAt):
        (WebCore::RenderText::operator[]):
        (RenderText):
        * xml/parser/MarkupTokenBase.h:
        (WebCore::MarkupTokenBase::appendToCharacter):
        (MarkupTokenBase):
        (WebCore::MarkupTokenBase::isAll8BitData):

2012-10-15  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts for dynamically added script elements are not shown in sources panel.
        https://bugs.webkit.org/show_bug.cgi?id=99324

        Reviewed by Pavel Feldman.

        NetworkUISourceCodeProvider now adds uiSourceCodes for dynamic anonymous scripts
        and dynamic scripts loaded before inspector was opened.

        Tests: http/tests/inspector-enabled/dynamic-scripts.html
               inspector/debugger/dynamic-scripts.html

        * inspector/front-end/NetworkLog.js:
        (WebInspector.NetworkLog.prototype.requestForURL):
        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider):
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):
        (WebInspector.NetworkUISourceCodeProvider.prototype._projectWillReset):

2012-10-15  Dominik Röttsches  <dominik.rottsches@intel.com>

        REGRESSION(130613): Reintroduces crashes when using soup's timeout functionality
        https://bugs.webkit.org/show_bug.cgi?id=99311

        Reviewed by Gustavo Noronha Silva.

        Removing the cleanupSoupRequestOperation call, since the cancel() call will eventually trigger the
        cleanup already setting the right flag. Cleaning the handle already here will result in crashes when
        using the soup timeout functionality.
        The explicit cleanup call reintroduced in r130613, after it had been previously removed in r130348.

        No new tests, tests that catch this will be part of bug 74802 for XHR timeout support.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::requestTimeoutCallback):

2012-10-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: convert manual size calculation of different WebKit things into MemoryInstrumentation.
        https://bugs.webkit.org/show_bug.cgi?id=99309

        Reviewed by Yury Semikhatsky.

        JSHeap, DOMStorage and HeapProfiler data were counted manually.
        Now we count the sizes more generic way.

        * dom/WebCoreMemoryInstrumentation.cpp:
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes): new string identifiers were added for Inspector's data.
        * inspector/InspectorBaseAgent.cpp:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface): common data members were moved from template to base class.
        (WebCore::InspectorBaseAgentInterface::reportMemoryUsage): NMI instrumentation was added to the base template.
        * inspector/InspectorBaseAgent.h:
        (InspectorBaseAgentInterface): ditto
        (WebCore::InspectorBaseAgent::InspectorBaseAgent): ditto
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::reportMemoryUsage): NMI instrumentation was added to the class.
        * inspector/InspectorController.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::reportMemoryUsage): NMI instrumentation was added to the class.
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::reportMemoryUsage): NMI instrumentation was added to the class.
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::reportJSHeapInfo): these methods now use MemoryInstrumentation for reporting the size of underlying data.
        (WebCore::reportRenderTreeInfo):
        (WebCore::collectDomTreeInfo):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        (WebCore::InspectorMemoryAgent::reportMemoryUsage): NMI instrumentation was added to the class.
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::reportMemoryUsage):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent): NMI instrumentation was added to the class.
        * inspector/MemoryInstrumentationImpl.cpp: allocatedObjects map was converted from InspectorMemoryAgent::getProcessMemoryDistribution local variable to member variable.
        (WebCore::MemoryInstrumentationClientImpl::checkCountedObject):
        (WebCore::MemoryInstrumentationClientImpl::reportMemoryUsage): NMI instrumentation was added to the class.
        (WebCore::MemoryInstrumentationImpl::reportMemoryUsage): NMI instrumentation was added to the class.
        * inspector/MemoryInstrumentationImpl.h:
        (WebCore::MemoryInstrumentationClientImpl::MemoryInstrumentationClientImpl):
        (WebCore::MemoryInstrumentationClientImpl::allocatedObjects):
        (WebCore::MemoryInstrumentationClientImpl::checkInstrumentedObjects):
        * inspector/front-end/NativeMemorySnapshotView.js:
        (WebInspector.MemoryBlockViewProperties._initialize):
        (WebInspector.NativeMemoryBarChart.prototype._updateView):
        * page/Page.cpp:
        (WebCore::Page::reportMemoryUsage): NMI instrumentation was added to the class.
        * page/Page.h:

2012-10-15  Kent Tamura  <tkent@chromium.org>

        Improve code of LocaleMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=98383

        Reviewed by Darin Adler.

        - Use isNull instead of isEmpty because isNull is more efficient.
        - create*Formatter should return RetainPtr to avoid to retain in each of callsites.
        - Explicit String conversion is not needed.

        No new tests. This doesn't change any behavior.

        * platform/text/mac/LocaleMac.h:
        (LocaleMac):
        - Change the return types of createShortDateFormatter,
        createTimeFormatter, and createShortTimeFormatter from NSDateFormatter*
        to RetainPtr<NSDateFormatter>.
        - Omit 'create' from their names.
        - Add m_gregorianCalendar.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::createDateTimeFormatter):
        Change the return type from NSDateFormatter* to RetainPtr<NSDateFormatter>.
        Add an NSCalendar argument.
        (WebCore::LocaleMac::shortDateFormatter):
        Renamed from createShortTimeFormatter.
        Change the return type from NSDateFormatter* to RetainPtr<NSDateFormatter>.
        (WebCore::LocaleMac::parseDateTime): Follow the return type change and the renaming.
        (WebCore::LocaleMac::formatDateTime): Ditto. Also, remove explicit String construction.
        (WebCore::LocaleMac::dateFormatText): Ditto. Also, use isNull.
        (WebCore::LocaleMac::monthLabels): Follow the return type change and the renaming.
        (WebCore::LocaleMac::weekDayShortLabels): Ditto.
        (WebCore::LocaleMac::timeFormatter):
        Change the return type from NSDateFormatter* to RetainPtr<NSDateFormatter>.
        Renamed from createTimeFormatter.
        (WebCore::LocaleMac::shortTimeFormatter): Ditto.
        (WebCore::LocaleMac::dateFormat):
        Use isNull. Remove explicit String construction. Follow the return type
        change and the renaming.
        (WebCore::LocaleMac::timeFormat): ditto.
        (WebCore::LocaleMac::shortTimeFormat): ditto.
        (WebCore::LocaleMac::timeAMPMLabels):
        Remove explicit String construction. Follow the return type change.
        (WebCore::LocaleMac::initializeLocalizerData):
        Remove explicit String construction.

2012-10-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI remove hand made object builders with automatic builder.
        https://bugs.webkit.org/show_bug.cgi?id=99186

        Reviewed by Yury Semikhatsky.

        Old builders were replaced with single automatic builder.
        It does the next things:
        a) deduplicates entries in the MemoryInstrumentationClient's map and converts objectType pointers to String;
        b) creates parent entries and assigns their aggregated sizes;
        c) creates the hierarchy of MemoryBlocks recursively.

        * dom/WebCoreMemoryInstrumentation.cpp:
        (WebCore):
        * dom/WebCoreMemoryInstrumentation.h:
        (WebCoreMemoryTypes):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore):
        (WebCore::jsHeapInfo):
        (WebCore::renderTreeInfo):
        (WebCore::addPlatformComponentsInfo):
        (WebCore::InspectorMemoryAgent::getProcessMemoryDistribution):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::sizesMap):
        (WebCore):
        * inspector/MemoryInstrumentationImpl.h:
        (WebCore):
        (MemoryInstrumentationClientImpl):

2012-10-14  Sam Weinig  <sam@webkit.org>

        Simplify user content in WebKit2 by using WebCore::UserStyleSheet and WebCore::UserScript directly
        https://bugs.webkit.org/show_bug.cgi?id=99276

        Reviewed by Anders Carlsson.

        Add default constructors for UserScript and UserStyleSheet so they can be used in CoreIPC encoding/decoding.

        * page/UserScript.h:
        (WebCore::UserScript::UserScript):
        (UserScript):
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::UserStyleSheet):
        (UserStyleSheet):

2012-10-14  Jon Lee  <jonlee@apple.com>

        Allow notification origin permission request when no js callback is provided
        https://bugs.webkit.org/show_bug.cgi?id=63615
        <rdar://problem/11059590>

        Reviewed by Sam Weinig.

        Instead of throwing a type error when no callback is provided, we pass a null callback.

        Test: http/tests/notifications/legacy/request-no-callback.html

        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotificationCenter::requestPermission):

2012-10-12  Anders Carlsson  <andersca@apple.com>

        Move QDataStream functions into HistoryItemQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99203

        Reviewed by Andreas Kling.

        It seems like the QDataStream stream operators are only used from HistoryItemQt.cpp
        inside WebCore, so move them there. If in the future they are required elsewhere, they should
        be moved into a separate header instead of polluting headers unnecessarily.

        * history/qt/HistoryItemQt.cpp:
        (operator<<):
        (operator>>):
        * platform/FractionalLayoutUnit.h:
        * platform/graphics/IntPoint.h:

2012-10-14  Sam Weinig  <sam@webkit.org>

        Make UserScript and UserStyleSheet value objects that are copyable
        https://bugs.webkit.org/show_bug.cgi?id=99275

        Reviewed by Tim Horton.

        Simplify UserScript and UserStyleSheet and make them more easily usable
        without sticking them in an OwnPtr.

        * WebCore.exp.in:
        Update exports.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        * page/PageGroup.h:
        (PageGroup):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::matchesPatterns):
        * page/UserContentURLPattern.h:
        (UserContentURLPattern):
        Update to not assume whitelist and blacklist are in Vector<String>*.

        * page/UserScript.h:
        (UserScript):
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::whitelist):
        (WebCore::UserScript::blacklist):
        * page/UserStyleSheet.h:
        (UserStyleSheet):
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::whitelist):
        (WebCore::UserStyleSheet::blacklist):
        Switch OwnPtr<Vector<String> > to Vector<String> and remove Noncopyable restriction.

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Unreviewed build fix, export __ZN7WebCore8IntPointC1ERK7CGPoint.

        * WebCore.exp.in:

2012-10-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Implement PDFPlugin
        https://bugs.webkit.org/show_bug.cgi?id=99206

        Reviewed by Dan Bernstein.

        Add a plug-in that uses PDFKit to display PDFs, instead of using PDFKit in the
        UIProcess for full-page PDFs. This new plugin will also be used for inline PDFs
        in place of SimplePDFPlugin (née BuiltInPDFView).

        * WebCore.exp.in:
        Export a few more methods to WebKit(2).

        * WebCore.xcodeproj/project.pbxproj:
        Expose Pasteboard.h as a private header so PDFPlugin can use it.

        * platform/ScrollableArea.h:
        Make invalidateScrollbar/invalidateScrollCorner virtual.

2012-10-14  Antoine Quint  <graouts@apple.com>

        InspectorPageAgent should expose a method to control the compositing debug settings.
        https://bugs.webkit.org/show_bug.cgi?id=99253

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::setCompositingBordersVisible):
        * inspector/InspectorPageAgent.h:

2012-10-13  Chris Rogers  <crogers@google.com>

        WebAudioBus needs support for resizing bus to a smaller size
        https://bugs.webkit.org/show_bug.cgi?id=99215

        Reviewed by Dimitri Glazkov.

        Upgrade AudioBus and WebAudioBus to support resizing to a smaller size, once it has been created.
        This is useful, for example, when decoding VBR formats and the actual length can't be exactly determined
        until the entire file is decoded.

        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::resizeSmaller):
        (WebCore):
        * platform/audio/AudioBus.h:
        (AudioBus):
        * platform/audio/AudioChannel.cpp:
        (WebCore::AudioChannel::resizeSmaller):
        (WebCore):
        * platform/audio/AudioChannel.h:
        (AudioChannel):
        * platform/chromium/support/WebAudioBus.cpp:
        (WebKit::WebAudioBus::resizeSmaller):
        (WebKit):

2012-10-13  Gregg Tavares  <gman@google.com>

        Add warning for unrenderable textures
        https://bugs.webkit.org/show_bug.cgi?id=99235

        Reviewed by Kenneth Russell.

        Unrenderable textures are often hard to debug. Adds a message to that
        appears in the JavaScript console to help developers find the issue.

        No new tests as no new functionality.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::handleNPOTTextures):
        * html/canvas/WebGLRenderingContext.h:
        (WebGLRenderingContext):

2012-10-13  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Updated bindings test results.

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

2012-10-12  Geoffrey Garen  <ggaren@apple.com>

        I pity da foo' who's converting numbers to strings
        https://bugs.webkit.org/show_bug.cgi?id=99197

        Reviewed by Gavin Barraclough.

        40% speedup on PerformanceTests/Dromaeo/dom-traverse.html. Probably speeds
        some other things up too.

        Credit to Eric Seidel for spotting this.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): getOwnPropertySlotByIndex doesn't need to prefer
        string lookup in the static table because our static tables don't contain
        properties that are numbers.

        I believe this is low-hanging fruit left behind by Phil's
        getOwnPropertySlotByIndex optimization, but it's also possible that this was a
        regression at some point. I didn't check.

2012-10-13  Adam Barth  <abarth@webkit.org>

        Remove dead code in Node.idl
        https://bugs.webkit.org/show_bug.cgi?id=99237

        Reviewed by Maciej Stachowiak.

        We don't implement this feature. This code is dead and should be
        removed.

        * dom/Node.idl:

2012-10-12  Simon Fraser  <simon.fraser@apple.com>

        Fix GraphicsLayerCA visible rect computation in the face of perspective and preserve-3d
        https://bugs.webkit.org/show_bug.cgi?id=99212

        Reviewed by Tim Horton.

        GraphicsLayerCA::computeVisibleRect() was incorrect for layer trees with perspective
        and preserve-3d, so fix that, and add some tests.
        
        Perspective is implemented via childrenTransform(); if our parent has one,
        we have to left-multiply this into the transformation matrix.
        
        We have to test both this layer and its parent when deciding whether to accumulate
        or flatten.
        
        Use state.mappedQuad() rather than state.lastPlanarQuad(), because the last planar
        quad might be for some distant ancestor, and there may be intermediate preserve-3d
        layers.

        Tests: compositing/visible-rect/3d-transform-style.html
               compositing/visible-rect/3d-transformed.html
               compositing/visible-rect/nested-transform.html

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

2012-10-11  Simon Fraser  <simon.fraser@apple.com>

        Move TransformState code into its own member function, and remove a test that was prematurely added
        https://bugs.webkit.org/show_bug.cgi?id=99117

        Reviewed by Tim Horton.

        The code that manipulates the TransformState and computes the visible rect is going to get
        more complex, so move it into a new member function.

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

2012-10-12  Simon Fraser  <simon.fraser@apple.com>

        Add some initial visible rect tests and tweak the visible wash layer
        https://bugs.webkit.org/show_bug.cgi?id=99095

        Reviewed by Tim Horton.

        Make the m_visibleTileWashLayer more useful by showing it for all
        layers with transforms, not just tiled layers. This is a debugging
        layer normally disabled, but enabled by #defining VISIBLE_TILE_WASH.

        Tests: compositing/visible-rect/2d-transformed.html
               compositing/visible-rect/3d-transformed.html
               compositing/visible-rect/clipped-by-viewport copy.html
               compositing/visible-rect/clipped-by-viewport.html
               compositing/visible-rect/clipped-visible-rect.html

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

2012-10-12  Pablo Flouret  <pablof@motorola.com>

        Teach GeneratorGObject about [ImplementedAs] extended attribute in functions
        https://bugs.webkit.org/show_bug.cgi?id=99214

        Reviewed by Kentaro Hara.

        No new tests, updated the binding tests results.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_orange):

2012-10-12  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=99211
        When ScrollingStateNodes are destroyed, they should be removed 
        ScrollingCoordinator's HashMap

        Reviewed by Sam Weinig.

        This patch adds a new member variable to ScrollingStateTree. It's a 
        Vector of ScrollingNodeIDs. It will contain the IDs of nodes that 
        have been removed from the tree since the last time the tree was 
        committed.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):

        When we do commit, copy the Vector over into the cloned tree, and 
        then clear our own Vector.
        (WebCore::ScrollingStateTree::commit):

        Call didRemoveNode().
        (WebCore::ScrollingStateTree::removeNode):

        Append the removed node's id to the vector.
        (WebCore::ScrollingStateTree::didRemoveNode):
        (WebCore):
        * page/scrolling/ScrollingStateTree.h:
        (ScrollingStateTree):

        Call didRemoveNode().
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::removeChild):

        Fix the FIXME!
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::detachFromStateTree):

2012-10-12  Brady Eidson  <beidson@apple.com>

        Setup basic NetworkProcess messaging and initialization.
        https://bugs.webkit.org/show_bug.cgi?id=99198

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings: Update for the Network Process UI name.

2012-10-12  Levi Weintraub  <leviw@chromium.org>

        Remove unnecessary mode identifiers added in r131111
        https://bugs.webkit.org/show_bug.cgi?id=99208

        Reviewed by Emil A Eklund.

        Removing unnecessary mode identifiers from coordinate conversion methods. These
        were added in http://trac.webkit.org/changeset/131111

        No new tests. No change in behavior.

        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderObject.h:
        (RenderObject):
        * rendering/RenderView.h:
        (RenderView):
        * rendering/svg/RenderSVGForeignObject.h:
        (RenderSVGForeignObject):
        * rendering/svg/RenderSVGInline.h:
        (RenderSVGInline):
        * rendering/svg/RenderSVGModelObject.h:
        (RenderSVGModelObject):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):

2012-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131224.
        http://trac.webkit.org/changeset/131224
        https://bugs.webkit.org/show_bug.cgi?id=99210

        It broke the build (Requested by andersca on #webkit).

        * history/qt/HistoryItemQt.cpp:
        * platform/FractionalLayoutUnit.h:
        (WebCore):
        (WebCore::operator<<):
        (WebCore::operator>>):
        * platform/graphics/IntPoint.h:
        (WebCore):
        (WebCore::operator<<):
        (WebCore::operator>>):

2012-10-12  Anders Carlsson  <andersca@apple.com>

        Move QDataStream functions into HistoryItemQt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=99203

        Reviewed by Andreas Kling.

        It seems like the QDataStream stream operators are only used from HistoryItemQt.cpp
        inside WebCore, so move them there. If in the future they are required elsewhere, they should
        be moved into a separate header instead of polluting headers unnecessarily.

        * history/qt/HistoryItemQt.cpp:
        (operator<<):
        (operator>>):
        * platform/FractionalLayoutUnit.h:
        * platform/graphics/IntPoint.h:

2012-10-12  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=99204
        ScrollingStateNodes should keep track of their IDs

        Reviewed by Simon Fraser.

        There is a HashMap in ScrollingCoordinatorMac that maps 
        ScrollingNodeIDs to ScrollingStateNodes. The nodes themselves should 
        keep track of this id. Then the id can be used to make sure 
        ScrollingStateNodes remove themselves from the HashMap when they are 
        destroyed, and it will also be useful for associating 
        ScrollingStateNodes with ScrollingTreeNodes over on the scrolling 
        thread.
  
        This patch only has the ScrollingStateNodes cache the id. I will 
        actually make use of the id in follow-up patches.

        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h:
        (ScrollingStateNode):
        (WebCore::ScrollingStateNode::scrollingNodeID):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::create):
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (ScrollingStateScrollingNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::attachToStateTree):

2012-10-01  Jer Noble  <jer.noble@apple.com>

        Add LSKD support to MediaPlayerPrivateAVFoundation.
        https://bugs.webkit.org/show_bug.cgi?id=98090

        Reviewed by Anders Carlsson.

        Add support for LSKD key system to MediaPlayerPrivateAVFoundation.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (MediaPlayerPrivateAVFoundationObjC): Add m_loaderDelegate, m_keyURIToRequestMap, and m_sessionToRequestMap.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (globalLoaderDelegateQueue): Static accessor for the dispatch queue to use for the loader delegate.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Add the loader delegate to the AVURLAsset.
        (WebCore::keySystemIsSupported): Convenience function; checks that the key system matches "com.apple.lskd"
        (WebCore::MediaPlayerPrivateAVFoundationObjC::extendedSupportsType): Check the key system matches.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource): Fire a needkey event with an initData containing
            the key URI.
        (WebCore::extractKeyURIKeyIdAndCertificateFromInitData): Extract the keyURI, keyID, and the app certificate from the initData.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::generateKeyRequest): Generate a streaming key request from AVFoundation and 
            fire a keymessage event.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::addKey): Pass to AVFoundation through the AVAssetResourceLoader.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelKeyRequest): Release the loader delegate.
        (-[WebCoreAVFLoaderDelegate initWithCallback:]): Simple constructor.
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForLoadingOfRequestedResource:]): Pass to the MediaPlayerPrivateAVFoundationObjC.

2012-10-12  James Simonsen  <simonjam@chromium.org>

        [RequestAnimationFrame] Remove vendor prefix
        https://bugs.webkit.org/show_bug.cgi?id=99116

        Reviewed by Adam Barth.

        Test: Existing rAF tests without prefix.

        * dom/Document.cpp:
        (WebCore::Document::requestAnimationFrame):
        (WebCore::Document::cancelAnimationFrame):
        * dom/Document.h:
        (Document):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestAnimationFrame):
        (WebCore::DOMWindow::cancelAnimationFrame):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:

2012-10-12  Andreas Kling  <kling@webkit.org>

        REGRESSION: Rapid memory growth calling DOM APIs with large strings.
        <http://webkit.org/b/98498>
        <rdar://problem/12443926>

        Reviewed by Geöff Gären and Änders Cärlssön.

        Prevent the selector query cache from growing indefinitely by setting a relaxed limit of 256 entries.
        If the cache fills up, remove a random entry before inserting a new one.

        While this is unlikely to be a problem on real websites, we definitely shouldn't be adding boundless
        caches to WebKit.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQueryCache::add):

2012-10-12  Roger Fong  <roger_fong@apple.com>

        Update method signature for platformCALayerShowRepaintCounter in MediaPlayerPlayerPrivateAVFoundationCF's LayerClient class.
        https://bugs.webkit.org/show_bug.cgi?id=99190

        Reviewed by Simon Fraser.

        LayerClient's base class (PlatformCALayerClient) method signature for abstract method platformCALayerShowRepaintCounter
        was updated in http://trac.webkit.org/changeset/130676 so it needs to be changed in LayerClient as well.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerShowRepaintCounter):

2012-10-12  Scott Graham  <scottmg@chromium.org>

        Local disable of stack corruption warning when compiling on VS2012
        https://bugs.webkit.org/show_bug.cgi?id=99106

        Reviewed by Ryosuke Niwa.

        Warning is:

        ...\FEConvolveMatrix.cpp(274) : warning C4789: buffer 'totals' of size 12 bytes will be overrun; 4 bytes will be written starting at offset 12.

        And similar at lines 281, 355, and 365. This appears to be incorrect
        as the writes at offset 12 occur only when preserveAlphaValues is
        false, and when it's false, totals will be 16 bytes long.

        No new tests.

        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore):

2012-10-11  Emil A Eklund  <eae@chromium.org>

        [Sub pixel layout] Change RenderBox to not round logicalTop/Left for RenderReplaced
        https://bugs.webkit.org/show_bug.cgi?id=99108

        Reviewed by Levi Weintraub.

        Change RenderBox::computePositionedLogicalHeightReplaced and
        computePositionedLogicalWidthReplaced to not round position.

        Covered by existing tests.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        Floor baselinePosition for replaced elements to match logic in
        RootInlineBox::ascentAndDescentForBox where the ascent is
        computed from the floored baselinePosition.
        
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        Remove .round() call for m_position, preserving precision.

2012-10-01  Jer Noble  <jer.noble@apple.com>

        Enable ENCRYPTED_MEDIA support on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=98044

        Reviewed by Anders Carlsson.

        Enable the ENCRYPTED_MEDIA conditional on the Mac port.

        No new tests; Existing media/encrypted-media tests require org.w3.clearkey support, which is not implemented.

        * Configurations/FeatureDefines.xcconfig: Enable the ENCRYPTED_MEDIA flag.
        * DerivedSources.make: Add the MediaKeyError and MediaKeyEvent classes.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue): Add convertValue functions for Uint8Array and MediaKeyError.
        * bindings/js/JSDictionary.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded): Throw an error if no "needkey"
            handler is registered.
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Change keySystem to DefaultIsUndefined.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::keyNeeded): Return a bool indicating whether the process was aborted
            due to a lack of "needkey" listener.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerKeyAdded): Remove unused parameter names.
        (WebCore::MediaPlayerClient::mediaPlayerKeyError): Ditto.
        (WebCore::MediaPlayerClient::mediaPlayerKeyMessage): Ditto.
        (WebCore::MediaPlayerClient::mediaPlayerKeyNeeded): Ditto.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::addKey): Ditto.
        (WebCore::MediaPlayerPrivateInterface::generateKeyRequest): Ditto.
        (WebCore::MediaPlayerPrivateInterface::cancelKeyRequest): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine): Call extendedSupportsType.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::extendedSupportsType): Stub. Pass through to supportsType.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Call extendedSupportsType.
        (WebCore::MediaPlayerPrivateQTKit::extendedSupportsType): Stub. Pass through to supportsType.

2012-10-12  Jaehun Lim  <ljaehun.lim@samsung.com>

        Check parameter's safety first
        https://bugs.webkit.org/show_bug.cgi?id=99136

        Reviewed by Chris Rogers.

        Pointer parameter was used before NULL checking.
        This patch moves safety checking statements to the head of the function.

        No new tests. No behavior change.

        * platform/audio/AudioChannel.cpp:
        (WebCore::AudioChannel::copyFromRange):
        (WebCore::AudioChannel::sumFrom):
        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):

2012-10-12  Andreas Kling  <kling@webkit.org>

        RenderBR should share its constant newline string between instances.
        <http://webkit.org/b/99121>

        Reviewed by Anders Carlsson.

        * rendering/RenderBR.cpp:
        (WebCore::newlineString):
        (WebCore::RenderBR::RenderBR):

2012-10-12  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] !important priority not honored inside the same declaration
        https://bugs.webkit.org/show_bug.cgi?id=99170

        Reviewed by Yury Semikhatsky.

        Property priorities were not considered inside the same CSS rule. !important properties should stay active
        even if followed by non-!important properties with the same name.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):

2012-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: use hard-coded zoom factors instead of 1.2 powers.
        https://bugs.webkit.org/show_bug.cgi?id=99173

        Reviewed by Vsevolod Vlasov.

        Overwise we step too fast.

        * inspector/front-end/inspector.js:
        (WebInspector._zoomIn):
        (WebInspector._zoomOut):
        (WebInspector):

2012-10-12  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: move delete watch expression farther from the expand triangle
        https://bugs.webkit.org/show_bug.cgi?id=99166

        Reviewed by Pavel Feldman.

        Aligned 'delete watch expression' button on the right side (was on the left) so
        that it is hard to click it when expanding watched value.

        * inspector/front-end/inspector.css:
        (.properties-tree.watch-expressions):
        (.section .properties .delete-button):

2012-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: trim filename in the call stack sidebar
        https://bugs.webkit.org/show_bug.cgi?id=99169

        Reviewed by Yury Semikhatsky.

        Otherwise long file names are rendered poorly.

        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.Placard.prototype._update):
        * inspector/front-end/inspector.css:
        (.placard .subtitle):

2012-10-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Resume button in element inspector -> scripts has tooltip 'pause script execution'
        https://bugs.webkit.org/show_bug.cgi?id=99165

        Reviewed by Pavel Feldman.

        Pause/resume button title is now updated when debugger is paused/resumed.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._updateDebuggerButtons):
        (WebInspector.ScriptsPanel.prototype._createDebugToolbar):
        (WebInspector.ScriptsPanel.prototype._updateButtonTitle):
        (WebInspector.ScriptsPanel.prototype._createButtonAndRegisterShortcuts):

2012-10-12  Kentaro Hara  <haraken@chromium.org>

        Unreviewed. Fix run-binding-tests failures introduced in r131167.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateConstructorGetter):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore):
        (WebCore::TestObjV8Internal::TestObjConstructorGetter):
        (WebCore::V8TestObj::installPerContextProperties):
        (WebCore::V8TestObj::installPerContextPrototypeProperties):
        (WebCore::V8TestObj::wrapSlow):
        * bindings/scripts/test/V8/V8TestObj.h:
        (V8TestObj):

2012-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: relies on current Function.prototype.bind in the frame
        https://bugs.webkit.org/show_bug.cgi?id=99164

        Reviewed by Yury Semikhatsky.

        InjectedScriptSource should not depend on the bind override.

        Test: inspector/console/console-bind-fake.html

        * inspector/InjectedScriptSource.js:
        (.):

2012-10-12  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Colors should be "As authored" by default
        https://bugs.webkit.org/show_bug.cgi?id=99017

        Reviewed by Vsevolod Vlasov.

        Use "original" as the default value of WebInspector.settings.colorFormat.

        * inspector/front-end/Settings.js:

2012-10-12  Takashi Sakamoto  <tasak@google.com>

        [WebKit IDL] move extended attributes to left of interface, exception...
        https://bugs.webkit.org/show_bug.cgi?id=99012

        Reviewed by Kentaro Hara.

        According to WebIDL spec, moved all extended attributes to the left
        of interface / attribute / readonly attribute / exception.

        No new tests. I ran run-bindings-tests and all tests passed.

        * Modules/battery/BatteryManager.idl:
        * Modules/battery/NavigatorBattery.idl:
        * Modules/filesystem/DOMFileSystem.idl:
        * Modules/filesystem/DOMFileSystemSync.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DataTransferItemFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryEntrySync.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/DirectoryReaderSync.idl:
        * Modules/filesystem/EntriesCallback.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/EntryArray.idl:
        * Modules/filesystem/EntryArraySync.idl:
        * Modules/filesystem/EntryCallback.idl:
        * Modules/filesystem/EntrySync.idl:
        * Modules/filesystem/ErrorCallback.idl:
        * Modules/filesystem/FileCallback.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/FileEntrySync.idl:
        * Modules/filesystem/FileSystemCallback.idl:
        * Modules/filesystem/FileWriter.idl:
        * Modules/filesystem/FileWriterCallback.idl:
        * Modules/filesystem/FileWriterSync.idl:
        * Modules/filesystem/HTMLInputElementFileSystem.idl:
        * Modules/filesystem/Metadata.idl:
        * Modules/filesystem/MetadataCallback.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/gamepad/NavigatorGamepad.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/geolocation/Geoposition.idl:
        * Modules/geolocation/NavigatorGeolocation.idl:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionError.idl:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * 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:
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl:
        * Modules/intents/DOMWindowIntents.idl:
        * Modules/intents/DeliveredIntent.idl:
        * Modules/intents/NavigatorIntents.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/IceCallback.idl:
        * Modules/mediastream/IceCandidate.idl:
        * Modules/mediastream/LocalMediaStream.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamEvent.idl:
        * Modules/mediastream/MediaStreamList.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/MediaStreamTrackEvent.idl:
        * Modules/mediastream/MediaStreamTrackList.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/NavigatorUserMediaError.idl:
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl:
        * Modules/mediastream/PeerConnection00.idl:
        * Modules/mediastream/RTCErrorCallback.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCIceCandidateEvent.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCSessionDescriptionCallback.idl:
        * Modules/mediastream/RTCStatsCallback.idl:
        * Modules/mediastream/RTCStatsElement.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/mediastream/SessionDescription.idl:
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl:
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/DOMWindowNotifications.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/notifications/WorkerContextNotifications.idl:
        * Modules/proximity/DeviceProximityEvent.idl:
        * Modules/quota/DOMWindowQuota.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageInfoErrorCallback.idl:
        * Modules/quota/StorageInfoQuotaCallback.idl:
        * Modules/quota/StorageInfoUsageCallback.idl:
        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/speech/SpeechGrammar.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionAlternative.idl:
        * Modules/speech/SpeechRecognitionError.idl:
        * Modules/speech/SpeechRecognitionEvent.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/vibration/NavigatorVibration.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferCallback.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioChannelMerger.idl:
        * Modules/webaudio/AudioChannelSplitter.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioDestinationNode.idl:
        * Modules/webaudio/AudioGain.idl:
        * Modules/webaudio/AudioGainNode.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioPannerNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioProcessingEvent.idl:
        * Modules/webaudio/AudioSourceNode.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webaudio/DelayNode.idl:
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/JavaScriptAudioNode.idl:
        * Modules/webaudio/MediaElementAudioSourceNode.idl:
        * Modules/webaudio/MediaStreamAudioSourceNode.idl:
        * Modules/webaudio/OfflineAudioCompletionEvent.idl:
        * Modules/webaudio/Oscillator.idl:
        * Modules/webaudio/RealtimeAnalyserNode.idl:
        * Modules/webaudio/WaveShaperNode.idl:
        * Modules/webaudio/WaveTable.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLException.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/webdatabase/SQLTransactionSyncCallback.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/CloseEvent.idl:
        * Modules/websockets/DOMWindowWebSocket.idl:
        * Modules/websockets/WebSocket.idl:
        * Modules/websockets/WorkerContextWebSocket.idl:
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/TestCustomNamedGetter.idl:
        * bindings/scripts/test/TestDomainSecurity.idl:
        * bindings/scripts/test/TestEventConstructor.idl:
        * bindings/scripts/test/TestEventTarget.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * bindings/scripts/test/TestTypedArray.idl:
        * css/CSSCharsetRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSUnknownRule.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/MediaList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * css/WebKitCSSRegionRule.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/Attr.idl:
        * dom/BeforeLoadEvent.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CustomEvent.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringList.idl:
        * dom/DOMStringMap.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/MessageChannel.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationCallback.idl:
        * dom/MutationObserver.idl:
        * dom/MutationRecord.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/Notation.idl:
        * dom/OverflowEvent.idl:
        * dom/PageTransitionEvent.idl:
        * dom/PopStateEvent.idl:
        * dom/ProcessingInstruction.idl:
        * dom/ProgressEvent.idl:
        * dom/PropertyNodeList.idl:
        * dom/RangeException.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/ShadowRoot.idl:
        * dom/StringCallback.idl:
        * dom/Touch.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WebKitTransitionEvent.idl:
        * editing/DOMTransaction.idl:
        * editing/UndoManager.idl:
        * fileapi/Blob.idl:
        * fileapi/File.idl:
        * fileapi/FileError.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDataListElement.idl:
        * html/HTMLDetailsElement.idl:
        * html/HTMLDialogElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIntentElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLMeterElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLProgressElement.idl:
        * html/HTMLPropertiesCollection.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLSourceElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLTrackElement.idl:
        * html/HTMLUListElement.idl:
        * html/HTMLVideoElement.idl:
        * html/ImageData.idl:
        * html/MediaController.idl:
        * html/MediaError.idl:
        * html/MediaKeyError.idl:
        * html/MediaKeyEvent.idl:
        * html/MicroDataItemValue.idl:
        * html/RadioNodeList.idl:
        * html/TimeRanges.idl:
        * html/ValidityState.idl:
        * html/VoidCallback.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DataView.idl:
        * html/canvas/EXTTextureFilterAnisotropic.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLActiveInfo.idl:
        * html/canvas/WebGLBuffer.idl:
        * html/canvas/WebGLCompressedTextureS3TC.idl:
        * html/canvas/WebGLContextAttributes.idl:
        * html/canvas/WebGLContextEvent.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLDepthTexture.idl:
        * html/canvas/WebGLFramebuffer.idl:
        * html/canvas/WebGLLoseContext.idl:
        * html/canvas/WebGLProgram.idl:
        * html/canvas/WebGLRenderbuffer.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLShader.idl:
        * html/canvas/WebGLShaderPrecisionFormat.idl:
        * html/canvas/WebGLTexture.idl:
        * html/canvas/WebGLUniformLocation.idl:
        * html/canvas/WebGLVertexArrayObjectOES.idl:
        * html/shadow/HTMLContentElement.idl:
        * html/shadow/HTMLShadowElement.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.idl:
        * html/track/TrackEvent.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.idl:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/AbstractView.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/Coordinates.idl:
        * page/Crypto.idl:
        * page/DOMSecurityPolicy.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/DOMWindowPagePopup.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/MemoryInfo.idl:
        * page/Navigator.idl:
        * page/PagePopupController.idl:
        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        * page/PerformanceEntryList.idl:
        * page/PerformanceNavigation.idl:
        * page/PerformanceResourceTiming.idl:
        * page/PerformanceTiming.idl:
        * page/Screen.idl:
        * page/SpeechInputEvent.idl:
        * page/SpeechInputResult.idl:
        * page/SpeechInputResultList.idl:
        * page/WebKitAnimation.idl:
        * page/WebKitAnimationList.idl:
        * page/WebKitPoint.idl:
        * page/WorkerNavigator.idl:
        * plugins/DOMMimeType.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGAElement.idl:
        * svg/SVGAltGlyphDefElement.idl:
        * svg/SVGAltGlyphElement.idl:
        * svg/SVGAltGlyphItemElement.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimateColorElement.idl:
        * svg/SVGAnimateElement.idl:
        * svg/SVGAnimateMotionElement.idl:
        * svg/SVGAnimateTransformElement.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/SVGAnimationElement.idl:
        * svg/SVGCircleElement.idl:
        * svg/SVGClipPathElement.idl:
        * svg/SVGColor.idl:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGCursorElement.idl:
        * svg/SVGDefsElement.idl:
        * svg/SVGDescElement.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstance.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGEllipseElement.idl:
        * svg/SVGException.idl:
        * svg/SVGExternalResourcesRequired.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFEComponentTransferElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDiffuseLightingElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEDistantLightElement.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEFuncAElement.idl:
        * svg/SVGFEFuncBElement.idl:
        * svg/SVGFEFuncGElement.idl:
        * svg/SVGFEFuncRElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFEMergeElement.idl:
        * svg/SVGFEMergeNodeElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFEOffsetElement.idl:
        * svg/SVGFEPointLightElement.idl:
        * svg/SVGFESpecularLightingElement.idl:
        * svg/SVGFESpotLightElement.idl:
        * svg/SVGFETileElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.idl:
        * svg/SVGFitToViewBox.idl:
        * svg/SVGFontElement.idl:
        * svg/SVGFontFaceElement.idl:
        * svg/SVGFontFaceFormatElement.idl:
        * svg/SVGFontFaceNameElement.idl:
        * svg/SVGFontFaceSrcElement.idl:
        * svg/SVGFontFaceUriElement.idl:
        * svg/SVGForeignObjectElement.idl:
        * svg/SVGGElement.idl:
        * svg/SVGGlyphElement.idl:
        * svg/SVGGlyphRefElement.idl:
        * svg/SVGGradientElement.idl:
        * svg/SVGHKernElement.idl:
        * svg/SVGImageElement.idl:
        * svg/SVGLangSpace.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGLineElement.idl:
        * svg/SVGLinearGradientElement.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMPathElement.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGMetadataElement.idl:
        * svg/SVGMissingGlyphElement.idl:
        * svg/SVGNumber.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSeg.idl:
        * svg/SVGPathSegArcAbs.idl:
        * svg/SVGPathSegArcRel.idl:
        * svg/SVGPathSegClosePath.idl:
        * svg/SVGPathSegCurvetoCubicAbs.idl:
        * svg/SVGPathSegCurvetoCubicRel.idl:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl:
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl:
        * svg/SVGPathSegCurvetoQuadraticAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticRel.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl:
        * svg/SVGPathSegLinetoAbs.idl:
        * svg/SVGPathSegLinetoHorizontalAbs.idl:
        * svg/SVGPathSegLinetoHorizontalRel.idl:
        * svg/SVGPathSegLinetoRel.idl:
        * svg/SVGPathSegLinetoVerticalAbs.idl:
        * svg/SVGPathSegLinetoVerticalRel.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPathSegMovetoAbs.idl:
        * svg/SVGPathSegMovetoRel.idl:
        * svg/SVGPatternElement.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.idl:
        * svg/SVGPolygonElement.idl:
        * svg/SVGPolylineElement.idl:
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGRadialGradientElement.idl:
        * svg/SVGRect.idl:
        * svg/SVGRectElement.idl:
        * svg/SVGRenderingIntent.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGScriptElement.idl:
        * svg/SVGSetElement.idl:
        * svg/SVGStopElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGStylable.idl:
        * svg/SVGStyleElement.idl:
        * svg/SVGSwitchElement.idl:
        * svg/SVGSymbolElement.idl:
        * svg/SVGTRefElement.idl:
        * svg/SVGTSpanElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTextElement.idl:
        * svg/SVGTextPathElement.idl:
        * svg/SVGTextPositioningElement.idl:
        * svg/SVGTitleElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * svg/SVGTransformable.idl:
        * svg/SVGURIReference.idl:
        * svg/SVGUnitTypes.idl:
        * svg/SVGUseElement.idl:
        * svg/SVGVKernElement.idl:
        * svg/SVGViewElement.idl:
        * svg/SVGViewSpec.idl:
        * svg/SVGZoomAndPan.idl:
        * svg/SVGZoomEvent.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * testing/MallocStatistics.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * workers/WorkerLocation.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestProgressEvent.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:
        Moved extended attributes.

2012-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: never expand global scope automatically
        https://bugs.webkit.org/show_bug.cgi?id=99159

        Reviewed by Vsevolod Vlasov.

        Otherwise, stepping is slow.

        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):

2012-10-10  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Refactor UISourceCode, make it possible to distinguish working copy changes/commits from formatting.
        https://bugs.webkit.org/show_bug.cgi?id=98911

        Reviewed by Pavel Feldman.

        ContentChanged was dispatched both when working copy was committed and UISourceCode was formatted before.
        WorkingCopyChanged event was dispatched when working copy was set.
        Now there are three explicit events: WorkingCopyChanged, WorkingCopyCommitted, FormattedChanged.
        No events are dispatched now during revisions restoring.
        Reverting to revisions is now implemented based on the working copy editing.

        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype._onFormattedChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._onWorkingCopyChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._onWorkingCopyCommitted):
        (WebInspector.JavaScriptSourceFrame.prototype._innerSetContent):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextChanged):
        * inspector/front-end/NavigatorView.js:
        (WebInspector.NavigatorView.prototype._uiSourceCodeWorkingCopyCommitted):
        (WebInspector.NavigatorView.prototype._uiSourceCodeFormattedChanged):
        (WebInspector.NavigatorView.prototype._addUISourceCodeListeners):
        (WebInspector.NavigatorView.prototype._removeUISourceCodeListeners):
        * inspector/front-end/TabbedEditorContainer.js:
        (WebInspector.TabbedEditorContainer.prototype._addUISourceCodeListeners):
        (WebInspector.TabbedEditorContainer.prototype._removeUISourceCodeListeners):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeWorkingCopyCommitted):
        (WebInspector.TabbedEditorContainer.prototype._uiSourceCodeFormattedChanged):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode):
        (WebInspector.UISourceCode.prototype._commitContent):
        (WebInspector.UISourceCode.prototype.addRevision):
        (WebInspector.UISourceCode.prototype._restoreRevisionHistory):
        (WebInspector.UISourceCode.prototype.revertToOriginal):
        (WebInspector.UISourceCode.prototype.revertAndClearHistory):
        (WebInspector.UISourceCode.prototype.setWorkingCopy):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):
        (WebInspector.UISourceCode.prototype.setFormatted.didGetContent.formattedChanged):
        (WebInspector.UISourceCode.prototype.setFormatted.didGetContent):
        (WebInspector.UISourceCode.prototype.setFormatted):
        (WebInspector.Revision.prototype.revertToThis):
        * inspector/front-end/UISourceCodeFrame.js:
        (WebInspector.UISourceCodeFrame):
        (WebInspector.UISourceCodeFrame.prototype.onTextChanged):
        (WebInspector.UISourceCodeFrame.prototype._onFormattedChanged):
        (WebInspector.UISourceCodeFrame.prototype._onWorkingCopyChanged):
        (WebInspector.UISourceCodeFrame.prototype._onWorkingCopyCommitted):
        (WebInspector.UISourceCodeFrame.prototype._innerSetContent):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        [WK2] Serialization of Resource[Request,Response,Error] should be shared across ports
        https://bugs.webkit.org/show_bug.cgi?id=90142

        Reviewed by Simon Hausmann.

        Added a setter for the certificate of ResourceError.

        No change in behavior so no new tests.

        * platform/network/cf/ResourceError.h:
        (ResourceError):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore):
        (WebCore::ResourceError::setCertificate):

2012-10-12  MORITA Hajime  <morrita@google.com>

        [V8] PerContextEnabled methods should be installed when the constructor is created
        https://bugs.webkit.org/show_bug.cgi?id=99129

        Reviewed by Kentaro Hara.

        Before this change, generated installPerContextProperties() method
        injected both per-context attributes and functions, and functions
        were injected into the prototye object.  This means that the
        functions are injected into the prototype repeatedly for each
        intance creation.  This injection can be happened only once per
        prototype object, which is clearer and is faster.

        This change introduces installPerContextPrototypeProperties()
        generated method, which is designed to be called for each time when the prototype
        object is created.

        To do that, WrapperTypeInfo is extended to hold an additional
        function pointer to an installPerContextPrototypeProperties()
        implementation so that we call it from V8PerContextData::constructorForTypeSlowCase(),
        where the prototype instance is created.

        Other changes:
        - Added some modification to pass around the parameter to constructorForTypeSlowCase().
        - installPerContextProperties() are now always generated for simplicity. Empty implementations are inlined thus
          no speed penalty.

        No new tests. Covered by existing tests.

        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::document):
        * Modules/notifications/NotificationCenter.h:
        (NotificationCenter):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateConstructorGetter):
        (GenerateNamedConstructorCallback):
        (GenerateImplementation): Extracted per-context function additions to new installPerContextPrototypeProperties() function.
        (GenerateToV8Converters):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore):
        (WebCore::V8Float64Array::wrapSlow):
        * bindings/scripts/test/V8/V8Float64Array.h:
        (WebCore::V8Float64Array::installPerContextProperties):
        (WebCore::V8Float64Array::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore):
        (WebCore::V8TestActiveDOMObject::wrapSlow):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.h:
        (WebCore::V8TestActiveDOMObject::installPerContextProperties):
        (WebCore::V8TestActiveDOMObject::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore):
        (WebCore::V8TestCustomNamedGetter::wrapSlow):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.h:
        (WebCore::V8TestCustomNamedGetter::installPerContextProperties):
        (WebCore::V8TestCustomNamedGetter::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore):
        (WebCore::V8TestEventConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventConstructor.h:
        (WebCore::V8TestEventConstructor::installPerContextProperties):
        (WebCore::V8TestEventConstructor::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore):
        (WebCore::V8TestEventTarget::wrapSlow):
        * bindings/scripts/test/V8/V8TestEventTarget.h:
        (WebCore::V8TestEventTarget::installPerContextProperties):
        (WebCore::V8TestEventTarget::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore):
        (WebCore::V8TestException::wrapSlow):
        * bindings/scripts/test/V8/V8TestException.h:
        (WebCore::V8TestException::installPerContextProperties):
        (WebCore::V8TestException::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore):
        (WebCore::V8TestInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestInterface.h:
        (WebCore::V8TestInterface::installPerContextProperties):
        (WebCore::V8TestInterface::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore):
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h:
        (WebCore::V8TestMediaQueryListListener::installPerContextProperties):
        (WebCore::V8TestMediaQueryListListener::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore):
        (WebCore::V8TestNamedConstructor::wrapSlow):
        * bindings/scripts/test/V8/V8TestNamedConstructor.h:
        (WebCore::V8TestNamedConstructor::installPerContextProperties):
        (WebCore::V8TestNamedConstructor::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore):
        (WebCore::V8TestNode::wrapSlow):
        * bindings/scripts/test/V8/V8TestNode.h:
        (WebCore::V8TestNode::installPerContextProperties):
        (WebCore::V8TestNode::installPerContextPrototypeProperties):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::V8TestSerializedScriptValueInterface::wrapSlow):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.h:
        (WebCore::V8TestSerializedScriptValueInterface::installPerContextProperties):
        (WebCore::V8TestSerializedScriptValueInterface::installPerContextPrototypeProperties):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::installDOMWindow):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::createWrapperFromCacheSlowCase):
        (WebCore::V8PerContextData::constructorForTypeSlowCase): Now invokes installPerContextPrototypeProperties()
        * 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): Added.
        (WrapperTypeInfo):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore):

2012-10-12  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: Add "goto tab 1,2,3" hotkeys
        https://bugs.webkit.org/show_bug.cgi?id=99157

        Reviewed by Alexander Pavlov.

        Ctrl/Cmd + digit shortcuts should select corresponding tabs

        * inspector/front-end/InspectorView.js:
        (WebInspector.InspectorView.prototype._keyDown):
        (WebInspector.InspectorView.prototype._keyDownInternal):

2012-10-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Extract domain specific editing handling logic from UISourceCode descendants (step 1).
        https://bugs.webkit.org/show_bug.cgi?id=98912

        Reviewed by Pavel Feldman.

        This is the first step that introduces StyleFile and ScriptFile and extracts domain specific editing handling logic.
        StyleFile and ScriptFile should listen for the UISourceCode events and process them, this will be done in the next patch.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.Breakpoint.prototype._updateBreakpoint):
        * inspector/front-end/JavaScriptSource.js:
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextChanged):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ResourceScriptMapping.prototype._hasDivergedFromVMChanged):
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        (WebInspector.ScriptFile):
        (WebInspector.ScriptFile.prototype.hasDivergedFromVM):
        (WebInspector.ScriptFile.prototype.isDivergingFromVM):
        (WebInspector.ScriptFile.prototype.addEventListener):
        (WebInspector.ScriptFile.prototype.removeEventListener):
        (WebInspector.ResourceScriptFile):
        (WebInspector.ResourceScriptFile.prototype.workingCopyCommitted):
        (WebInspector.ResourceScriptFile.prototype.workingCopyChanged):
        (WebInspector.ResourceScriptFile.prototype.fireHasDivergedFromVMChanged):
        (WebInspector.ResourceScriptFile.prototype.hasDivergedFromVM):
        (WebInspector.ResourceScriptFile.prototype.isDivergingFromVM):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._addScriptSnippet):
        (WebInspector.SnippetScriptFile):
        (WebInspector.SnippetScriptFile.prototype.hasDivergedFromVM):
        (WebInspector.SnippetScriptFile.prototype.setHasDivergedFromVM):
        (WebInspector.SnippetScriptFile.prototype.isDivergingFromVM):
        (WebInspector.SnippetScriptFile.prototype.setIsDivergingFromVM):
        (WebInspector.SnippetScriptFile.prototype.workingCopyCommitted):
        (WebInspector.SnippetScriptFile.prototype.workingCopyChanged):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):
        * inspector/front-end/StyleSource.js:
        * inspector/front-end/StylesSourceMapping.js:
        (WebInspector.StylesSourceMapping.prototype._uiSourceCodeAddedToWorkspace):
        (WebInspector.StylesSourceMapping.prototype._addUISourceCode):
        (WebInspector.StyleFile):
        (WebInspector.StyleFile.prototype.workingCopyCommitted):
        (WebInspector.StyleFile.prototype.workingCopyChanged):
        (WebInspector.StyleFile.prototype._callOrSetTimeout):
        (WebInspector.StyleFile.prototype._commitIncrementalEdit):
        (WebInspector.StyleFile.prototype._clearIncrementalUpdateTimer):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.scriptFile):
        (WebInspector.UISourceCode.prototype.setScriptFile):
        (WebInspector.UISourceCode.prototype.styleFile):
        (WebInspector.UISourceCode.prototype.setStyleFile):
        (WebInspector.UISourceCode.prototype.setWorkingCopy):
        (WebInspector.UISourceCode.prototype.commitWorkingCopy):

2012-10-12  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2] GraphicsSurfaceGLX should keep track of previous GL context.
        https://bugs.webkit.org/show_bug.cgi?id=99076

        In GraphicsSurfaceGLX/GraphicsSurfacePrivate we create a new
        QOpenGLContext for resolving GL methods.
        This context is implicitly made current on creation.
        Therefore we need to keep track of the previously bound context
        and make that one current again after calling create.

        Reviewed by Kenneth Rohde Christiansen.

        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):

2012-10-12  Balazs Kelemen  <kbalazs@webkit.org>

        Unreviewed, rolling out r130389.
        http://trac.webkit.org/changeset/130389
        https://bugs.webkit.org/show_bug.cgi?id=98048

        It broke chromium

        * WebCore.exp.in:
        * page/Settings.cpp:
        (WebCore::Settings::setAcceleratedCompositingEnabled):
        * page/Settings.h:
        (WebCore::Settings::setForceCompositingMode):
        (WebCore::Settings::forceCompositingMode):

2012-10-12  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Show request body source in request headers view.
        https://bugs.webkit.org/show_bug.cgi?id=99145

        Reviewed by Pavel Feldman.

        Added view source toggle to query parameters and form data elements.

        * inspector/front-end/NetworkPanel.js: fixed queryString getter usage.
        (WebInspector.NetworkDataGridNode.prototype._fileName):
        (WebInspector.NetworkDataGridNode.NameComparator):
        * inspector/front-end/NetworkRequest.js: Extracted queryString getter.
        (WebInspector.NetworkRequest.prototype.queryString):
        (WebInspector.NetworkRequest.prototype.get queryParameters):
        * inspector/front-end/RequestHeadersView.js:
        (WebInspector.RequestHeadersView.prototype._refreshQueryString):
        (WebInspector.RequestHeadersView.prototype._refreshFormData):
        (WebInspector.RequestHeadersView.prototype._populateTreeElementWithSourceText):
        extracted common method to populate elememnt with raw source text.
        (WebInspector.RequestHeadersView.prototype._refreshParams.toggleViewSource):
        (WebInspector.RequestHeadersView.prototype._refreshParams):
        (WebInspector.RequestHeadersView.prototype._toggleURLDecoding):
        (WebInspector.RequestHeadersView.prototype._refreshHeadersText):
        * inspector/front-end/networkPanel.css:A removed redundant raw-form-data style rule.

2012-10-12  Shinya Kawanaka  <shinyak@chromium.org>

        Optimzie SelectorCheckingContext memory layout
        https://bugs.webkit.org/show_bug.cgi?id=99139

        Reviewed by Hajime Morita.

        Since VisitedMatchType and PseudoId are both enum, we can make SelectorChecker more compact
        if these two fields are continuously placed.

        No new tests, no change in behavior.

        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        (SelectorCheckingContext):

2012-10-12  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] Add "Cache-Control: no-cache" to handshake request
        https://bugs.webkit.org/show_bug.cgi?id=98000

        Reviewed by Yuta Kitamura.

        Add no-cache headers to opening handshake.
        This is for compatibility improvement.
        Some proxies rewrite "Connection: upgrade" to "Connection: close"
        when a request doesn't contain no-cache headers.

        Test: http/tests/websocket/tests/hybi/nocache.html

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeMessage):
        (WebCore::WebSocketHandshake::clientHandshakeRequest):

2012-10-11  Andy Estes  <aestes@apple.com>

        Add some basic methods and properties to the injected bundle Objective-C DOM API
        https://bugs.webkit.org/show_bug.cgi?id=99137

        Reviewed by Sam Weinig.

        Export needed symbols.

        * WebCore.exp.in:

2012-10-11  Rik Cabanier  <cabanier@adobe.com>

        Bad copy constructor in StyleRareNonInheritedData
        https://bugs.webkit.org/show_bug.cgi?id=98950

        Reviewed by Eric Seidel.

        Typo in copy constructor caused blendmode to always be the default.

        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):

2012-10-11  Takashi Sakamoto  <tasak@google.com>

        [WebKit IDL] remove all module from idl files.
        https://bugs.webkit.org/show_bug.cgi?id=99007

        Reviewed by Kentaro Hara.

        Since current WebIDL spec doesn't support "module", remove
        module from all idl files.

        No new tests. I ran run-bindings-tests and no error was reported.

        * Modules/battery/BatteryManager.idl:
        * Modules/battery/NavigatorBattery.idl:
        * Modules/filesystem/DOMFileSystem.idl:
        * Modules/filesystem/DOMFileSystemSync.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DataTransferItemFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryEntrySync.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/DirectoryReaderSync.idl:
        * Modules/filesystem/EntriesCallback.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/EntryArray.idl:
        * Modules/filesystem/EntryArraySync.idl:
        * Modules/filesystem/EntryCallback.idl:
        * Modules/filesystem/EntrySync.idl:
        * Modules/filesystem/ErrorCallback.idl:
        * Modules/filesystem/FileCallback.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/FileEntrySync.idl:
        * Modules/filesystem/FileSystemCallback.idl:
        * Modules/filesystem/FileWriter.idl:
        * Modules/filesystem/FileWriterCallback.idl:
        * Modules/filesystem/FileWriterSync.idl:
        * Modules/filesystem/HTMLInputElementFileSystem.idl:
        * Modules/filesystem/Metadata.idl:
        * Modules/filesystem/MetadataCallback.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/gamepad/NavigatorGamepad.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/geolocation/Geoposition.idl:
        * Modules/geolocation/NavigatorGeolocation.idl:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionError.idl:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * 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:
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl:
        * Modules/intents/DOMWindowIntents.idl:
        * Modules/intents/DeliveredIntent.idl:
        * Modules/intents/Intent.idl:
        * Modules/intents/IntentResultCallback.idl:
        * Modules/intents/NavigatorIntents.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/IceCallback.idl:
        * Modules/mediastream/IceCandidate.idl:
        * Modules/mediastream/LocalMediaStream.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamEvent.idl:
        * Modules/mediastream/MediaStreamList.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/MediaStreamTrackEvent.idl:
        * Modules/mediastream/MediaStreamTrackList.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/NavigatorUserMediaError.idl:
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl:
        * Modules/mediastream/PeerConnection00.idl:
        * Modules/mediastream/RTCErrorCallback.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCIceCandidateEvent.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCSessionDescriptionCallback.idl:
        * Modules/mediastream/RTCStatsCallback.idl:
        * Modules/mediastream/RTCStatsElement.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/mediastream/SessionDescription.idl:
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl:
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/DOMWindowNotifications.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/notifications/WorkerContextNotifications.idl:
        * Modules/proximity/DeviceProximityEvent.idl:
        * Modules/quota/DOMWindowQuota.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageInfoErrorCallback.idl:
        * Modules/quota/StorageInfoQuotaCallback.idl:
        * Modules/quota/StorageInfoUsageCallback.idl:
        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/speech/SpeechGrammar.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionAlternative.idl:
        * Modules/speech/SpeechRecognitionError.idl:
        * Modules/speech/SpeechRecognitionEvent.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/vibration/NavigatorVibration.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferCallback.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioChannelMerger.idl:
        * Modules/webaudio/AudioChannelSplitter.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioDestinationNode.idl:
        * Modules/webaudio/AudioGain.idl:
        * Modules/webaudio/AudioGainNode.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioPannerNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioProcessingEvent.idl:
        * Modules/webaudio/AudioSourceNode.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webaudio/DelayNode.idl:
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/JavaScriptAudioNode.idl:
        * Modules/webaudio/MediaElementAudioSourceNode.idl:
        * Modules/webaudio/MediaStreamAudioSourceNode.idl:
        * Modules/webaudio/OfflineAudioCompletionEvent.idl:
        * Modules/webaudio/Oscillator.idl:
        * Modules/webaudio/RealtimeAnalyserNode.idl:
        * Modules/webaudio/WaveShaperNode.idl:
        * Modules/webaudio/WaveTable.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLException.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/webdatabase/SQLTransactionSyncCallback.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/CloseEvent.idl:
        * Modules/websockets/DOMWindowWebSocket.idl:
        * Modules/websockets/WebSocket.idl:
        * Modules/websockets/WorkerContextWebSocket.idl:
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/TestCustomNamedGetter.idl:
        * bindings/scripts/test/TestDomainSecurity.idl:
        * bindings/scripts/test/TestEventConstructor.idl:
        * bindings/scripts/test/TestEventTarget.idl:
        * bindings/scripts/test/TestException.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestMediaQueryListListener.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestNode.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * bindings/scripts/test/TestTypedArray.idl:
        * css/CSSCharsetRule.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRule.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSUnknownRule.idl:
        * css/CSSValue.idl:
        * css/CSSValueList.idl:
        * css/Counter.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/RGBColor.idl:
        * css/Rect.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSKeyframeRule.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * css/WebKitCSSRegionRule.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/Attr.idl:
        * dom/BeforeLoadEvent.idl:
        * dom/CDATASection.idl:
        * dom/CharacterData.idl:
        * dom/ClientRect.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/Comment.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.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/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Entity.idl:
        * dom/EntityReference.idl:
        * dom/ErrorEvent.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageChannel.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationCallback.idl:
        * dom/MutationEvent.idl:
        * dom/MutationObserver.idl:
        * dom/MutationRecord.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/Notation.idl:
        * dom/OverflowEvent.idl:
        * dom/PageTransitionEvent.idl:
        * dom/PopStateEvent.idl:
        * dom/ProcessingInstruction.idl:
        * dom/ProgressEvent.idl:
        * dom/PropertyNodeList.idl:
        * dom/Range.idl:
        * dom/RangeException.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/ShadowRoot.idl:
        * dom/StringCallback.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/Touch.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * dom/UIEvent.idl:
        * dom/WebKitAnimationEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WebKitTransitionEvent.idl:
        * dom/WheelEvent.idl:
        * editing/DOMTransaction.idl:
        * editing/UndoManager.idl:
        * fileapi/Blob.idl:
        * fileapi/File.idl:
        * fileapi/FileError.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDataListElement.idl:
        * html/HTMLDetailsElement.idl:
        * html/HTMLDialogElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIntentElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLMeterElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLProgressElement.idl:
        * html/HTMLPropertiesCollection.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLSourceElement.idl:
        * html/HTMLSpanElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLTitleElement.idl:
        * html/HTMLTrackElement.idl:
        * html/HTMLUListElement.idl:
        * html/HTMLUnknownElement.idl:
        * html/HTMLVideoElement.idl:
        * html/ImageData.idl:
        * html/MediaController.idl:
        * html/MediaError.idl:
        * html/MediaKeyError.idl:
        * html/MediaKeyEvent.idl:
        * html/MicroDataItemValue.idl:
        * html/RadioNodeList.idl:
        * html/TextMetrics.idl:
        * html/TimeRanges.idl:
        * html/ValidityState.idl:
        * html/VoidCallback.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPattern.idl:
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DataView.idl:
        * html/canvas/EXTTextureFilterAnisotropic.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLActiveInfo.idl:
        * html/canvas/WebGLBuffer.idl:
        * html/canvas/WebGLCompressedTextureS3TC.idl:
        * html/canvas/WebGLContextAttributes.idl:
        * html/canvas/WebGLContextEvent.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLDepthTexture.idl:
        * html/canvas/WebGLFramebuffer.idl:
        * html/canvas/WebGLLoseContext.idl:
        * html/canvas/WebGLProgram.idl:
        * html/canvas/WebGLRenderbuffer.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/canvas/WebGLShader.idl:
        * html/canvas/WebGLShaderPrecisionFormat.idl:
        * html/canvas/WebGLTexture.idl:
        * html/canvas/WebGLUniformLocation.idl:
        * html/canvas/WebGLVertexArrayObjectOES.idl:
        * html/shadow/HTMLContentElement.idl:
        * html/shadow/HTMLShadowElement.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.idl:
        * html/track/TrackEvent.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.idl:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/AbstractView.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/Coordinates.idl:
        * page/Crypto.idl:
        * page/DOMSecurityPolicy.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/DOMWindowPagePopup.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/MemoryInfo.idl:
        * page/Navigator.idl:
        * page/PagePopupController.idl:
        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        * page/PerformanceEntryList.idl:
        * page/PerformanceNavigation.idl:
        * page/PerformanceResourceTiming.idl:
        * page/PerformanceTiming.idl:
        * page/Screen.idl:
        * page/SpeechInputEvent.idl:
        * page/SpeechInputResult.idl:
        * page/SpeechInputResultList.idl:
        * page/WebKitAnimation.idl:
        * page/WebKitAnimationList.idl:
        * page/WebKitPoint.idl:
        * page/WorkerNavigator.idl:
        * plugins/DOMMimeType.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGAElement.idl:
        * svg/SVGAltGlyphDefElement.idl:
        * svg/SVGAltGlyphElement.idl:
        * svg/SVGAltGlyphItemElement.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimateColorElement.idl:
        * svg/SVGAnimateElement.idl:
        * svg/SVGAnimateMotionElement.idl:
        * svg/SVGAnimateTransformElement.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/SVGAnimationElement.idl:
        * svg/SVGCircleElement.idl:
        * svg/SVGClipPathElement.idl:
        * svg/SVGColor.idl:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGCursorElement.idl:
        * svg/SVGDefsElement.idl:
        * svg/SVGDescElement.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstance.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGEllipseElement.idl:
        * svg/SVGException.idl:
        * svg/SVGExternalResourcesRequired.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFEComponentTransferElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDiffuseLightingElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEDistantLightElement.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEFuncAElement.idl:
        * svg/SVGFEFuncBElement.idl:
        * svg/SVGFEFuncGElement.idl:
        * svg/SVGFEFuncRElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFEMergeElement.idl:
        * svg/SVGFEMergeNodeElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFEOffsetElement.idl:
        * svg/SVGFEPointLightElement.idl:
        * svg/SVGFESpecularLightingElement.idl:
        * svg/SVGFESpotLightElement.idl:
        * svg/SVGFETileElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.idl:
        * svg/SVGFitToViewBox.idl:
        * svg/SVGFontElement.idl:
        * svg/SVGFontFaceElement.idl:
        * svg/SVGFontFaceFormatElement.idl:
        * svg/SVGFontFaceNameElement.idl:
        * svg/SVGFontFaceSrcElement.idl:
        * svg/SVGFontFaceUriElement.idl:
        * svg/SVGForeignObjectElement.idl:
        * svg/SVGGElement.idl:
        * svg/SVGGlyphElement.idl:
        * svg/SVGGlyphRefElement.idl:
        * svg/SVGGradientElement.idl:
        * svg/SVGHKernElement.idl:
        * svg/SVGImageElement.idl:
        * svg/SVGLangSpace.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGLineElement.idl:
        * svg/SVGLinearGradientElement.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMPathElement.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGMetadataElement.idl:
        * svg/SVGMissingGlyphElement.idl:
        * svg/SVGNumber.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSeg.idl:
        * svg/SVGPathSegArcAbs.idl:
        * svg/SVGPathSegArcRel.idl:
        * svg/SVGPathSegClosePath.idl:
        * svg/SVGPathSegCurvetoCubicAbs.idl:
        * svg/SVGPathSegCurvetoCubicRel.idl:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl:
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl:
        * svg/SVGPathSegCurvetoQuadraticAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticRel.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl:
        * svg/SVGPathSegLinetoAbs.idl:
        * svg/SVGPathSegLinetoHorizontalAbs.idl:
        * svg/SVGPathSegLinetoHorizontalRel.idl:
        * svg/SVGPathSegLinetoRel.idl:
        * svg/SVGPathSegLinetoVerticalAbs.idl:
        * svg/SVGPathSegLinetoVerticalRel.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPathSegMovetoAbs.idl:
        * svg/SVGPathSegMovetoRel.idl:
        * svg/SVGPatternElement.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.idl:
        * svg/SVGPolygonElement.idl:
        * svg/SVGPolylineElement.idl:
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGRadialGradientElement.idl:
        * svg/SVGRect.idl:
        * svg/SVGRectElement.idl:
        * svg/SVGRenderingIntent.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGScriptElement.idl:
        * svg/SVGSetElement.idl:
        * svg/SVGStopElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGStylable.idl:
        * svg/SVGStyleElement.idl:
        * svg/SVGSwitchElement.idl:
        * svg/SVGSymbolElement.idl:
        * svg/SVGTRefElement.idl:
        * svg/SVGTSpanElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTextElement.idl:
        * svg/SVGTextPathElement.idl:
        * svg/SVGTextPositioningElement.idl:
        * svg/SVGTitleElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * svg/SVGTransformable.idl:
        * svg/SVGURIReference.idl:
        * svg/SVGUnitTypes.idl:
        * svg/SVGUseElement.idl:
        * svg/SVGVKernElement.idl:
        * svg/SVGViewElement.idl:
        * svg/SVGViewSpec.idl:
        * svg/SVGZoomAndPan.idl:
        * svg/SVGZoomEvent.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * testing/MallocStatistics.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * workers/WorkerLocation.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestProgressEvent.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:
        Removed "module".

2012-10-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=98700
        ScrollingCoordinator is a hot mess of if-defs

        Reviewed by Anders Carlsson.

        This patch moves all of the threaded scrolling code in 
        ScrollingCoordinator into a new class called ScrollingCoordinatorMac 
        which inherits from ScrollingCoordinator. 

        It also adds ScrollingCoordinatorChromium to do Chromium-specific work. 
        ScrollingCoordinator itself does work that is cross-platform. 
        
        Finally, this patch also eliminates ScrollingCoordinatorNone. 
        ScrollingCoordinator is now sufficient for platforms that relied on 
        ScrollingCoordinatorNone to build.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        (WebCore):
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::~ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::pageDestroyed):
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::computeCurrentWheelEventHandlerCount):
        (WebCore::ScrollingCoordinator::scrollLayerForFrameView):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore):
        (ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::scrollingTree):
        (WebCore::ScrollingCoordinator::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::supportsFixedPositionLayers):
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::ScrollingCoordinator::handleWheelEvent):
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPositionAndScrollLayerPosition):
        (WebCore::ScrollingCoordinator::attachToStateTree):
        (WebCore::ScrollingCoordinator::detachFromStateTree):
        (WebCore::ScrollingCoordinator::clearStateTree):
        (WebCore::ScrollingCoordinator::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinator::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinator::setLayerIsContainerForFixedPositionLayers):
        (WebCore::ScrollingCoordinator::setLayerIsFixedToContainerLayer):
        (WebCore::ScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):
        * page/scrolling/ScrollingCoordinatorNone.cpp: Removed.
        * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
        (WebCore::ScrollingCoordinatorChromium::ScrollingCoordinatorChromium):
        (WebCore::ScrollingCoordinatorChromium::~ScrollingCoordinatorChromium):
        (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
        (WebCore):
        (WebCore::ScrollingCoordinatorChromium::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinatorChromium::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinatorChromium::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinatorChromium::setScrollLayer):
        (WebCore::ScrollingCoordinatorChromium::setNonFastScrollableRegion):
        (WebCore::ScrollingCoordinatorChromium::setWheelEventHandlerCount):
        (WebCore::ScrollingCoordinatorChromium::setShouldUpdateScrollLayerPositionOnMainThread):
        (WebCore::ScrollingCoordinatorChromium::setLayerIsContainerForFixedPositionLayers):
        (WebCore::ScrollingCoordinatorChromium::setLayerIsFixedToContainerLayer):
        (WebCore::ScrollingCoordinatorChromium::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinatorChromium::recomputeWheelEventHandlerCountForFrameView):
        * page/scrolling/chromium/ScrollingCoordinatorChromium.h: Added.
        (WebCore):
        (ScrollingCoordinatorChromium):
        (WebCore::ScrollingCoordinatorChromium::supportsFixedPositionLayers):
        * page/scrolling/mac/ScrollingCoordinatorMac.h: Added.
        (WebCore):
        (ScrollingCoordinatorMac):
        (ScrollParameters):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::~ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::pageDestroyed):
        (WebCore):
        (WebCore::ScrollingCoordinatorMac::scrollingTree):
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinatorMac::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::frameViewHorizontalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::frameViewVerticalScrollbarLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::requestScrollPositionUpdate):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        (WebCore::ScrollingCoordinatorMac::updateMainFrameScrollPositionAndScrollLayerPosition):
        (WebCore::ScrollingCoordinatorMac::attachToStateTree):
        (WebCore::ScrollingCoordinatorMac::detachFromStateTree):
        (WebCore::ScrollingCoordinatorMac::clearStateTree):
        (WebCore::ScrollingCoordinatorMac::stateNodeForID):
        (WebCore::ScrollingCoordinatorMac::ensureRootStateNodeForFrameView):
        (WebCore::ScrollingCoordinatorMac::setScrollLayerForNode):
        (WebCore::ScrollingCoordinatorMac::setNonFastScrollableRegionForNode):
        (WebCore::ScrollingCoordinatorMac::setScrollParametersForNode):
        (WebCore::ScrollingCoordinatorMac::setWheelEventHandlerCountForNode):
        (WebCore::ScrollingCoordinatorMac::setShouldUpdateScrollLayerPositionOnMainThread):
        (WebCore::ScrollingCoordinatorMac::updateMainFrameScrollLayerPosition):
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorMac::scrollingStateTreeCommitterTimerFired):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2012-10-11  Takashi Sakamoto  <tasak@google.com>

        [Shadow DOM] Insertion points need resetStyleInheritance
        https://bugs.webkit.org/show_bug.cgi?id=93922

        Reviewed by Dimitri Glazkov.

        Implemented resetStyleInheritance of insertion points.
        Its spec link is http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-html-content-element-reset-style-inheritance

        Test: fast/dom/shadow/insertion-point-resetStyleInheritance.html

        * css/StyleResolver.cpp:
        (WebCore::isResetStyleInheritance):
        Added a new function to check whether there exists any insertion
        point which has reset-style-inhertiance flag set to be true.
        (WebCore::StyleResolver::initForStyleResolve):
        Modified to use the above function to check reset-style-inheritance.
        * html/shadow/HTMLContentElement.idl:
        * html/shadow/HTMLShadowElement.idl:
        Added a new attribute for reset-style-inheritance.
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        Initialized a new member variable for reset-style-inheritance.
        (WebCore::InsertionPoint::resetStyleInheritance):
        (WebCore::InsertionPoint::setResetStyleInheritance):
        Implemented setter/getter for reset-style-inheritance.
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        Added a new member variable for reset-style-inheritance.

2012-10-11  Anders Carlsson  <andersca@apple.com>

        Attempt to fix build broken by r131125.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::addImageToResources):
        KURL::utf8String() is apparently a USE(GOOGLEURL) feature. Call url.string().utf8() instead.

2012-10-11  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Use harfbuzz-ng by default on Linux
        https://bugs.webkit.org/show_bug.cgi?id=97281

        Reviewed by Tony Chang.

        Switch old harfbuzz to harfbuzz-ng on chromium linux port.

        No new tests. Existing tests should cover this switch.
        Test expectations will be updated.

        * WebCore.gyp/WebCore.gyp:

2012-10-11  Nat Duca  <nduca@chromium.org>

        Expose high-resolution on requestAnimationFrame callback
        https://bugs.webkit.org/show_bug.cgi?id=66683

        This changes requestAnimationFrame's animationStartTime argument
        to be a high resolution DOM timestamp, per disucssion here:
        http://lists.w3.org/Archives/Public/public-web-perf/2012Apr/0004.html

        Reviewed by James Robinson.

        Covered by existing requestAnimationFrame tests.

        * dom/Document.cpp:
        (WebCore::Document::serviceScriptedAnimations):
        * dom/Document.h:
        (Document):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::ScriptedAnimationController):
        (WebCore::ScriptedAnimationController::serviceScriptedAnimations):
        (WebCore):
        (WebCore::ScriptedAnimationController::windowScreenDidChange):
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        (WebCore::ScriptedAnimationController::animationTimerFired):
        (WebCore::ScriptedAnimationController::displayRefreshFired):
        * dom/ScriptedAnimationController.h:
        (ScriptedAnimationController):
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/FrameView.h:
        (FrameView):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::notifyClients):
        * platform/graphics/DisplayRefreshMonitor.h:
        (DisplayRefreshMonitor):
        * platform/graphics/blackberry/DisplayRefreshMonitorBlackBerry.cpp:
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/mac/DisplayRefreshMonitorMac.cpp:
        (WebCore):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):

2012-10-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131100.
        http://trac.webkit.org/changeset/131100
        https://bugs.webkit.org/show_bug.cgi?id=99127

        Caused an ASSERT (Requested by abarth|gardening on #webkit).

        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::compositeFunctionString):

2012-10-11  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Improve vertical text rendering of HarfBuzzShaper (Re-land)
        https://bugs.webkit.org/show_bug.cgi?id=98979

        Reviewed by Tony Chang.

        - Specify 'vert' and 'vrt2' features when we render vertical text.
        - Set appropriate script so that harfbuzz-ng can use the features.

        No new tests. fast/text/international/text-spliced-font.html should cover this change.
        This change will affect after switching to harfbuzz-ng.

        * platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:
        (WebCore::HarfBuzzNGFace::HarfBuzzNGFace):
        (WebCore::findScriptForVerticalGlyphSubstitution): Added.
        (WebCore):
        (WebCore::HarfBuzzNGFace::setScriptForVerticalGlyphSubstitution): Added.
        * platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h:
        (HarfBuzzNGFace): Added m_scriptForVerticalText.
        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setFontFeatures):
        Set 'vert' and 'vrt2' features when orientation() == Vertical.
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):
        Call setScriptForVerticalGlyphSubstitution() when orientation() == Vertical.

2012-10-11  Jay Civelli  <jcivelli@chromium.org>

        Fix for a crasher when generating MHTML for a page containing SVG images.
        https://bugs.webkit.org/show_bug.cgi?id=99105

        Reviewed by Adam Barth.

        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        (WebCore::PageSerializer::addImageToResources):

2012-10-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131107.
        http://trac.webkit.org/changeset/131107
        https://bugs.webkit.org/show_bug.cgi?id=99126

        Causes an ASSERT (Requested by abarth|gardening on #webkit).

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::labelForElement):
        * dom/DocumentOrderedMap.cpp:
        * dom/DocumentOrderedMap.h:
        (DocumentOrderedMap):
        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore):
        (WebCore::Element::willModifyAttribute):
        * dom/Element.h:
        (Element):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::TreeScope):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):

2012-10-11  Tim Horton  <timothy_horton@apple.com>

        LocalCurrentGraphicsContext will never restore the current context to null
        https://bugs.webkit.org/show_bug.cgi?id=99122

        Reviewed by Simon Fraser.

        LocalCurrentGraphicsContext is meant to cause temporary changes to
        NSGraphicsContext's currentContext. However, if it is entered when
        currentContext is null, it will not restore to null, as a null
        m_savedNSGraphicsContext was being used to indicate that the current and
        passed-in graphics contexts were equal (and thus no save/restore was required).

        Add a separate flag for whether or not we need to restore the context.

        Also flip the order of calls to restore graphics context state so that
        exiting LocalCurrentGraphicsContext does things in exactly the opposite
        of entry.

        * platform/mac/LocalCurrentGraphicsContext.h:
        (LocalCurrentGraphicsContext):
        * platform/mac/LocalCurrentGraphicsContext.mm:
        (WebCore::LocalCurrentGraphicsContext::LocalCurrentGraphicsContext):
        (WebCore::LocalCurrentGraphicsContext::~LocalCurrentGraphicsContext):

2012-10-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r131109.
        http://trac.webkit.org/changeset/131109
        https://bugs.webkit.org/show_bug.cgi?id=99124

        Does not compile on chromium-mac (Requested by
        abarth|gardening on #webkit).

        * platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:
        (WebCore::HarfBuzzNGFace::HarfBuzzNGFace):
        * platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h:
        (HarfBuzzNGFace):
        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setFontFeatures):
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):

2012-10-11  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=99111
        ScrollingStateNode should keep its Vector of children in an OwnPtr

        Reviewed by Ada Chan.

        Vector<OwnPtr<ScrollingStateNode> >* m_children; is now:
         OwnPtr<Vector<OwnPtr<ScrollingStateNode> > > m_children;
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::~ScrollingStateNode):
        (WebCore::ScrollingStateNode::appendChild):
        * page/scrolling/ScrollingStateNode.h:
        (ScrollingStateNode):

2012-10-11  Levi Weintraub  <leviw@chromium.org>

        [Sub pixel layout] Fast-path iframe scrolling can picks up an extra pixel
        https://bugs.webkit.org/show_bug.cgi?id=98571

        Reviewed by Emil A Eklund.

        Refactoring all coordinate-switching functionality to use a single "mode" flag
        as opposed to having a bunch of boolean values. This enables the same set of
        options across the board, and a consistent interface. This was previously
        done for mapLocalToContainer.

        The imptetus for this for this stems from the one logical change in this patch
        which only effects sub-pixel layout. FrameView::convertToRenderer and
        convertFromRenderer return IntPoint coordinates, and need to also snap transform
        offsets to determine proper rects for scrolling.

        Unlabeled functions below are simply being updated to these new interfaces.

        Test: fast/sub-pixel/sub-pixel-iframe-copy-on-scroll.html

        * WebCore.exp.in:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/Element.cpp:
        (WebCore::Element::boundsInRootViewSpace):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/Node.cpp:
        (WebCore::Node::convertToPage):
        (WebCore::Node::convertFromPage):
        * 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::convertToRenderer): Now pixel-snaps offsets before passing
        them to TransformState, which transforms the coordinates.
        (WebCore::FrameView::convertFromRenderer): Ditto.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteQuads):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteQuads):
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::absolutePoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::absoluteToContents):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint):
        (WebCore::RenderObject::localToContainerQuad):
        (WebCore::RenderObject::localToContainerPoint):
        * rendering/RenderObject.h:
        (RenderObject): MapLocalToContainerFlags is now MapCoordinatesFlags since it's
        now used for other conversion methods.
        (WebCore::RenderObject::localToAbsoluteQuad):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):
        * rendering/RenderView.h:
        (RenderView):
        * 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.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):

2012-10-11  Adam Barth  <abarth@webkit.org>

        Incorrect/Illegal static cast in FrameView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=98943

        Reviewed by Eric Seidel.

        HTMLFrameElementBase is the common base class for <frame> and <iframe>.

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

2012-10-11  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Improve vertical text rendering of HarfBuzzShaper
        https://bugs.webkit.org/show_bug.cgi?id=98979

        Reviewed by Tony Chang.

        - Specify 'vert' and 'vrt2' features when we render vertical text.
        - Set appropriate script so that harfbuzz-ng can use the features.

        No new tests. fast/text/international/text-spliced-font.html should cover this change.
        This change will affect after switching to harfbuzz-ng.

        * platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:
        (WebCore::HarfBuzzNGFace::HarfBuzzNGFace):
        (WebCore::findScriptForVerticalGlyphSubstitution): Added.
        (WebCore):
        (WebCore::HarfBuzzNGFace::setScriptForVerticalGlyphSubstitution): Added.
        * platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h:
        (HarfBuzzNGFace): Added m_scriptForVerticalText.
        * platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setFontFeatures):
        Set 'vert' and 'vrt2' features when orientation() == Vertical.
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):
        Call setScriptForVerticalGlyphSubstitution() when orientation() == Vertical.

2012-10-11  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::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::addLabel):
        (WebCore):
        (WebCore::TreeScope::removeLabel):
        (WebCore::TreeScope::labelElementForId):
        * dom/TreeScope.h:
        (WebCore):
        (TreeScope):
        (WebCore::TreeScope::shouldCacheLabelsByForAttribute):

2012-10-11  James Simonsen  <simonjam@chromium.org>

        unprefix window.performance.webkitNow()
        https://bugs.webkit.org/show_bug.cgi?id=88278

        Reviewed by Tony Gentilcore.

        Test: fast/dom/Window/window-properties-performance.html
              fast/performance/performance-now-timestamps.html

        * page/Performance.cpp:
        (WebCore::Performance::now):
        * page/Performance.h:
        (Performance):
        * page/Performance.idl:

2012-10-11  Roger Fong  <roger_fong@apple.com>

        [WebGL] [Mac] only the mapped symbol for the first element of a uniform/attribute array is stored.
        https://bugs.webkit.org/show_bug.cgi?id=98966

        Reviewed by Dean Jackson.

        We currently do not add name/mappedName symbol pairs for each element of a uniform/attribute array.
        This is because we only add a number of symbols equal to how many symbols the shader compiler tells us there are.
        The shader compiler treats an array as a single uniform. We need to be adding in symbols to the map for each element of the array ourselves.
        The mappedName of each array element is the same between elements except for the "[index]" at the end so this is easy to do.

        Tested using Khronos WebGL conformance suite:
        conformance/glsl/misc/glsl-long-variable-names.html

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo):

2012-10-11  Andreas Kling  <kling@webkit.org>

        ElementAttributeData shouldn't be managing Element's callbacks.
        <http://webkit.org/b/98987>

        Reviewed by Anders Carlsson.

        Dispatch the following attribute-related Element callbacks from within Element
        instead of ElementAttributeData. Also made them private.

            - willModifyAttribute
            - didModifyAttribute
            - didAddAttribute
            - didRemoveAttribute

        No behavior change, just making ElementAttributeData a bit dumber (a good thing.)

        * dom/Element.cpp:
        (WebCore::Element::detachAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::Element::addAttributeInternal):
        * dom/Element.h:
        * dom/ElementAttributeData.cpp:
        (WebCore::ElementAttributeData::addAttribute):
        (WebCore::ElementAttributeData::removeAttribute):
        * dom/ElementAttributeData.h:

2012-10-11  Huang Dongsung  <luxtella@company100.net>

        [CSS Shaders] Make custom filters use a premultiplied buffer.
        https://bugs.webkit.org/show_bug.cgi?id=98396

        Reviewed by Dean Jackson.

        Currently, a GLSL css_Composite function returns a premultiplied color, so
        FECustomFilter must make a premultiplied buffer in the case when an author is
        using the CSS mix function.

        In addition, there are two performance benefits when FECustomFilter uses a premultiplied buffer.
        1. FilterEffect::asImageBuffer is faster.
        2. In the future when Accelerated Compositing implementations use
        FECustomFilter, they do not need to convert an unmultiplied buffer to a
        premultiplied buffer.

        Test: css3/filters/custom/custom-filter-composite-fractional-source-alpha.html

        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::applyShader):

2012-10-11  Rob Buis  <rbuis@rim.com>

        [CMAKE] Do not add include dirs twice
        https://bugs.webkit.org/show_bug.cgi?id=99099

        Reviewed by Yong Li.

        Do not add WebCore_INCLUDE_DIRECTORIES to WebCoreTestSupport_INCLUDE_DIRECTORIES, the includes_directory
        call does this for us.

        * CMakeLists.txt:

2012-10-11  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/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::compositeFunctionString):

2012-10-11  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: IDL types defined in spec should be visible to scripts
        https://bugs.webkit.org/show_bug.cgi?id=99093

        Reviewed by Adam Barth.

        Interfaces defined in the spec WebIDL, such as IDBCursorWithValue, should be exposed
        to scripts as properties of the global object. A few types were missing - add them.

        Test: storage/indexeddb/interfaces.html

        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl:

2012-10-11  Geoffrey Garen  <ggaren@apple.com>

        Removed ASSERT_CLASS_FITS_IN_CELL
        https://bugs.webkit.org/show_bug.cgi?id=97634

        Reviewed by Mark Hahnenberg.

        * bindings/js/JSDOMWindowShell.cpp:
        (WebCore):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore):
        * bindings/js/JSWorkerContextBase.cpp:
        (WebCore):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSFloat64Array.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore):
        * bridge/runtime_method.cpp:
        (JSC):

2012-10-10  Brady Eidson  <beidson@apple.com>

        Switch ResourceLoader::resourceData() from SharedBuffer to ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98976

        Reviewed by Anders Carlsson.

        No new tests (No change in behavior).

        * WebCore.exp.in:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::appendBytes):
        (WebCore::ImageDocumentParser::finish):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::mainResourceContent):
        (WebCore::InspectorPageAgent::sharedBufferContent):
        (WebCore):
        (WebCore::InspectorPageAgent::dataContent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResourceData):
        (WebCore::DocumentLoader::setupForReplaceByMIMEType):
        (WebCore::DocumentLoader::maybeCreateArchive):
        (WebCore::DocumentLoader::mainResource):
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent):
        * loader/DocumentLoader.h:
        (WebCore):
        (DocumentLoader):
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::append):
        (WebCore):
        (WebCore::ResourceBuffer::clear):
        * loader/ResourceBuffer.h:
        (ResourceBuffer):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::resourceData):
        (WebCore::ResourceLoader::addData):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/ResourceLoader.h:
        (WebCore):
        (ResourceLoader):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::sendDataToResource):
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::finishedLoadingMainResource):

2012-10-11  Konrad Piascik  <kpiascik@rim.com>

        Web Inspector: node search does not work with elements on touch start listener
        https://bugs.webkit.org/show_bug.cgi?id=95252

        Reviewed by Pavel Feldman.

        Added new InspectorInstrumentation::handleTouchEvent() method which
        will prevent a touch handler from firing and inspect and element if we
        are already searching for a node to highlight.
        Now when a user has chosen to inspect element (magnifying glass icon)
        and touches on a page the event will be directed to inspector and
        handled appropriately.

        Not testable.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::handleTouchEvent):
        (WebCore):
        * inspector/InspectorDOMAgent.h:
        (InspectorDOMAgent):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore):
        (WebCore::InspectorInstrumentation::handleTouchEventImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        (WebCore::InspectorInstrumentation::handleTouchEvent):
        (WebCore):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):

2012-10-11  Otto Derek Cheung  <otcheung@rim.com>

        [BlackBerry] Credentials for HTTPS urls are saved in the HTTP protection space
        https://bugs.webkit.org/show_bug.cgi?id=99082

        Reviewed by Rob Buis.

        Adding support for secure ProtectionSpaces in Credentials
        to prevent credentials from being overwritten/used when the user
        accesses both versions of the same url.

        PR 199457

        The issue was the secure/non-secure version of the same protocol
        were using the same ProtectionSpace enum in the network stack. When
        the credentials are saved, it will overwrite each other since the
        protection object is identical.

        The fix is to use the WebKit provided secure enums when the protcol is secure.

        To test this, access a restricted site that is running on http. Save the
        password and access the same restricted site (same domain
        and path) but on https. The browser should prompt for credentials.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::notifyAuthReceived):
        (WebCore::NetworkJob::handleFTPHeader):
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::storeCredentials):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):

2012-10-11  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [texmap] logic error in BitmapTextureGL::updateContents
        https://bugs.webkit.org/show_bug.cgi?id=98969

        Reviewed by Noam Rosenthal.

        Incorrect test (bytesPerLine == targetRect.width() / 4) never
        evaluates to true. Change it to correct test 
        (bytesPerLine == targetRect.width() * 4)

        No new tests because no functional change.

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):

2012-10-11  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12477191> Combined text reverts to full-width font after a style change
        https://bugs.webkit.org/show_bug.cgi?id=99009

        Reviewed by John Sullivan.

        Test: fast/text/text-combine-width-after-style-change.html

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::styleDidChange): Changed to reset m_isCombined to false, to
        ensure that combineText() is called on the next layout.

2012-10-11  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        accelerated compositing does not work with ati driver
        https://bugs.webkit.org/show_bug.cgi?id=97472

        Reviewed by Martin Robinson.

        Create m_parentWindow at positive position. Otherwise, parts of it are
        not displayed on ati drivers.

        Covered by existing tests.

        * platform/gtk/RedirectedXCompositeWindow.cpp:
        (WebCore::RedirectedXCompositeWindow::RedirectedXCompositeWindow):

2012-10-11  Jaehun Lim  <ljaehun.lim@samsung.com>

        Fix JPEG decoding faiure when IMAGE_DECODER_DOWN_SAMPLING is enabled
        https://bugs.webkit.org/show_bug.cgi?id=98878

        Reviewed by Kenneth Russell.

        When using libjpeg-turbo and enabling IMAGE_DECODER_DOWN_SAMPLING,
        JPEG decoding failed because of no support for JCS_EXT_RGBA, JCS_EXT_BGRA.
        Set RGBA values when color space is JCS_EXT_RGBA or JCS_EXT_BGRA.

        No new tests.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::outputScanlines):

2012-10-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Preview HTML in ajax responses in network panel
        https://bugs.webkit.org/show_bug.cgi?id=99066

        Reviewed by Yury Semikhatsky.

        HTML preview is now shown for XHR responses with text/html mime types.
        Also RequestHTMLView is refactored to use sandbox iframe correctly.
        Also extracted a method to generate dataURL from resource/request content.

        * inspector/front-end/NetworkRequest.js:
        (WebInspector.NetworkRequest):
        (WebInspector.NetworkRequest.prototype.populateImageSource):
        (WebInspector.NetworkRequest.prototype.asDataURL):
        * inspector/front-end/RequestHTMLView.js:
        (WebInspector.RequestHTMLView):
        (WebInspector.RequestHTMLView.prototype._createIFrame):
        * inspector/front-end/RequestPreviewView.js:
        (WebInspector.RequestPreviewView.prototype._createPreviewView):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.populateImageSource):
        * inspector/front-end/ResourceUtils.js:
        (WebInspector.contentAsDataURL):

2012-10-11  Christophe Dumez  <christophe.dumez@intel.com>

        Regression(r131058): Broke EFL build
        https://bugs.webkit.org/show_bug.cgi?id=99079

        Unreviewed build fix.

        Use iterator::value instead of iterator::second to fix
        build break after r131058.

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

2012-10-11  Mihai Balan  <mibalan@adobe.com>

        Always enable the experiments tab for WebKit nightly

        Web Inspector: Enabling experiments tab in WebKit nightly.
        https://bugs.webkit.org/show_bug.cgi?id=98923

        Reviewed by Pavel Feldman.

        Enabling Web Inspector experiments tab in WebKit nightly. This is done by adding a new
        Preference key, Preferences.experimentsEnabled. Default values are true for WebKit and false
        for Chromium. They can also be overridden as before (in Chromium)

        * inspector/front-end/Settings.js:
        (WebInspector.ExperimentsSettings.prototype.get experimentsEnabled):

2012-10-11  Hayato Ito  <hayato@chromium.org>

        Support re-projection for Shadow DOM.
        https://bugs.webkit.org/show_bug.cgi?id=97151

        Reviewed by Dimitri Glazkov.

        Update node distribution algorithm so that nodes can be re-projected to insertion points
        in nested shadow subtree.

        See the latest Shadow DOM spec for what 're-projected' means:
        - http://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html
        Also see the related W3C bug:
        - http://www.w3.org/Bugs/Public/show_bug.cgi?id=18513

        Since this change breaks existing behavior, we have to update several code at once, which includes:
        - ContentDistributer: ContentDistributor now re-projects distributed nodes.
        - ComposedShadowTreeWalker: ComposedShadowTreeWalker is now aware of re-projection. That can
          resolve re-projection transparently.
        - AncestorChainWalker (formerly named ComposedShadowTreeParentWallker):
          AncestorChainWalker is now aware of re-projection. I've also added a crossingInsertionPoint()
          member function so that clients of the walker can know whether the walker is just crossing
          insertion points for a re-projected node.
        - EventDispatcher: EventDispatcher now uses the updated AncestorChainWalker and its
          crossingInsertionPoint() so that EventDispatcher can compute relative target for each ancestor correctly.

        I've also updated existing layout tests and added some layout tests for re-projection.
        Re-projection for multiple shadow root is not supported yet. I'll address that in another bug.

        Tests: fast/dom/shadow/composed-shadow-tree-walker.html
               fast/dom/shadow/shadow-dom-event-dispatching.html
               fast/dom/shadow/shadowdom-reprojection-1.html
               fast/dom/shadow/shadowdom-reprojection-2.html

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::resolveReprojection):
        (WebCore):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingOrBackToInsertionPoint):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        (WebCore::AncestorChainWalker::AncestorChainWalker):
        (WebCore::AncestorChainWalker::parent):
        * dom/ComposedShadowTreeWalker.h:
        (AncestorChainWalker):
        (WebCore::AncestorChainWalker::crossingInsertionPoint):
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::adjust):
        (WebCore::EventDispatcher::ensureEventAncestors):
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::focusedNode):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::attach):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):

2012-10-11  Shinya Kawanaka  <shinyak@chromium.org>

        Make ContentSelectorQuery work when siblings are passed explicitly.
        https://bugs.webkit.org/show_bug.cgi?id=96990

        Reviewed by Dimitri Glazkov.

        When we implement content reprojection in ShadowDOM, we have to pass a node pool to SelectorChecker.
        We introdue ShadowDOMSiblingTraversalStrategy, which traverses a node pool instead of real node siblings.

        Since ContentSelector is a very hot place, we don't want to regress performance. In the previous patch,
        we've make ContentSelector::checkOneSelector template to take SiblingTraversalStrategy as an argument.

        We also move DOMSiblingTraversalStrategy to SiblingTraversalStrategies.h.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SelectorChecker.cpp:
        (WebCore):
        * css/SelectorChecker.h:
        * css/SiblingTraversalStrategies.h: Added.
        (WebCore):
        (DOMSiblingTraversalStrategy): Moved from SelectorChecker.
        (WebCore::DOMSiblingTraversalStrategy::isFirstChild):
        (WebCore::DOMSiblingTraversalStrategy::isLastChild):
        (WebCore::DOMSiblingTraversalStrategy::isFirstOfType):
        (WebCore::DOMSiblingTraversalStrategy::isLastOfType):
        (WebCore::DOMSiblingTraversalStrategy::countElementsBefore):
        (WebCore::DOMSiblingTraversalStrategy::countElementsOfTypeBefore):
        (WebCore::DOMSiblingTraversalStrategy::countElementsAfter):
        (WebCore::DOMSiblingTraversalStrategy::countElementsOfTypeAfter):
        (WebCore::ShadowDOMSiblingTraversalStrategy::ShadowDOMSiblingTraversalStrategy):
        (ShadowDOMSiblingTraversalStrategy): SiblingTraversalStrategy which uses a node pool instead of a real element
        siblings. This strategy takes a vector of node which we traverse.
        (WebCore::ShadowDOMSiblingTraversalStrategy::isFirstChild):
        (WebCore::ShadowDOMSiblingTraversalStrategy::isLastChild):
        (WebCore::ShadowDOMSiblingTraversalStrategy::isFirstOfType):
        (WebCore::ShadowDOMSiblingTraversalStrategy::isLastOfType):
        (WebCore::ShadowDOMSiblingTraversalStrategy::countElementsBefore):
        (WebCore::ShadowDOMSiblingTraversalStrategy::countElementsAfter):
        (WebCore::ShadowDOMSiblingTraversalStrategy::countElementsOfTypeBefore):
        (WebCore::ShadowDOMSiblingTraversalStrategy::countElementsOfTypeAfter):
        * css/StyleResolver.cpp:
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distributeSelectionsTo):
        * html/shadow/ContentSelectorQuery.cpp: Uses ShadowDOMSiblingTraversalStrategy instead of DOMSiblingTraversalStrategy.
        (WebCore::ContentSelectorChecker::ContentSelectorChecker):
        (WebCore):
        (WebCore::ContentSelectorChecker::checkContentSelector):
        (WebCore::ContentSelectorDataList::initialize):
        (WebCore::ContentSelectorDataList::matches):
        (WebCore::ContentSelectorQuery::ContentSelectorQuery):
        (WebCore::ContentSelectorQuery::matches):
        * html/shadow/ContentSelectorQuery.h:
        (ContentSelectorChecker):
        (WebCore):
        (ContentSelectorDataList):
        (ContentSelectorQuery):

2012-10-11  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] GraphicsContextPlatformPrivate is leaking it's ShadowBlur
        https://bugs.webkit.org/show_bug.cgi?id=99073

        Reviewed by Noam Rosenthal.

        Stop leaking GraphicsContextPlatformPrivate::shadow.

        No change in behavior so no new tests.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        Always destroy shadow. It is obviously owned by the context so it has
        nothing to do with the erly return.

2012-10-11  Joshua Bell  <jsbell@chromium.org>

        WebIDL: overloaded methods prevent number -> string conversion
        https://bugs.webkit.org/show_bug.cgi?id=85326

        Reviewed by Kentaro Hara.

        Make the default behavior for overloaded methods matching DOMString arguments match the
        default behavior for non-overloaded methods, which more closely matches the WebIDL spec.
        Enable legacy behavior of only matching undefined/null/string/object(and not number,
        boolean, etc) via the StrictTypeChecking attribute.

        Tests: storage/indexeddb/cursor-overloads.html
               storage/indexeddb/legacy-constants.html
               ... and run-bindings-tests

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::stringToDirection): Handle "0"..."4" as stringified legacy constants.
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBDatabase.cpp: Remove redundant overloads.
        (WebCore::IDBDatabase::transaction): Remove redundant overloads.
        * Modules/indexeddb/IDBDatabase.h:
        (IDBDatabase):
        * Modules/indexeddb/IDBDatabase.idl: Remove redundant overloads.
        * Modules/indexeddb/IDBIndex.cpp: Remove redundant overloads.
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBIndex.h: Remove redundant overloads.
        (IDBIndex):
        * Modules/indexeddb/IDBIndex.idl: Remove redundant overloads.
        * Modules/indexeddb/IDBObjectStore.cpp: Remove redundant overloads.
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBObjectStore.h: Remove redundant overloads.
        (IDBObjectStore):
        * Modules/indexeddb/IDBObjectStore.idl: Remove redundant overloads.
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::stringToMode): Handle "0"..."4" as stringified legacy constants.
        * Modules/indexeddb/IDBTransaction.h:
        * bindings/scripts/CodeGeneratorJS.pm: Check for StrictTypeChecking attribute.
        (GenerateParametersCheckExpression):
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        (GenerateParametersCheckExpression):
        * bindings/scripts/test/JS/JSTestObj.cpp: Rebaselined.
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod11):
        (WebCore):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/TestObj.idl: Added [StrictTypeChecking] to DOMString overloads,
        plus a new DOMString overload w/o it.
        * bindings/scripts/test/V8/V8TestObj.cpp: Rebaselined.
        (WebCore::TestObjV8Internal::overloadedMethod11Callback):
        (TestObjV8Internal):
        (WebCore::TestObjV8Internal::overloadedMethodCallback):
        * html/canvas/CanvasRenderingContext2D.idl: Tag legacy overloads with [StrictTypeChecking].
        * xml/XMLHttpRequest.idl: Ditto.

2012-10-11  Justin Novosad  <junov@chromium.org>

        [Chromium][Mac] r130994 seems to break chromium gpu test
        https://bugs.webkit.org/show_bug.cgi?id=98995

        Reviewed by Stephen White.

        Removing unnecessary assertion that was based on an invalid assumption
        that 2d canvas draw operations were always called from within WebThread
        tasks.

        Test: Canvas2DAllowed chromium gpu_test

        * platform/graphics/chromium/Canvas2DLayerManager.cpp:
        (WebCore::Canvas2DLayerManager::willProcessTask):

2012-10-11  Kenichi Ishibashi <bashi@chromium.org>

        REGRESSION(130231): Causes 3 complex font test failures on EFL / Harfbuzz+Freetype
        https://bugs.webkit.org/show_bug.cgi?id=98247

        Reviewed by Kenneth Rohde Christiansen.

        Implement canRenderCombiningCharacterSequence() for the Freetype case.

        No new tests, covered by existing tests. Actually the lack of the implementation made
        fast/text/atsui-multiple-renderers.html,  fast/text/atsui-spacing-features.html and
        fast/text/wide-zero-width-space.html fail on EFL.

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

2012-10-11  Keishi Hattori  <keishi@webkit.org>

        F4 key should open the picker popup on Windows and Linux
        https://bugs.webkit.org/show_bug.cgi?id=98754

        Reviewed by Kent Tamura.

        On Windows, F4 key is used to open the combo box popup. We will introduce the same keybinding for picker popups.

        Added test to calendar-picker-key-operations.html, date-suggestion-picker-key-operations.html, time-suggestion-picker-key-operations.html.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent): Open picker on F4 key if it is enabled.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::shouldOpenPickerWithF4Key): Returns true if we want to enable the F4 key binding on this platform. Return false for default.
        (WebCore):
        * rendering/RenderTheme.h:
        (RenderTheme):
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::shouldOpenPickerWithF4Key): Returns true.
        (WebCore):
        * rendering/RenderThemeChromiumLinux.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore):
        (WebCore::RenderThemeChromiumWin::shouldOpenPickerWithF4Key): Returns true.
        * rendering/RenderThemeChromiumWin.h:
        (RenderThemeChromiumWin):

2012-10-11  John J. Barton  <johnjbarton@chromium.org>

        Web Inspector: Zebra stripe the console
        https://bugs.webkit.org/show_bug.cgi?id=98701

        Reviewed by Pavel Feldman.

        Add .console-message:hover rule to lightly highlight the message line.

        * inspector/front-end/inspector.css:
        (.console-message:hover):

2012-10-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Filter out embedder injected content scripts
        https://bugs.webkit.org/show_bug.cgi?id=99039

        Reviewed by Yury Semikhatsky.

        * inspector/front-end/NetworkUISourceCodeProvider.js:
        (WebInspector.NetworkUISourceCodeProvider.prototype._parsedScriptSource):

2012-10-11  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: revert 131004, 131012, 131016, 131042, 131043 for breaking inspector console
        https://bugs.webkit.org/show_bug.cgi?id=99042

        One can't type in the inspector console after 131004.

        * 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::attach):
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        * dom/Element.h:
        (WebCore):
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        * dom/Node.cpp:
        (WebCore::checkAcceptChild):
        * dom/Node.h:
        (Node):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::nextRenderer):
        * dom/PseudoElement.cpp: Removed.
        * dom/PseudoElement.h: Removed.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setInnerNode):
        (WebCore::HitTestResult::setInnerNonSharedNode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::updateBeforeAfterContent):
        (WebCore):
        (WebCore::RenderBlock::splitBlocks):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::createReplacementRunIn):
        (WebCore::RenderBlock::renderName):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::updateBeforeAfterContent):
        (WebCore):
        * rendering/RenderButton.h:
        (RenderButton):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::originalText):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::renderName):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::renderName):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::renderName):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::renderName):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::generatingNode):
        * rendering/RenderObjectChildList.cpp:
        (WebCore):
        (WebCore::findBeforeAfterParent):
        (WebCore::RenderObjectChildList::updateBeforeAfterStyle):
        (WebCore::createRendererForBeforeAfterContent):
        (WebCore::ensureBeforeAfterContainer):
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderObjectChildList.h:
        (RenderObjectChildList):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::updateBeforeAfterContent):
        (WebCore):
        * rendering/RenderRubyText.h:
        (RenderRubyText):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::renderName):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::updateBeforeAndAfterContent):
        (WebCore):
        (WebCore::RenderTableRow::styleDidChange):
        * rendering/RenderTableRow.h:
        (RenderTableRow):
        (WebCore::RenderTableRow::renderName):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::renderName):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2012-10-11  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        REGRESSION (r96393): In some cases, generated content is never shown
        https://bugs.webkit.org/show_bug.cgi?id=88196

        Reviewed by Antti Koivisto.

        Elements with style specified from an attribute selector in conjunction
        with a pseudo-element should not take on the shared style of their
        previous matching sibling (if any).

        The problem here is that an attribute selector appended by a pseudo-element
        does not return any matched rules for the call (matchesRuleSet(m_uncommonAttributeRuleSet.get()))
        in StyleResolver::locateSharedStyle().

        This is because of the way pseudo-elements are handled in
        SelectorChecker::checkSelector(). For a pseudo-element selector we check
        for the condition (!context.elementStyle && m_mode == ResolvingStyle) and
        since for this particular flow the SelectorChecker mode is set to ResolvingStyle
        and since the current element's style is still not available we fail this
        initial check and return SelectorFailsLocally from checkSelector(). This is
        incorrect behavior since the element does have an attribute selector specified
        for it.

        Have thus introduced another enum value: SharingRules for SelectorChecker's Mode.
        SelectorChecker's mode should be set to SharingRules before making the
        call to collectMatchingRules() and then reset (back to ResolvingStyle) thereafter.

        Existing Mode value: CollectingRules although appropriate cannot be used in this
        scenario because we also don't want to set any value to dynamicPseudo for this flow.

        Test: fast/selectors/style-sharing-attribute-selector-with-pseudo-element.html

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector):
        Added additional check for SelectorChecker's mode: SharingRules when
        trying to match for the pseudo-element selector.

        * css/SelectorChecker.h:
        Added SharingRules to Mode enum.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleSharingCandidateMatchesRuleSet):
        (WebCore::StyleResolver::locateSharedStyle):
        * css/StyleResolver.h:
        (StyleResolver):
        Renamed matchesRuleSet() to a more descriptive styleSharingCandidateMatchesRuleSet().
        Also, setting the SelectorChecker's mode to SharingRules before calling
        on collectMatchingRules() from styleSharingCandidateMatchesRuleSet().

2012-10-11  Shinya Kawanaka  <shinyak@chromium.org>

        Some shadow roots are not showing up in Inspector.
        https://bugs.webkit.org/show_bug.cgi?id=88251

        Reviewed by Pavel Feldman.

        When an element has only text node, its shadow root is not showing up in Inspector, since
        child text is shown in oneline. We had to prevent from inlining child text when a shadow root is
        added.

        Test: inspector/elements/shadow-root.html

        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMNode.prototype.hasShadowRoots):
        * inspector/front-end/ElementsTreeOutline.js:

2012-10-11  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] More responsive scroll animations
        https://bugs.webkit.org/show_bug.cgi?id=99016

        Reviewed by Jocelyn Turcotte.

        Changes the scrolling animations so they accelerate faster than they deccelerate,
        making the animation respond faster to user input.

        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimatorNone::parametersForScrollGranularity):
        * platform/ScrollAnimatorNone.h:
        (ScrollAnimatorNone):

2012-10-11  Alexander Shalamov  <alexander.shalamov@intel.com>

        [CSS3 Media Queries] Aspect ratio value re-parsed when media query expression is evaluated
        https://bugs.webkit.org/show_bug.cgi?id=99003

        Reviewed by Kenneth Rohde Christiansen.

        Use CSSAspectRatioValue instead of CSSValueList to store aspect ratio value
        in order to avoid re-parsing of aspect ratio data during media expression evaluation.

        test: fast/media/w3c/test_media_queries.html

        * css/MediaQueryEvaluator.cpp:
        (WebCore::compareAspectRatioValue):
        (WebCore):
        (WebCore::aspect_ratioMediaFeatureEval):
        (WebCore::device_aspect_ratioMediaFeatureEval):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):

2012-10-11  Zeno Albisser  <zeno@webkit.org>

        [Qt] Implement GraphicsSurfaceToken to replace uint64_t as token type.
        https://bugs.webkit.org/show_bug.cgi?id=98501

        Replace the token type for GraphicsSurface with a new class GraphicsSurfaceToken.
        This is necessary in order to implement GraphicsSurface for Windows.
        Depending on the platform a GraphicsSurfaceToken might contain a
        WindowID (Linux/GLX), two IOSurfaceIDs (Mac) or in the future two HANDLEs (Windows).
        The simple uint64_t is not sufficient anymore, since a single HANDLE in windows
        can be 64bit already.

        Reviewed by Noam Rosenthal.

        * Target.pri:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::graphicsSurfaceToken):
        * platform/graphics/surfaces/GraphicsSurface.cpp:
        (WebCore::GraphicsSurface::create):
        (WebCore::GraphicsSurface::exportToken):
        * platform/graphics/surfaces/GraphicsSurface.h:
        (GraphicsSurface):
        * platform/graphics/surfaces/GraphicsSurfaceToken.h: Added.
        (WebCore):
        (GraphicsSurfaceToken):
        (WebCore::GraphicsSurfaceToken::GraphicsSurfaceToken):
        (WebCore::GraphicsSurfaceToken::operator!=):
        (WebCore::GraphicsSurfaceToken::isValid):
        * platform/graphics/surfaces/mac/GraphicsSurfaceMac.cpp:
        (WebCore::GraphicsSurfacePrivate::GraphicsSurfacePrivate):
        (WebCore::GraphicsSurfacePrivate::token):
        (GraphicsSurfacePrivate):
        (WebCore::GraphicsSurface::platformExport):
        (WebCore::GraphicsSurface::platformImport):
        * platform/graphics/surfaces/qt/GraphicsSurfaceGLX.cpp:
        (WebCore::GraphicsSurface::platformExport):
        (WebCore::GraphicsSurface::platformImport):
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        (WebCore::TextureMapperSurfaceBackingStore::setGraphicsSurface):
        (WebCore::TextureMapperSurfaceBackingStore::setSurface):
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        (TextureMapperSurfaceBackingStore):
        (WebCore::TextureMapperSurfaceBackingStore::TextureMapperSurfaceBackingStore):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperPlatformLayer::graphicsSurfaceToken):

2012-10-11  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Elements] Breadcrumbs are not updated upon involved elements' className changes
        https://bugs.webkit.org/show_bug.cgi?id=98887

        Reviewed by Vsevolod Vlasov.

        Breadcrumbs should be updated upon the "class" and "id" attribute changes of elements participating in the breadcrumb path.

        Test: inspector/elements/breadcrumb-updates.html

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype._updateBreadcrumbIfNeeded):

2012-10-11  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        Final newline (LF or CRLF) in paste buffer is converted to space
        https://bugs.webkit.org/show_bug.cgi?id=80838

        Reviewed by Ryosuke Niwa.

        Currently newline characters are replaced with spaces when pasted
        to text input. This behavior was introduced in r37539, with the
        intention to follow the FireFox's behavior (see
        https://bugs.webkit.org/show_bug.cgi?id=20461). However, FireFox
        truncates newlines at the end of pasted text, instead of replacing
        them with spaces. So this patch changes TextFieldInputType to cut
        trailing newlines of inserted text.

        Test: fast/forms/paste-multiline-text-input.html

        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleBeforeTextInsertedEvent):
        Truncates trailing newlines.

2012-10-11  Kent Tamura  <tkent@chromium.org>

        Introduce Localizer::isRTL, and use it in DateTimeChooserImpl
        https://bugs.webkit.org/show_bug.cgi?id=98992

        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::isRTL): Need to initialize 'status'.

2012-10-11  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: The 'X' of the close button of Settings view is not centered
        https://bugs.webkit.org/show_bug.cgi?id=99008

        Reviewed by Alexander Pavlov.

        Fixed text positioning in CSS.

        * inspector/front-end/helpScreen.css:
        (.help-close-button):

2012-10-11  Kent Tamura  <tkent@chromium.org>

        Introduce Localizer::isRTL, and use it in DateTimeChooserImpl
        https://bugs.webkit.org/show_bug.cgi?id=98992

        Reviewed by Kentaro Hara.

        - Move the RTL detection code in
          WebKit/chromium/src/DateTimeChooserImpl.cpp to LocaleWin::isRTL()
        - Introduce Localizer::isRTL as a pure virtual function
        - Implement LocaleMac::isRTL with native API
        - Implement LocaleICU::isRTL with ICU API
        - Add dummy implementation: LocaleNone::isRTL

        Add some tests to WebKit/chromium/tests/.

        * platform/text/Localizer.h:
        (Localizer): Declare pure virtual isRTL.

        * platform/text/LocaleICU.h:
        (LocaleICU): Declare isRTL.
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::isRTL): Implemented with uloc_getCharacterOrientation.

        * platform/text/LocaleNone.cpp:
        (LocaleNone): Declare isRTL.
        (WebCore::LocaleNone::isRTL): Added.

        * platform/text/LocaleWin.h:
        (LocaleWin): Declare isRTL.
        * platform/text/LocaleWin.cpp:
        (WebCore::LocaleWin::isRTL): Implemented.

        * platform/text/mac/LocaleMac.h:
        (LocaleMac): Declare isRTL.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::isRTL): Implemented.

2012-10-11  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: TypeError in ConsoleMessage.js
        https://bugs.webkit.org/show_bug.cgi?id=98999

        Reviewed by Alexander Pavlov.

        This patch is based on patch by John J. Barton.
        Added a check that stack length is equal.

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype.isEqual):

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

        Disallow full screen mode keyboard access by default.
        https://bugs.webkit.org/show_bug.cgi?id=98971
        <rdar://problem/12474226>

        Reviewed by Sam Weinig.

        Fall back to requesting non-keyboard access if the client refuses to allow keyboard access.

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

2012-10-10  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI instrument HTMLCanvas element.
        https://bugs.webkit.org/show_bug.cgi?id=98917

        Reviewed by Yury Semikhatsky.

        It also includes non intrusive instrumentation for skia classes.

        Test: inspector/profiler/memory-instrumentation-canvas.html

        * WebCore.gypi:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reportMemoryUsage):
        (WebCore):
        * html/HTMLCanvasElement.h:
        (HTMLCanvasElement):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::reportMemoryUsage):
        (WebCore):
        * platform/graphics/ImageBuffer.h:
        (ImageBuffer):
        * platform/graphics/chromium/ImageBufferDataSkia.h:
        (ImageBufferData):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBufferData::reportMemoryUsage):
        (WebCore):
        * platform/graphics/skia/MemoryInstrumentationSkia.cpp: Copied from Source/WebCore/platform/graphics/chromium/ImageBufferDataSkia.h.
        (reportMemoryUsage):
        * platform/graphics/skia/MemoryInstrumentationSkia.h: Copied from Source/WebCore/platform/graphics/chromium/ImageBufferDataSkia.h.
        * platform/graphics/skia/NativeImageSkia.cpp:

2012-10-10  Mike West  <mkwst@google.com>

        Document calls createElement with the wrong parameters.
        https://bugs.webkit.org/show_bug.cgi?id=98907

        Reviewed by Kent Tamura.

        Document::importNode calls Document::createElement with a QualifiedName
        and ExceptionCode. The Document::createElement that takes a
        QualifiedName doesn't generate an exception; the second argument is a
        bool, which the ExceptionCode autocasts into.

        Changing the argument to an explicit bool shouldn't have any visible
        effect; no new tests are required.

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

2012-10-10  Lianghui Chen  <liachen@rim.com>

        [BlackBerry] Fix assertion in NetworkJob::notifyChallengeResult.
        https://bugs.webkit.org/show_bug.cgi?id=97397
        Internal PR: 186597.

        Internally reviewed by Yong Li, Joe Mason.
        Reviewed by George Staikos.

        Add a singleton AuthenticationChallengeManager to manage authentication
        challenge dialog. It does following things:
        Record page creation/deletion, so it knows what page is present or not.
        Record page visibility change so it knows when to display a dialog or not.
        Accept authentication challenge, and decide whether to postpone the
            challenge dialog based on whether there is active authentication challenge
            dialog already and whether its page is visible or not.
        When a challenge result comes back, notify the result to all clients
            authenticating for the same protection space, and then start the next
            authentication challenge from the same page, if there is one.
        When a page becomes visible, start the first authentication challenge
            dialog that has been blocked before.
        When an authentication challenge is requested, the NetworkJob will be
            deferred so its initial response will be saved while waiting for
            user decision on the challenge.

        No new tests for platform specific internal change.

        * PlatformBlackBerry.cmake:
        * platform/blackberry/AuthenticationChallengeManager.cpp: Added.
        (WebCore):
        (ChallengeInfo):
        (WebCore::ChallengeInfo::ChallengeInfo):
        (AuthenticationChallengeManagerPrivate):
        (WebCore::AuthenticationChallengeManagerPrivate::AuthenticationChallengeManagerPrivate):
        (WebCore::AuthenticationChallengeManagerPrivate::resumeAuthenticationChallenge):
        (WebCore::AuthenticationChallengeManagerPrivate::startAuthenticationChallenge):
        (WebCore::AuthenticationChallengeManagerPrivate::pageExists):
        (WebCore::AuthenticationChallengeManager::AuthenticationChallengeManager):
        (WebCore::AuthenticationChallengeManager::pageCreated):
        (WebCore::AuthenticationChallengeManager::pageDeleted):
        (WebCore::AuthenticationChallengeManager::pageVisibilityChanged):
        (WebCore::AuthenticationChallengeManager::authenticationChallenge):
        (WebCore::AuthenticationChallengeManager::cancelAuthenticationChallenge):
        (WebCore::AuthenticationChallengeManager::notifyChallengeResult):
        (WebCore::AuthenticationChallengeManager::instance):
        (WebCore::AuthenticationChallengeManager::init):
        * platform/blackberry/AuthenticationChallengeManager.h:
        (WebCore):
        (AuthenticationChallengeManager):
        * platform/blackberry/PageClientBlackBerry.h:
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::~MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::onAuthenticationNeeded):
        (WebCore::MediaPlayerPrivate::notifyChallengeResult):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        (MediaPlayerPrivate):
        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::NetworkJob):
        (WebCore::NetworkJob::~NetworkJob):
        (WebCore):
        (WebCore::NetworkJob::handleNotifyStatusReceived):
        (WebCore::NetworkJob::handleNotifyClose):
        (WebCore::NetworkJob::shouldReleaseClientResource):
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::notifyChallengeResult):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):

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

        compositing/tiling/crash-reparent-tiled-layer.html is flakey
        https://bugs.webkit.org/show_bug.cgi?id=82546

        Reviewed by Beth Dakin.

        When calling layerTreeAsText() inside the document load event,
        GraphicsLayerCA may have not flushed layers yet, so layer tree
        properties that are affected by flushing (tiled layer, visible
        rects) appeared flakey in tests.
        
        Fix by forcing a flush before dumping the layer tree.        
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText):

2012-10-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=98984
        REGRESSION: Crash happens after we add non-top-level frame to the 
        ScrollingStateTree

        Reviewed by Simon Fraser.

        isRootLayer() can return true for layers that do not correspond to 
        the main frame. But we only want the ones that DO correspond to the 
        main frame!
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

2012-10-10  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/12472460> text-combine doesn’t use third- and quarter-width variants when used with @font-face
        https://bugs.webkit.org/show_bug.cgi?id=98961

        Reviewed by Tim Horton.

        Test: fast/text/text-combine-with-font-face.html

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData): Added the width variant to the
        key used for entries in the font data table, so that we can return different
        font data for different width variants.
        * platform/graphics/FontWidthVariant.h: Defined FontWidthVariantWidth for
        use in the computation of the above key.
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::combineText): Added a local variable to store
        the font selector before changing the font description. Previously, by the time
        we tried to get the font selector from the font, it had already been cleared,
        so we called Font::update() with a 0 font selector, meaning @font-face fonts
        could not be selected.

2012-10-10  Elliott Sprehn  <esprehn@chromium.org>

        Move :before and :after into the DOM        
        https://bugs.webkit.org/show_bug.cgi?id=95117

        Reviewed by Eric Seidel.

        Reimplement generated content :before and :after as DOM Elements. Now ElementRareData has
        two RefPtrs to PseudoElements for the generated content and Node has methods for traversing
        the tree including generated content.

        This allows 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
        lifecycle of generated content.

        No new tests needed for now.

        * 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::attach): Add generated content if needed.
        (WebCore::Element::detach): Remove all child generated content.
        (WebCore::Element::recalcStyle): Add or remove generated content based on the new style.
        (WebCore::Element::updatePseudoElement): Updates pseudo content based on a pseudoId.
        (WebCore):
        (WebCore::Element::createPseudoElementIfNeeded):
        (WebCore::Element::beforePseudoElement):
        (WebCore::Element::afterPseudoElement):
        * dom/Element.h:
        (WebCore):
        (Element):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::setPseudoElement):
        (WebCore):
        (WebCore::ElementRareData::pseudoElement):
        * dom/Node.cpp:
        (WebCore::Node::pseudoAwarePreviousSibling):
        (WebCore):
        (WebCore::Node::pseudoAwareNextSibling):
        (WebCore::checkAcceptChild): Forbid moving PseudoElements for sanity. The code never does this.
        * dom/Node.h:
        (Node):
        (WebCore::Node::isPseudoElement):
        (WebCore::Node::pseudoId): Fast path that only calls virtualPseudoId if the node has custom callbacks so isPseudoElement is fast.
        (WebCore::Node::virtualPseudoId):
        (WebCore::Node::isBeforePseudoElement):
        (WebCore::Node::isAfterPseudoElement):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::nextRenderer): Changed to find the next sibling of pseudos for insertion.
        * dom/PseudoElement.cpp: Added.
        (WebCore):
        (WebCore::pseudoElementName):
        (WebCore::PseudoElement::PseudoElement):
        (WebCore::PseudoElement::pseudoRendererIsNeeded):
        (WebCore::PseudoElement::customStyleForRenderer):
        (WebCore::PseudoElement::attach):
        (WebCore::PseudoElement::rendererIsNeeded):
        (WebCore::PseudoElement::updateChildStyle): Propagates the style downward into the anonymous renderers for the content.
        (WebCore::PseudoElement::didRecalcStyle):
        (WebCore::PseudoElement::createRendererForContent): Refactored from RenderObjectChildList.
        * dom/PseudoElement.h: Added.
        (WebCore):
        (PseudoElement):
        (WebCore::PseudoElement::create):
        (WebCore::toPseudoElement):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::setInnerNode): Hit testing a PseudoElement should really hit the parent.
        (WebCore::HitTestResult::setInnerNonSharedNode): Same as above.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange): Remove old generated content code, same for below.
        (WebCore::RenderBlock::splitBlocks):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::createReplacementRunIn):
        (WebCore::RenderBlock::renderName):
        * rendering/RenderBlock.h:
        (RenderBlock):
        * rendering/RenderButton.cpp:
        * rendering/RenderButton.h:
        (RenderButton):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::originalText):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::renderName):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::renderName):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        (WebCore::RenderInline::addChildIgnoringContinuation):
        (WebCore::RenderInline::splitInlines):
        (WebCore::RenderInline::renderName):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::renderName):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isPseudoElement):
        (RenderObject):
        (WebCore::RenderObject::generatingNode):
        * rendering/RenderObjectChildList.cpp:
        * rendering/RenderObjectChildList.h:
        (RenderObjectChildList):
        * rendering/RenderRubyText.cpp:
        * rendering/RenderRubyText.h:
        (RenderRubyText):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::renderName):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleDidChange):
        * rendering/RenderTableRow.h:
        (WebCore::RenderTableRow::renderName):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::addChild):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::renderName):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):

2012-10-10  Sam Weinig  <sam@webkit.org>

        Add more Objective-C WebKit2 DOM API skeletons.
        https://bugs.webkit.org/show_bug.cgi?id=98981

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Add necessary export.

2012-10-10  Dimitri Glazkov  <dglazkov@chromium.org>

        Minimize the recent template explosion in SelectorChecker.
        https://bugs.webkit.org/show_bug.cgi?id=98829

        Reviewed by Antti Koivisto.

        We've recently added the capability to switch sibling traversal strategy to SelectorChecker, at some readability/clarity expense.
        This patch tries to minimize the surface of this expense to SelectorChecker::checkOneSelector. 

        No new tests, no change in behavior.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkSelector): Turned back into a function.
        (WebCore::SelectorChecker::checkOneSelector): Changed to specialize on traversal strategy, rather than the context, which was less clear.
        (WebCore::SelectorChecker::DOMTraversalStrategy::isFirstChild): Turned into a function.
        (WebCore::SelectorChecker::DOMTraversalStrategy::isLastChild): Ditto.
        (WebCore::SelectorChecker::DOMTraversalStrategy::isFirstOfType): Ditto.
        (WebCore::SelectorChecker::DOMTraversalStrategy::isLastOfType): Ditto.
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsBefore): Ditto.
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsOfTypeBefore): Ditto.
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsAfter): Ditto.
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsOfTypeAfter): Ditto.
        * css/SelectorChecker.h:
        (DOMTraversalStrategy): Changed into a class, rather than a template.
        (SelectorChecker): Turned back into a function.

2012-10-10  James Simonsen  <simonjam@chromium.org>

        High res times should start at 0
        https://bugs.webkit.org/show_bug.cgi?id=84912

        Reviewed by Tony Gentilcore.

        Test: Existing Navigation Timing tests.

        * inspector/InspectorInstrumentation.cpp: Use legacy document time, pending 98223.
        (WebCore):
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForTiming):
        * loader/DocumentLoadTiming.cpp:
        (WebCore::DocumentLoadTiming::convertMonotonicTimeToLegacyDocumentTime):
        (WebCore):
        (WebCore::DocumentLoadTiming::convertMonotonicTimeToZeroBasedDocumentTime):
        (WebCore::DocumentLoadTiming::markNavigationStart):
        * loader/DocumentLoadTiming.h:
        (DocumentLoadTiming):
        (WebCore::DocumentLoadTiming::navigationStart): These just report raw monotonic times now.
        (WebCore::DocumentLoadTiming::unloadEventStart):
        (WebCore::DocumentLoadTiming::unloadEventEnd):
        (WebCore::DocumentLoadTiming::redirectStart):
        (WebCore::DocumentLoadTiming::redirectEnd):
        (WebCore::DocumentLoadTiming::fetchStart):
        (WebCore::DocumentLoadTiming::responseEnd):
        (WebCore::DocumentLoadTiming::loadEventStart):
        (WebCore::DocumentLoadTiming::loadEventEnd):
        * page/PerformanceTiming.cpp:
        (WebCore::PerformanceTiming::navigationStart): Convert these back to legacy document times.
        (WebCore::PerformanceTiming::unloadEventStart):
        (WebCore::PerformanceTiming::unloadEventEnd):
        (WebCore::PerformanceTiming::redirectStart):
        (WebCore::PerformanceTiming::redirectEnd):
        (WebCore::PerformanceTiming::fetchStart):
        (WebCore::PerformanceTiming::responseEnd):
        (WebCore::PerformanceTiming::loadEventStart):
        (WebCore::PerformanceTiming::loadEventEnd):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute):
        (WebCore::PerformanceTiming::monotonicTimeToIntegerMilliseconds):
        * platform/network/ResourceLoadTiming.cpp:
        (WebCore::ResourceLoadTiming::convertResourceLoadTimeToMonotonicTime):
        * platform/network/ResourceLoadTiming.h:
        (ResourceLoadTiming):

2012-10-10  Levi Weintraub  <leviw@chromium.org>

        Tests failure on Chromium Mac after r130821
        https://bugs.webkit.org/show_bug.cgi?id=98865

        Reviewed by Adam Barth.

        Updating the check for USE(HARFBUZZ_NG) to check for Mac Chromium, as the HARFBUZZ_NG flag isn't
        actually set, despite us using Harfbuzz. This unbreaks Chromium Mac as we diagnose the root
        cause of this issue.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):

2012-10-10  Stephen Chenney  <schenney@chromium.org>

        SVGTextRunRenderingContext changes font data in the glyph page, but it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=98755

        Reviewed by Eric Seidel.

        The code in SVGTextRunRenderingContext::glyphDataForCharacter, when it
        encounters an <altglyph> tag, immediately replaces the font data for a
        glyph with font data for the primary font, presumably to meet the SVG
        spec requirement: "If the references to alternate glyphs do not result
        in successful identification of alternate glyphs to use, then the
        character(s) that are inside of the ‘altGlyph’ element are rendered as
        if the ‘altGlyph’ element were a ‘tspan’ element instead."

        If the alt glyph is not then found we are in the case from the spec
        and indeed we should use the primary font. However, we end up replacing the GlyphPage
        entry for the character with primary font data, which we should not do
        because the glyph page might be used in some place that does not have
        the alt glyph tag.

        Furthermore, this causes object lifetime problems for font data, because
        in cases where the font data that is replaced is for the system fallback
        font the GlyphPage will live forever with no knowldege that it contains
        font data pointers into font data other that the system fallback. The
        replaced font data may be deleted while the pointer lives on in the
        system fallback page.

        The fix is simply not to replace the font data in the page.

        Test: svg/text/alt-glpyh-on-fallback-font-crash.html

        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter): Keep track of the original font data and put it back
        in the glyph page when the method has finished.

2012-10-10  Tab Atkins  <jackalmage@gmail.com>

        column-count: 0 should not prevent margin-collapse through
        https://bugs.webkit.org/show_bug.cgi?id=65159

        Reviewed by Tony Chang.

        This patch makes "column-count:0" be properly recognized as invalid syntax,
        as it violates the property grammar in the spec.

        Tests: fast/multicol/zeroColumnCount.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:

2012-10-10  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Safari crashes on error when using CFNetwork
        https://bugs.webkit.org/show_bug.cgi?id=98965

        Reviewed by Sam Weinig.

        The code of ResourceErrorMac when using CFNetwork was assuming
        there is always either a CFError or an NSError associated with
        any ResourceError.

        This is not true on WebKit2 where error can be generic errors
        in the WebProcess (for example a cannotShowURLError).
        The code was crashing when trying to invoke function on the
        non-existing CFError.

        This patch fixes the issue by handling that third case separately.
        If the ResourceError is a generic error, a new NSError is created,
        similarily to what is done in the non-CFNetwork case.

        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::nsError):

2012-10-10  Alexander Shalamov  <alexander.shalamov@intel.com>

        Invalid values for media query features are not handled
        https://bugs.webkit.org/show_bug.cgi?id=97006

        Reviewed by Kenneth Rohde Christiansen.

        This patch improves pass rate of CSS3 Media Queries test suite
        by making media expressions compliant with W3C specification. Few
        performance issues are fixed by removal of string comparison during
        media expression evaluation.

        Tests: fast/media/w3c/test_media_queries.html

        * css/CSSGrammar.y: Handle media query expression with specified media restrictor as invalid.
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::serialize): Serialize invalid query according to specification.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::orientationMediaFeatureEval): Compare CSSValueID instead of strings.
        (WebCore::view_modeMediaFeatureEval): Compare CSSValueID instead of strings.
        (WebCore::pointerMediaFeatureEval): Compare CSSValueID instead of strings.
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp): Check that media features initialized with correct values.

2012-10-10  Justin Novosad  <junov@chromium.org>

        [Chromium] Smoother animation for non-RAF 2D canvas animations
        https://bugs.webkit.org/show_bug.cgi?id=97918

        Reviewed by Stephen White.

        Reduces animation jank by preventing the accumulation of multiple
        frames of backlog in the deferred canvas rendering queue. When the
        animation is more than one full frame ahead of the compositor, an
        immediate flush is triggered.  This takes into account overdraw
        elimination by the skip-on-clear optimization that is built-in to
        SkDeferredCanvas, to allow non-RAF animations that clear the canvas at
        each frame to run without any rate limiting. This change also
        incidentally improves frame rate in many cases by providing more
        granular batching of GPU API calls, resulting in better pipelining
        through the command buffer.

        Test: webkit_unit_test Canvas2DLayerManagerTest.testDeferredFrame

        * platform/graphics/chromium/Canvas2DLayerBridge.cpp:
        (WebCore::Canvas2DLayerBridge::Canvas2DLayerBridge):
        (WebCore::Canvas2DLayerBridge::limitPendingFrames):
        Called at the end of a task (usually a scheduled script action) that
        invoked 2d canvas rendering context methods. The end of the task
        marks the completion of a displayable frame. This method will trigger
        a flush if it detects that the layer has pending draw commands that
        are more that one frame old.
        (WebCore):
        (WebCore::Canvas2DLayerBridge::flushedDrawCommands):
        (WebCore::Canvas2DLayerBridge::didFlushPendingCommands):
        (WebCore::Canvas2DLayerBridge::skippedPendingDrawCommands):
        (WebCore::Canvas2DLayerBridge::flush):
        (WebCore::Canvas2DLayerBridge::contextAcquired):
        * platform/graphics/chromium/Canvas2DLayerBridge.h:
        (Canvas2DLayerBridge):
        * platform/graphics/chromium/Canvas2DLayerManager.cpp:
        (WebCore::Canvas2DLayerManager::~Canvas2DLayerManager):
        (WebCore::Canvas2DLayerManager::willProcessTask):
        (WebCore):
        (WebCore::Canvas2DLayerManager::didProcessTask):
        (WebCore::Canvas2DLayerManager::layerDidDraw):
        * platform/graphics/chromium/Canvas2DLayerManager.h:
        (Canvas2DLayerManager):

2012-10-10  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=98968
        REGRESSION: Unable to scroll with trackpad on some websites after 
        r130783

        Reviewed by Simon Fraser.

        This bug seems to reproduce mostly on web pages that require login. 
        The re-routing causes extra churn of the RenderLayerBacking, and we 
        end up destroying and re-creating the backing and therefore the 
        ScrollingStateNodes, and when the timing is just wrong we get into a 
        state where the ScrollingTree has a set of incorrect information. 
        This patch fixes the bug by making sure the ScrollingStateNodes keep 
        the ScrollingTree in synch with their re-set data.

        Tell the ScrollingStateTree that the root layer has changed.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):

        New virtual function will set every property as having changed.
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::setHasChangedProperties):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setHasChangedProperties):
        (WebCore):
        * page/scrolling/ScrollingStateScrollingNode.h:

        When the root layer changes, make sure we update the ScrollingTree 
        appropriately by indicating that every property could have changed.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::rootLayerDidChange):
        (WebCore):
        * page/scrolling/ScrollingStateTree.h:
        (ScrollingStateTree):

2012-10-10  MORITA Hajime  <morrita@google.com>

        [Chromium] Crash on SpellChecker::didCheck()
        https://bugs.webkit.org/show_bug.cgi?id=98476

        Reviewed by Kent Tamura.

        SpellChecker::didCheck() assumed m_processingRequest is non-NULL. However, SpellChecker::invokeRequest()
        calls SpellCheckRequest::didCancel(), which results didCheck() with NULL m_processingRequest.
        This chagne eliminates the problematic didCheck().

        No new tests. The case depends on specific timing and is hard to hit by automated testing.

        * editing/SpellChecker.cpp:
        (WebCore::SpellChecker::didCheck):

2012-10-10  MORITA Hajime  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=95664
        [Shadow DOM] should be able to be available without <style scoped>

        Reviewed by Dimitri Glazkov.

        This change relaxes ENABLE(STYLE_SCOPED) compilation guard
        and styleScopedEnabled() runtime guard. The flags now masks
        user visible bits of the code, rather than all of it.
        This change also eliminates some redundant guards for simplicity.

        Test: fast/dom/shadow/style-scoped-not-enabled.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        * css/StyleScopeResolver.cpp:
        (WebCore::StyleScopeResolver::scopeFor):
        * css/StyleScopeResolver.h:
        (WebCore):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::parseAttribute):
        (WebCore::HTMLStyleElement::scopedAttributeChanged):
        (WebCore::HTMLStyleElement::isRegisteredAsScoped):
        (WebCore::HTMLStyleElement::registerWithScopingNode):
        (WebCore::HTMLStyleElement::unregisterWithScopingNode):
        (WebCore::HTMLStyleElement::insertedInto):
        (WebCore::HTMLStyleElement::removedFrom):
        (WebCore::HTMLStyleElement::scoped):
        (WebCore::HTMLStyleElement::scopingElement):
        * html/HTMLStyleElement.h:
        (HTMLStyleElement):
        * testing/InternalSettings.cpp: Exporsing a flag for testing.
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        (WebCore::InternalSettings::setStyleScopedEnabled):
        (WebCore):
        * testing/InternalSettings.h: Exporsing a flag for testing.
        (Backup):
        (InternalSettings):
        * testing/InternalSettings.idl: Exporsing a flag for testing.

2012-10-10  Roger Fong  <roger_fong@apple.com>

        [WebGL] [On Mac] queried attributes and uniforms need to return the original variable name, not the mapped name.
        https://bugs.webkit.org/show_bug.cgi?id=98470

        Reviewed by Timothy Horton.

        When a variable name is too long we translate to a shorter version and keep a mapping between the long and short names.
        However, when querying for a variable client side using getActiveAttrib or getActiveUniform, we accidentally return the 
        translated names. This fix makes these methods return the original variable names.

        Tested using Khronos WebGL conformance suite:
        conformance/glsl/misc/glsl-long-variable-names.html

        * platform/graphics/GraphicsContext3D.h:
        (GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp: getActiveAttrib and getActiveUniform
        now use GraphicsContext3D::originalSymbolName to find the original variable name.
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore):
        (WebCore::GraphicsContext3D::originalSymbolName): This method returns the original variable name given 
        the mapped name.

2012-10-10 Brady Eidson  <beidson@apple.com>

        Switch over CachedResource::data() from taking a SharedBuffer to taking a ResourceBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=98952

        Reviewed by Anders Carlsson.

        No new tests (No behavior change).

        * html/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::appendBytes):
        (WebCore::ImageDocumentParser::finish):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::sendDataToResource):
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):
        * loader/cache/CachedCSSStyleSheet.h:
        (WebCore):
        (CachedCSSStyleSheet):
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::data):
        * loader/cache/CachedFont.h:
        (WebCore):
        (CachedFont):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::data):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::data):
        * loader/cache/CachedRawResource.h:
        (CachedRawResource):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::data):
        * loader/cache/CachedResource.h:
        (CachedResource):
        * loader/cache/CachedSVGDocument.cpp:
        (WebCore::CachedSVGDocument::data):
        * loader/cache/CachedSVGDocument.h:
        (CachedSVGDocument):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::data):
        * loader/cache/CachedScript.h:
        (CachedScript):
        * loader/cache/CachedShader.cpp:
        (WebCore::CachedShader::data):
        * loader/cache/CachedShader.h:
        (CachedShader):
        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::data):
        * loader/cache/CachedTextTrack.h:
        (CachedTextTrack):
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):
        * loader/cache/CachedXSLStyleSheet.h:
        (CachedXSLStyleSheet):

2012-10-10  Jon Lee  <jonlee@apple.com>

        [WK2] Activate plugins when user clicks on snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98328
        <rdar://problem/12426681>

        Reviewed by Brady Eidson.

        Extend the default event handler to deal with plugins with snapshots.
        When the user clicks on the placeholder, the plugin is recreated and displayed.

        * loader/FrameLoaderClient.h: Add new client function recreatePlugin(), which is
        expected to re-create the plugin with the same parameters as when it was run to
        obtain the plugin's snapshot placeholder.

        * loader/EmptyClients.cpp: Stub implementation of recreatePlugin().
        * loader/EmptyClients.h:
        * WebCore.exp.in: Expose HTMLPlugInElement::pluginWidget().

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler): Update to look for
        RenderSnapshottedPlugIn. If the plugin is not playing, have the renderer handle the
        event.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugin::getCursor): Set to hand cursor when the plugin is not
        playing.
        (WebCore::RenderSnapshottedPlugIn::handleEvent): If the user clicked on the plugin using the
        left button, update the state of the element to playing. Recreate the plugin if the widget exists
        to begin with. The cached snapshot image will be saved for possible reuse on back/forward navigation.
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn):

2012-10-10  Kenichi Ishibashi  <bashi@chromium.org>

        FontVerticalDataCache should allow zero as a key value
        https://bugs.webkit.org/show_bug.cgi?id=98877

        Reviewed by Tony Chang.

        Use WTF::UnsignedWithZeroKeyHashTraits for type definition of
        FontVerticalDataCache.

        No new tests because there is no certain way to make
        FontPlatformDataHarfBuzz::uniqueID() be zero.

        * platform/graphics/FontCache.cpp:
        (WebCore):
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp:
        (WebCore::FontPlatformData::verticalData): Removed zero check of uniqueID().
        (WebCore::FontPlatformData::openTypeTable): Ditto.

2012-10-10  Regina Chung  <heejin.r.chung@samsung.com>

        [EFL] Use the shareable GraphicsContext3DOpenGL* implementation.
        https://bugs.webkit.org/show_bug.cgi?id=96627

        Reviewed by Kenneth Rohde Christiansen.

        Changed EFL implementation of GraphicsContext3D(GC3D) to use GraphicsContext3DOpenGL*.
        It was initially implemented in a different way, due to characteristics of Evas,
        but it would be better to use the common implementation and find another way
        to deal with Evas, especially because all the duplicated code.

        No new tests. No functional changes.

        * PlatformEfl.cmake: Removed cairo implementation of GC3D and added efl files to WebCore_SOURCES.
        * platform/graphics/efl/GraphicsContext3DEfl.cpp: Modified code so GC3DOpenGL* can be used.
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::platformLayer):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::setContextLostCallback):
        (WebCore::GraphicsContext3D::setErrorMessageCallback):
        (WebCore::GraphicsContext3D::paintToCanvas):
        (WebCore):
        (WebCore::GraphicsContext3D::createGraphicsSurfaces):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp: Removed functions implemented in GC3DOpenGL*
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        (WebCore):
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::createSurface):
        (WebCore::GraphicsContext3DPrivate::platformGraphicsContext3D):
        (WebCore::GraphicsContext3DPrivate::makeContextCurrent):
        (WebCore::GraphicsContext3DPrivate::isGLES2Compliant):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/efl/GraphicsContext3DPrivate.h: Removed functions implemented in GC3DOpenGL*
        (GraphicsContext3DPrivate):

2012-10-10  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r130937, r130949, r130955, and
        r130957.
        http://trac.webkit.org/changeset/130937
        http://trac.webkit.org/changeset/130949
        http://trac.webkit.org/changeset/130955
        http://trac.webkit.org/changeset/130957
        https://bugs.webkit.org/show_bug.cgi?id=94290

        Breaks Qt build

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/action_preprocessgrammar.py: Removed.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGrammar.y: Renamed from Source/WebCore/css/CSSGrammar.y.in.
        * css/CSSGrammar.y.includes: Removed.
        * css/makegrammar.pl:

2012-10-10  Rob Buis  <rbuis@rim.com>

        [BlackBerry] Adapt to new image for search-cancel
        https://bugs.webkit.org/show_bug.cgi?id=98954

        Reviewed by Antonio Gomes.

        The new image for search-cancel is bigger than the old one, so invert the scaling.

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

2012-10-10  Tony Chang  <tony@chromium.org>

        Unreviewed, another speculative fix for Qt Win.

        * DerivedSources.pri: Pass --preprocessor to the perl script.
        * css/makegrammar.pl: Use --preprocessor instead of /usr/bin/gcc.

2012-10-10  Tony Chang  <tony@chromium.org>

        Unreviewed, another speculative fix for Qt Win.

        * DerivedSources.pri: Make the path slash marks be forward slashes to the .in file.

2012-10-10  David Barton  <dbarton@mathscribe.com>

        Turn on ENABLE_MATHML for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=96960

        Reviewed by Adam Barth.

        Add the rendering/mathml directory to search.

        * WebCore.gyp/WebCore.gyp:

2012-10-10  Tony Chang  <tony@chromium.org>

        Unreviewed, speculative build fix for Qt Win.

        * css/makegrammar.pl: Rather than making a temp file, use a pipe to
        pass data from gcc to the final output file.

2012-10-10  Brady Eidson  <beidson@apple.com>

        Switch CachedResource over from SharedBuffer to a new ResourceBuffer
        https://bugs.webkit.org/show_bug.cgi?id=98541

        Reviewed by Anders Carlsson.

        As part of preparation for a WebKit2 NetworkProcess, we need to change the data handle shared
        between CachedResources and ResourceLoaders to be one that can be backed by something other
        than a SharedBuffer.

        ResourceBuffer is this new object. Right now it is directly backed by a SharedBuffer and there
        should be no change in behavior.

        No new tests (No behavior change).

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcproj/WebCore.vcproj:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:

        Implementation of the new ResourceBuffer, backed directly by a SharedBuffer:
        * loader/ResourceBuffer.cpp: Added.
        (WebCore):
        (WebCore::ResourceBuffer::ResourceBuffer):
        (WebCore::ResourceBuffer::~ResourceBuffer):
        (WebCore::ResourceBuffer::data):
        (WebCore::ResourceBuffer::size):
        (WebCore::ResourceBuffer::isEmpty):
        (WebCore::ResourceBuffer::getSomeData):
        (WebCore::ResourceBuffer::sharedBuffer):
        (WebCore::ResourceBuffer::copy):
        (WebCore::ResourceBuffer::hasPurgeableBuffer):
        (WebCore::ResourceBuffer::releasePurgeableBuffer):
        (WebCore::ResourceBuffer::createCFData):

        * loader/ResourceBuffer.h: Added.
        (WebCore):
        (ResourceBuffer):
        (WebCore::ResourceBuffer::create):
        (WebCore::ResourceBuffer::adoptSharedBuffer):
        * loader/mac/ResourceBuffer.mm: Added.

        (WebCore):
        (WebCore::ResourceBuffer::createNSData):

        Switch CachedResource over to using it:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::makePurgeable):

        * loader/cache/CachedResource.h:
        (WebCore):
        (WebCore::CachedResource::resourceBuffer):
        (CachedResource):

        Switch all the other CachedResource subclasses over to using it:
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::data):

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

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didAddClient):
        (WebCore::CachedImage::data):

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::data):

        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::data):

        * loader/cache/CachedShader.cpp:
        (WebCore::CachedShader::data):

        * loader/cache/CachedTextTrack.cpp:
        (WebCore::CachedTextTrack::data):
        
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::data):

        Switch other affect parties over to using it:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::decodeBuffer):
        (WebCore::InspectorPageAgent::cachedResourceContent):
        (WebCore::InspectorPageAgent::sharedBufferContent):

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::subresource):

        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::processNewCueData):
        (WebCore::TextTrackLoader::didReceiveData):

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):

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

        * platform/mac/PasteboardMac.mm:
        (WebCore::fileWrapperForImage):

2012-10-10  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed build fix after r130940.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        Avoid redefining the same variable twice.

2012-10-10  Alexis Menard  <alexis@webkit.org>

        [Mac] Deprecate getPropertyShorthand from objective c bindings for future removal
        https://bugs.webkit.org/show_bug.cgi?id=98916

        Reviewed by Timothy Hatcher.

        Mark getPropertyShorthand as deprecated so we can remove it later. It will allow us
        to remove getPropertyShorthand from the web exposed API (this function is not part of
        any specification, it was there for historical reason).

        No new tests : just mark a function as deprecated.

        * bindings/objc/PublicDOMInterfaces.h:

2012-10-10  Mike West  <mkwst@chromium.org>

        Web Inspector: add support for %c (style) in console API
        https://bugs.webkit.org/show_bug.cgi?id=69401

        Reviewed by Pavel Feldman.

        This patch mimics Firebug's '%c' option when calling 'console.log'
        messages. 'console.log("%cBlue!", "color: blue;");' will write blue
        text to the console, and so on.

        To match Firebug's behavior, multiple '%c' entries will overwrite each
        other: only one style will be applied. Sorry, folks.

        Test: inspector/console/console-format-style.html

        * inspector/front-end/ConsoleMessage.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString.styleFormatter):
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString.append):
        (WebInspector.ConsoleMessageImpl.prototype._formatWithSubstitutionString):

2012-10-10  Varun Jain  <varunjain@chromium.org>

        [chromium] Spelling and grammar markers are pixelated in hidpi.
        https://bugs.webkit.org/show_bug.cgi?id=98339

        Reviewed by Stephen White.

        We create separate bitmaps for markers in normal and hidpi mode as per
        specification from UX and choose the right bitmap based on the current
        device scale factor.

        Tests: editing/spelling/grammar-markers-hidpi.html
               editing/spelling/inline-spelling-markers-hidpi.html

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::draw2xMarker):
        (WebCore):
        (WebCore::draw1xMarker):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::deviceScaleFactor):
        (WebCore::PlatformContextSkia::setDeviceScaleFactor):
        (PlatformContextSkia):

2012-10-10  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:
        * WebCore.gyp/scripts/action_preprocessgrammar.py: Added.
            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-10  Luciano Wolf  <luciano.wolf@openbossa.org>

        EventHandler::handleGestureLongPress breaks compilation if CONTEXT_MENUS isn't set
        https://bugs.webkit.org/show_bug.cgi?id=98890

        Reviewed by Caio Marcelo de Oliveira Filho.

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

2012-10-10  David Grogan  <dgrogan@chromium.org>

        Inspector: display IndexedDB integer versions
        https://bugs.webkit.org/show_bug.cgi?id=95816

        Reviewed by Vsevolod Vlasov.

        Added basic test to database-structure.html

        * inspector/Inspector.json:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        * inspector/front-end/IndexedDBModel.js:
        (WebInspector.IndexedDBModel.prototype._loadDatabase.callback):
        (WebInspector.IndexedDBModel.prototype._loadDatabase):
        (WebInspector.IndexedDBModel.Database):
        * inspector/front-end/IndexedDBViews.js:
        (WebInspector.IDBDatabaseView):
        (WebInspector.IDBDatabaseView.prototype._refreshDatabase):

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

        Store a visible rect in GraphicsLayers, and optionally dump it in layerTreeAsText
        https://bugs.webkit.org/show_bug.cgi?id=98839

        Reviewed by Sam Weinig.

        To replace CATiledLayer with TileCaches, we need to be able to compute the visible part of a GraphicsLayer,
        in order to limit the extent of TileCache tiles. Reuse the existing code in GraphicsLayerCA for this,
        but store the computed rect in m_visibleRect.
        
        Add a flag to layerTreeAsText() so that tests can optionally include this visible rect in
        layer tree dumps. This output will be platform-specific, so we don't want to do it unconditionally.

        * WebCore.exp.in: Signature of Frame::layerTreeAsText() changed.
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText): Change to take some enum flags rather than just a bool.
        * page/Frame.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::writeIndent): Make into a static class method so subclasses can use it.
        (WebCore::GraphicsLayer::dumpProperties): Call a virtual dumpAdditionalProperties() for subclasses.
        (showGraphicsLayerTree):
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer): New LayerTreeAsTextIncludeVisibleRects flag.
        (WebCore::GraphicsLayer::dumpAdditionalProperties): New virtual method.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): clipRectForChildren and clipRectForSelf
        were previously unused and buggy. Fix to correctly compute clipRectForSelf, to assign
        to m_visibleRect.
        (WebCore::GraphicsLayerCA::dumpAdditionalProperties): Dump m_visibleRect.
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText): Convert the flags from Frame flags
        to GraphicsLayerFlags and pass them along.
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):
        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText): Overloaded method to handle the optional IDL arguments.
        * testing/Internals.h: Add enum.
        * testing/Internals.idl: Add optional flags, and a const short to describe the flags.

2012-10-10  Shinya Kawanaka  <shinyak@chromium.org>

        Needs internal API to return distributed nodes for InsertionPoint
        https://bugs.webkit.org/show_bug.cgi?id=98868

        Reviewed by Hajime Morita.

        When testing insertion points, we would like to have an internal API which returns a node list
        distributed to an insertion point.

        We've added the API in Internals.

        Test: fast/dom/shadow/distributed-nodes.html

        * WebCore.exp.in:
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::distributedNodes): Returns the distributed nodes. When InsertionPoint is not
        attached, the result will be null, since the distribution is not calculated correctly.
        (WebCore):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        * testing/Internals.cpp:
        (WebCore::Internals::distributedNodes):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-10-10  Wei James  <james.wei@intel.com>

        [Chromium]Android x86 content shell debug build warning for uninitialized value used as error with gcc 4.6
        https://bugs.webkit.org/show_bug.cgi?id=98629

        Reviewed by Adam Barth.

        Warning was taken as error for uninitialized value being used when
        building content shell for Android x86 with gcc 4.6.

        * WebCore.gyp/WebCore.gyp:

2012-10-10  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Create a separate list for the invalid regions
        https://bugs.webkit.org/show_bug.cgi?id=98752

        Reviewed by Andreas Kling.

        This patch moves the invalid regions in a low traffic data structure, outside the main region list. This should add a small performance boost (there's no test for it) and simplifies the code in the following ways:
        - iterations through the region list don't need to worry about invalid regions
        - accessing the first/last region is straightforward
        - list manipulations are easier to implement (e.g. binary search for a region)

        Tests: Adapted fast/regions/flows-dependency-same-flow.html to use the new dump format for the region chain.

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::getRegionsByContent): Now returns only the valid regions.
        (WebCore::WebKitNamedFlow::getRegions): Now returns only the valid regions.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::regionAtBlockOffset):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegions):
        (WebCore::RenderFlowThread::firstRegion):
        (WebCore::RenderFlowThread::lastRegion):
        (WebCore::RenderFlowThread::computeOverflowStateForRegions):
        (WebCore::RenderFlowThread::regionInRange):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        (WebCore::RenderFlowThread::autoLogicalHeightRegionsCount):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore):
        (WebCore::addRegionToList):
        (WebCore::RenderNamedFlowThread::addRegionToThread):
        (WebCore::RenderNamedFlowThread::removeRegionFromThread):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        * rendering/RenderNamedFlowThread.h:
        (WebCore::RenderNamedFlowThread::invalidRenderRegionList):
        (RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::canBeDestroyed):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):
        (WebCore):
        (WebCore::writeRenderNamedFlowThreads): The valid regions are listed first followed by the invalid regions.

2012-10-10  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: [Regression] Stale revisions are not cleared when inspector is opened for the already loaded page.
        https://bugs.webkit.org/show_bug.cgi?id=98915

        Reviewed by Alexander Pavlov.

        WorkspaceController now clears stale revisions on navigation as well.

        * inspector/front-end/Workspace.js:
        (WebInspector.WorkspaceController):
        (WebInspector.WorkspaceController.prototype._mainFrameNavigated):

2012-10-10  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Exception when committing java script editing with revision history view open.
        https://bugs.webkit.org/show_bug.cgi?id=98908

        Reviewed by Alexander Pavlov.

        Added null check.

        * inspector/front-end/RevisionHistoryView.js:

2012-10-10  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: protect node in the InspectorDOMNode::inspect
        https://bugs.webkit.org/show_bug.cgi?id=98914

        Reviewed by Yury Semikhatsky.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::inspect):

2012-10-10  Mike West  <mkwst@google.com>

        EditorCommand calls setProperty with the wrong parameters.
        https://bugs.webkit.org/show_bug.cgi?id=98896

        Reviewed by Jochen Eisinger.

        EditorCommand::executeToggleStyleInList calls
        StylePropertySet::setProperty with an ExceptionCode as the final
        argument. This only succeeds because it's automagically cast to a bool,
        which is what the method actually expects.

        Implicitly passing in 'false' by dropping the parameter shouldn't change
        any visible functionality; no new tests are required.

        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList):

2012-10-10  Mike West  <mkwst@google.com>

        HTMLTextFormControlElement calls setInlineStyleProperty with the wrong parameters.
        https://bugs.webkit.org/show_bug.cgi?id=98892

        Reviewed by Jochen Eisinger.

        HTMLTextFormControlElement::updatePlaceholderVisibility calls
        HTMLElement::setInlineStyleProperty with an ExceptionCode as the last
        parameter. This only succeeds because it's automagically cast to a bool,
        which is what the method actually expects.

        Implicitly passing in 'false' by dropping the parameter shouldn't change
        any functionality; so no new tests are required.

        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::updatePlaceholderVisibility):

2012-10-10  Christophe Dumez  <christophe.dumez@intel.com>

        SQLResultSet.rowsAffected not cleared
        https://bugs.webkit.org/show_bug.cgi?id=46070

        Reviewed by Kenneth Rohde Christiansen.

        SQLResultSet.rowsAffected is supposed to return the number
        of rows that were changed by the statement. For "SELECT"
        statements, it should return 0.

        However, our implementation currently relies on sqlite3_changes()
        to compute this value. sqlite3_changes() returns the number of
        direct row changes in the most recent INSERT, UPDATE, or DELETE
        statement within the same trigger context. Unfortunately, the
        most recent INSERT, UPDATE, or DELETE statement may not be the
        last statement. As a consequence, if you INSERT 1 row, then
        do a SELECT, SQLResultSet.rowsAffected will be 1 for both the
        INSERT and the SELECT statements.

        The proposed solution is to use sqlite3_total_changes() instead
        of sqlite3_changes(). sqlite3_total_changes() returns the number
        of row changes caused by INSERT, UPDATE or DELETE statements since
        the database connection was opened. We now store the value
        returned by sqlite3_total_changes() before each statement in
        order to return the count difference in
        SQLiteDatabase::lastChanges().

        Test: storage/websql/execute-sql-rowsAffected.html

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::updateLastChangesCount):
        (WebCore):
        (WebCore::SQLiteDatabase::lastChanges):
        * platform/sql/SQLiteDatabase.h:
        (SQLiteDatabase):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step):

2012-10-10  Keishi Hattori  <keishi@webkit.org>

        REGRESSION (r129738): Calendar picker is too wide when the input is rtl
        https://bugs.webkit.org/show_bug.cgi?id=98881

        Reviewed by Kent Tamura.

        Calendar picker should use param.isCalendarRTL instead of param.isRTL but some were left.

        No new tests. Covered by ManualTests/forms/calendar-picker.html.

        * Resources/pagepopups/calendarPicker.js:
        (CalendarPicker.prototype.fixWindowSize): Calendar picker should use param.isCalendarRTL instead of param.isRTL.
        (DaysTable.prototype._handleKey): Ditto.

2012-10-10  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: Semantically incorrect CSS rules result in broken source code data
        https://bugs.webkit.org/show_bug.cgi?id=98520

        Reviewed by Vsevolod Vlasov.

        Pop and throw away rule data from the stack when data have been collected for a semantically invalid CSS rule
        (which is not going to be created).

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createImportRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::createPageRule):
        (WebCore::CSSParser::createRegionRule):

2012-10-10  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] GL_ARB_texture_rectangle must be activated when using ANGLE.
        https://bugs.webkit.org/show_bug.cgi?id=98387

        Check for the availability of GL_ARB_texture_rectangle extension.
        In case it is available, we activate the extension for ANGLE.
        This is necessary for WebGL on mac, because the GraphicsSurface
        on this platform is based on an IOSurface, which requires this extension.

        Reviewed by Noam Rosenthal.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DPrivate::initializeANGLE):

2012-10-10  Andreas Kling  <kling@webkit.org>

        ElementAttributeData: tighten member packing on 64-bit.
        <http://webkit.org/b/98861>

        Reviewed by Anders Carlsson.

        Pack m_isMutable and m_arraySize into the slack from the RefCounted base on 64-bit.
        218kB progression on Membuster3.

        * dom/ElementAttributeData.h:
        (ElementAttributeData):

2012-10-10  Alexandre Elias  <aelias@chromium.org>

        Text Autosizing: Counteract funky window sizing on Android.
        https://bugs.webkit.org/show_bug.cgi?id=98809

        Reviewed by Adam Barth.

        In Chrome for Android, the window sizes provided to WebCore are
        currently in physical screen pixels instead of
        device-scale-adjusted units. For example window width on a
        Galaxy Nexus is 720 instead of 360.  Text autosizing expects
        device-independent pixels.  When Chrome for Android cuts over to
        the new coordinate space, it will be tied to the setting
        applyPageScaleFactorInCompositor.

        No new tests.

        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):

2012-10-09  Philip Rogers  <pdr@google.com>

        Recursively detach SVGElementInstances
        https://bugs.webkit.org/show_bug.cgi?id=98851

        Reviewed by Ryosuke Niwa and Abhishek Arya

        Before this patch, SVGElementInstance child nodes were not being detached. This
        patch makes detach() recursively detach SVGElementInstances.

        * svg/SVGElementInstance.cpp:
        (WebCore::SVGElementInstance::detach):

2012-10-09  Kenichi Ishibashi  <bashi@chromium.org>

        [Chromium] Fix harfbuzz-ng related code after r130231
        https://bugs.webkit.org/show_bug.cgi?id=98858

        Reviewed by Kent Tamura.

        Replace first/second with key/value.

        No new tests. No changes in behavior.

        * platform/graphics/harfbuzz/ng/HarfBuzzNGFaceSkia.cpp:
        (WebCore::harfbuzzGetGlyph):
        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):

2012-10-09  Enrica Casucci  <enrica@apple.com>

        Only measure text once instead of twice when performing line layout.
        https://bugs.webkit.org/show_bug.cgi?id=98317
        <rdar://problem/12080821>

        Reviewed by Dan Bernstein.

        Since we are measuring each word to find out where the line break should occur,
        we should cache that information to avoid measuring the run again when
        creating the line box. The bulk of the change is in nextLineBreak, where
        the measurements are collected and placed in a vector so that they can
        be consumed in setLogicalWidthForTextRun where we used to measure the
        text one more time.
        Each entry in the vector is a WordMeasurement object that contains information
        about the start and end offset in the run, the renderer, the measured width
        and, possibly, a list of fallback fonts.
        When we need to compute the width of the run to create the line box, we add
        all the measurements for the given renderer in the run to get the total width.
        This optiomization is currently disabled for platforms using HarfBuzz.

        * platform/graphics/Font.cpp:
        (WebCore::Font::width): Added fallback fonts parameter.
        * platform/graphics/Font.h:
        (Font): Added fallback fonts parameter to the width static member function.
        This method is called when we compute the width using TextLayout.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::TextLayout::width): Added fallback fonts parameter.
        (WebCore::Font::width):
        (WebCore::ComplexTextController::advance):
        * platform/graphics/mac/ComplexTextController.h:
        (ComplexTextController): Added fallback fonts parameter to advance method.
        * rendering/RenderBlock.h: Added WordMeasures parameter to few methods.
        * rendering/RenderBlockLineLayout.cpp:
        (WordMeasurement): Added new class to hold measurement information.
        (WebCore::setLogicalWidthForTextRun): This is where we compute the run width using the
        cached information.
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Added wordMeasures parameter.
        (WebCore::RenderBlock::createLineBoxesFromBidiRuns): Added wordMeasures parameter.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Added declaration of the WordMeasures
        vector and its use.
        (WebCore::textWidth): Added fallbackFonts parameter, since now we only measure once.
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): This method has been modified to collect
        the measurements of the individual words and add them to the vector.

2012-10-09  Andreas Kling  <kling@webkit.org>

        GlyphPageTreeNode should use HashMap<OwnPtr>.
        <http://webkit.org/b/98845>

        Reviewed by Dan Bernstein.

        - Replace manual memory management by OwnPtrs.
        - Added a GlyphPageTreeNodeMap typedef to make call sites look a bit nicer.
        = Changed some hashmap get()/remove() pairs to use the more efficient take() instead.
        - Made the constructor private, it has no external clients.

        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::getRoot):
        (WebCore::GlyphPageTreeNode::pageCount):
        (WebCore::GlyphPageTreeNode::getChild):
        (WebCore::GlyphPageTreeNode::pruneCustomFontData):
        (WebCore::GlyphPageTreeNode::pruneFontData):
        (WebCore::GlyphPageTreeNode::showSubtree):
        * platform/graphics/GlyphPageTreeNode.h:
        (GlyphPageTreeNode):
        (WebCore::GlyphPageTreeNode::GlyphPageTreeNode):

2012-10-09  Kent Tamura  <tkent@chromium.org>

        Sub-fields in input[type=time] should not be focusable if the input is disabled or read-only
        https://bugs.webkit.org/show_bug.cgi?id=98850

        Reviewed by Kentaro Hara.

        Covered by additional test cases of
        time-multiple-fields/time-multiple-fields-keyboard-events.html and
        time-multiple-fields/time-multiple-fields-mouse-events.html.

        * html/shadow/DateTimeFieldElement.h:
        (FieldOwner): Add isFieldOwnerDisabledOrReadOnly.
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::isFocusable):
        Check isFieldOwnerDisabledOrReadOnly, and calls HTMLElement::isFocusable()
        just in case.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::isFieldOwnerDisabledOrReadOnly): Added.
        * html/shadow/DateTimeEditElement.h:
        (DateTimeEditElement): Declare isFieldOwnerDisabledOrReadOnly.

2012-10-09  Robert Kroeger  <rjkroege@chromium.org>

        [chromium] revert fling deacceleration parameter change
        https://bugs.webkit.org/show_bug.cgi?id=98820

        Reviewed by Adrienne Walker.

        After an extended discussion, it has been decided that a previous
        adjustment to fling deacceleration parameters should be reverted.

        Tested by existing unit tests.

        * platform/TouchFlingPlatformGestureCurve.cpp:
        (WebCore::TouchFlingPlatformGestureCurve::createForTouchPad):
        (WebCore::TouchFlingPlatformGestureCurve::createForTouchScreen):

2012-10-09  Kent Tamura  <tkent@chromium.org>

        Should reject invalid dates constructed with multiple fields UI
        https://bugs.webkit.org/show_bug.cgi?id=98727

        Reviewed by Hajime Morita.

        In input[type=date] with multiple fields UI, we allow users to set
        day-of-month value to 1-31 regardless of the month value. So users can
        construct an invalid date such as "2012-02-31". We should sanitize such
        values.

        This change affects platforms with ENABLE_INPUT_TYPE_DATE &&
        ENABLE_INPUT_MULTIPLE_FIELDS_UI.

        Test: fast/forms/date-multiple-fields/date-multiple-fields-keyboard-events.html

        * html/BaseDateAndTimeInputType.h:
        (BaseDateAndTimeInputType): Make sanitizeValue protected to be called from
        BaseMultipleFieldsDateAndTimeInputType.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::editControlValueChanged):
        Apply sanitizeValue to a value constructed in UI.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::restoreFormControlState):
        Ditto.

2012-10-09  Joe Mason  <jmason@rim.com>

        Check for null m_frame in NetworkJob
        https://bugs.webkit.org/show_bug.cgi?id=98830

        Reviewed by George Staikos.

        PR 220025

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):
        (WebCore::NetworkJob::storeCredentials):

2012-10-09  Jian Li  <jianli@chromium.org>

        Update the CSS property used to support draggable regions.
        https://bugs.webkit.org/show_bug.cgi?id=97156

        Reviewed by Adam Barth.

        The CSS property to support draggable regions has been changed from
        "-webkit-widget-region" to "-webkit-app-region" in the following syntax:
           -webkit-app-region: drag|no-drag

        The CSS parsing code for draggable regions is now different from the CSS
        parsing code for dashboard regions since we have quite different syntax.

        We still try to share as much rendering update code as possible for
        these two features. To make the shared code easier to understand for
        both features, the name "DashboardRegions" in the shared code is changed
        to "AnnotatedRegions" to work for both dashboard regions and draggable
        regions.

        Note that we still using WIDGET_REGION as feature name in order not to
        add more changes to this patch. It will be renamed to a more appropriate
        name in next patch. WIDGET_REGION is now only turned on for the chromium
        port.

        Test: fast/css/draggable-region-parser.html

        * Configurations/FeatureDefines.xcconfig: Disable WIDGET_REGION feature.
        * WebCore.exp.in: Update the exported symbol due to renaming.
        * css/CSSComputedStyleDeclaration.cpp: Update the CSS parsing.
        (WebCore):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp: Update the CSS parsing.
        (WebCore::CSSParser::parseValue):
        (WebCore):
        (WebCore::CSSParser::parseDashboardRegions):
        * css/CSSParserValues.cpp: Update the CSS parsing.
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSPrimitiveValue.cpp: Update the CSS parsing.
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::customCssText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::reportDescendantMemoryUsage):
        * css/CSSPrimitiveValue.h: Update the CSS parsing.
        (CSSPrimitiveValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in: Rename the CSS property for draggable region.
        * css/CSSValueKeywords.in: Add the keywords supported for the draggable region.
        * css/DashboardRegion.h: Remove WIDGET_REGION guard.
        (DashboardRegion):
        * css/StyleResolver.cpp: Update the CSS parsing.
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * dom/Document.cpp: Rename dashboardRegions to annotatedRegions.
        (WebCore::Document::Document):
        (WebCore::Document::annotatedRegions):
        (WebCore::Document::setAnnotatedRegions):
        (WebCore::Document::reportMemoryUsage):
        * dom/Document.h: Rename dashboardRegions to annotatedRegions.
        (WebCore):
        (WebCore::Document::setAnnotatedRegionsDirty):
        (WebCore::Document::annotatedRegionsDirty):
        (WebCore::Document::hasAnnotatedRegions):
        (WebCore::Document::setHasAnnotatedRegions):
        (Document):
        * page/Chrome.cpp: Rename dashboardRegions to annotatedRegions.
        (WebCore::ChromeClient::annotatedRegionsChanged):
        * page/ChromeClient.h: Rename dashboardRegions to annotatedRegions.
        (ChromeClient):
        * page/FrameView.cpp: Rename dashboardRegions to annotatedRegions.
        (WebCore::FrameView::layout):
        (WebCore::FrameView::updateAnnotatedRegions):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h: Rename dashboardRegions to annotatedRegions.
        (FrameView):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addAnnotatedRegions):
        * rendering/RenderInline.h: Rename dashboardRegions to annotatedRegions.
        (RenderInline):
        * rendering/RenderLayer.cpp: Rename dashboardRegions to annotatedRegions.
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::setHasHorizontalScrollbar):
        (WebCore::RenderLayer::setHasVerticalScrollbar):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        * rendering/RenderListBox.cpp: Rename dashboardRegions to annotatedRegions.
        (WebCore::RenderListBox::setHasVerticalScrollbar):
        * rendering/RenderObject.cpp: Rename dashboardRegions to annotatedRegions.
        (WebCore::RenderObject::styleWillChange):
        (WebCore::RenderObject::addAnnotatedRegions):
        (WebCore::RenderObject::collectAnnotatedRegions):
        * rendering/RenderObject.h: Rename dashboardRegions to annotatedRegions.
        (WebCore::AnnotatedRegionValue::operator==):
        (WebCore::AnnotatedRegionValue::operator!=):
        (AnnotatedRegionValue):
        (RenderObject):
        * rendering/style/RenderStyle.cpp: Update the CSS parsing.
        (WebCore::RenderStyle::diff):
        (WebCore):
        * rendering/style/RenderStyle.h: Update the CSS parsing.
        * rendering/style/RenderStyleConstants.h: Update the CSS parsing.
        * rendering/style/StyleDashboardRegion.h: Update the CSS parsing.
        * rendering/style/StyleRareNonInheritedData.cpp: Update the CSS parsing.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h: Update the CSS parsing.
        (WebCore):
        (StyleRareNonInheritedData):

2012-10-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130811 and r130821.
        http://trac.webkit.org/changeset/130811
        http://trac.webkit.org/changeset/130821
        https://bugs.webkit.org/show_bug.cgi?id=98831

        Broke date-suggestion-picker-appearance-with-scroll-bar.html
        (Requested by abarth|gardening on #webkit).

        * WebCore.exp.in:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/Node.cpp:
        (WebCore::Node::convertToPage):
        (WebCore::Node::convertFromPage):
        * 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/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteQuads):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteQuads):
        (WebCore::RenderBox::absoluteContentBox):
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computeStickyPositionConstraints):
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::absolutePoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::absoluteToContents):
        (WebCore::RenderLayer::convertToLayerCoords):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::calculateClipRects):
        (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):
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint):
        (WebCore::RenderObject::localToContainerQuad):
        (WebCore::RenderObject::localToContainerPoint):
        * rendering/RenderObject.h:
        (RenderObject):
        (WebCore::RenderObject::localToAbsoluteQuad):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):
        (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):
        (WebCore::RenderSVGModelObject::absoluteQuads):
        * rendering/svg/RenderSVGModelObject.h:
        (RenderSVGModelObject):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer):
        (WebCore::RenderSVGText::absoluteQuads):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):

2012-10-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130812.
        http://trac.webkit.org/changeset/130812
        https://bugs.webkit.org/show_bug.cgi?id=98826

        Caused fast/text/shaping/shaping-selection-rect to fail
        (Requested by abarth|gardening on #webkit).

        * platform/graphics/Font.cpp:
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (Font):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::TextLayout::width):
        (WebCore::Font::width):
        (WebCore::ComplexTextController::advance):
        * platform/graphics/mac/ComplexTextController.h:
        (ComplexTextController):
        * rendering/RenderBlock.h:
        (WebCore):
        (LineBreaker):
        (RenderBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::createLineBoxesFromBidiRuns):
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange):
        (WebCore::textWidth):
        (WebCore::RenderBlock::LineBreaker::nextLineBreak):

2012-10-09  Ryosuke Niwa  <rniwa@webkit.org>

        DOM/textarea-edit.html spends 35% of time in numGraphemeClusters
        https://bugs.webkit.org/show_bug.cgi?id=98711

        Reviewed by Kent Tamura.

        Since the number of characters is always greater than the number of grapheme clusters,
        we can avoid calling computeLengthForSubmission when the number of characters is less
        than maxlength. We still have to count the number of LFs since they all need to be
        converted into CRLFs. This improves WebKit's score on DOM/textarea-edit.html by 45%.

        * html/HTMLTextAreaElement.cpp:
        (WebCore::computeLengthForSubmission):
        (WebCore::numberOfLineBreaks):
        (WebCore::upperBoundForLengthForSubmission): Added.
        (WebCore::HTMLTextAreaElement::handleBeforeTextInsertedEvent):
        (WebCore::HTMLTextAreaElement::tooLong):

2012-10-09  Nate Chapin  <japhet@chromium.org>

        Make CachedResourceLoader RefCounted and have both Document
        and DocumentLoader hold RefPtrs. This is in preparation for
        caching main resources.
        https://bugs.webkit.org/show_bug.cgi?id=86787

        Reviewed by Adam Barth.

        No new tests, no functionality changes at this time.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document): Only create our own CachedResourceLoader
            if we were given a null frame.
        (WebCore::Document::~Document):
        (WebCore::Document::cachedResourceLoader):
        (WebCore):
        * dom/Document.h:
        (Document):
        * loader/DocumentLoader.cpp: Throughout, use our m_cachedResourceLoader instead
            of the Document's pointer.
        (WebCore::DocumentLoader::DocumentLoader): Create a CachedResourceLoader.
        (WebCore::DocumentLoader::~DocumentLoader):
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::subresource):
        (WebCore::DocumentLoader::getSubresources):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::cachedResourceLoader):
        (DocumentLoader):
        * loader/SubresourceLoader.cpp: Remove m_document, since it only existed to keep alive and access the CachedResourceLoader.
            It can now be accessed from m_documentLoader.
        (WebCore::SubresourceLoader::SubresourceLoader):
        (WebCore::SubresourceLoader::~SubresourceLoader):
        (WebCore::SubresourceLoader::willSendRequest):
        (WebCore::SubresourceLoader::releaseResources):
        * loader/SubresourceLoader.h:
        (SubresourceLoader):
        * loader/cache/CachedResourceLoader.cpp: Handle the possibility of a null Document in several places.
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::frame):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        (WebCore::CachedResourceLoader::loadDone):
        * loader/cache/CachedResourceLoader.h:
        (WebCore):
        (WebCore::CachedResourceLoader::create): Add create(), make constructor private.
        (CachedResourceLoader):
        (WebCore::CachedResourceLoader::document):
        (WebCore::CachedResourceLoader::setDocument):
        (WebCore::CachedResourceLoader::clearDocumentLoader):

2012-10-09  Alexander Shalamov  <alexander.shalamov@intel.com>

        CSS Style is not recalculated when media attribute of style element is changed
        https://bugs.webkit.org/show_bug.cgi?id=96752

        Reviewed by Kenneth Rohde Christiansen.

        When "media" attribute of style element is changed, style should be recalculated.
        This patch modifies HTMLStyleElement::parseAttribute, so that when the media attribute
        is updated, new MediaQuerySet is created and applied to the style element then, document
        style is recalculated. Since media query set is updated for CSSStyleSheet, CSSOM wrapper
        for media query should be updated as well in order to sync with new media query set value.

        Test: fast/media/mq-js-update-media.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::setMediaQueries):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseAttribute):

2012-10-09  Ben Murdoch  <benm@google.com>

        [chromium][Android] Add WebSecurityOrigin::grantLoadLocalResources()
        https://bugs.webkit.org/show_bug.cgi?id=97689

        Reviewed by Adam Barth.

        In addition to the WebKit/chromium side of the change, remove the
        ASSERT in SecurityOrigin::grantLoadLocalResources(). Android WebView
        is a legitimate user of this API in cases where neither of the
        ASSERT'd conditions hold.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::grantLoadLocalResources): Remove ASSERT.

2012-10-09  Jon Lee  <jonlee@apple.com>

        Build fix for Qt Windows.

        * html/HTMLPlugInElement.h: Include Image.h.

2012-10-09  Enrica Casucci  <enrica@apple.com>

        Only measure text once instead of twice when performing line layout.
        https://bugs.webkit.org/show_bug.cgi?id=98317
        <rdar://problem/12080821>

        Reviewed by Dan Bernstein.

        Since we are measuring each word to find out where the line break should occur,
        we should cache that information to avoid measuring the run again when
        creating the line box. The bulk of the change is in nextLineBreak, where
        the measurements are collected and placed in a vector so that they can
        be consumed in setLogicalWidthForTextRun where we used to measure the
        text one more time.
        Each entry in the vector is a WordMeasurement object that contains information
        about the start and end offset in the run, the renderer, the measured width
        and, possibly, a list of fallback fonts.
        When we need to compute the width of the run to create the line box, we add
        all the measurements for the given renderer in the run to get the total width.

        * platform/graphics/Font.cpp:
        (WebCore::Font::width): Added fallback fonts parameter.
        * platform/graphics/Font.h:
        (Font): Added fallback fonts parameter to the width static member function.
        This method is called when we compute the width using TextLayout.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::TextLayout::width): Added fallback fonts parameter.
        (WebCore::Font::width):
        (WebCore::ComplexTextController::advance):
        * platform/graphics/mac/ComplexTextController.h:
        (ComplexTextController): Added fallback fonts parameter to advance method.
        * rendering/RenderBlock.h: Added WordMeasures parameter to few methods.
        * rendering/RenderBlockLineLayout.cpp:
        (WordMeasurement): Added new class to hold measurement information.
        (WebCore::setLogicalWidthForTextRun): This is where we compute the run width using the
        cached information.
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine): Added wordMeasures parameter.
        (WebCore::RenderBlock::createLineBoxesFromBidiRuns): Added wordMeasures parameter.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Added declaration of the WordMeasures
        vector and its use.
        (WebCore::textWidth): Added fallbackFonts parameter, since now we only measure once.
        (WebCore::RenderBlock::LineBreaker::nextLineBreak): This method has been modified to collect
        the measurements of the individual words and add them to the vector.

2012-10-09  Levi Weintraub  <leviw@chromium.org>

        [Sub pixel layout] Fast-path iframe scrolling can picks up an extra pixel
        https://bugs.webkit.org/show_bug.cgi?id=98571

        Reviewed by Emil A Eklund.

        Refactoring all coordinate-switching functionality to use a single "mode" flag
        as opposed to having a bunch of boolean values. This enables the same set of
        options across the board, and a consistent interface. This was previously
        done for mapLocalToContainer.

        The imptetus for this for this stems from the one logical change in this patch
        which only effects sub-pixel layout. FrameView::convertToRenderer and
        convertFromRenderer return IntPoint coordinates, and need to also snap transform
        offsets to determine proper rects for scrolling.

        Unlabeled functions below are simply being updated to these new interfaces.

        Test: fast/sub-pixel/sub-pixel-iframe-copy-on-scroll.html

        * WebCore.exp.in:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        * dom/Element.cpp:
        (WebCore::Element::boundsInRootViewSpace):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::computeRelativePosition):
        * dom/Node.cpp:
        (WebCore::Node::convertToPage):
        (WebCore::Node::convertFromPage):
        * 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::convertToRenderer): Now pixel-snaps offsets before passing
        them to TransformState, which transforms the coordinates.
        (WebCore::FrameView::convertFromRenderer): Ditto.
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::absoluteQuads):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteQuads):
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::mapAbsoluteToLocalPoint):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint):
        * rendering/RenderBoxModelObject.h:
        (RenderBoxModelObject):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::isInUnavailablePluginIndicator):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::userResize):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::absolutePoint):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderInline.h:
        (RenderInline):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::absoluteToContents):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::localToAbsolute):
        (WebCore::RenderObject::absoluteToLocal):
        (WebCore::RenderObject::mapLocalToContainer):
        (WebCore::RenderObject::mapAbsoluteToLocalPoint):
        (WebCore::RenderObject::localToContainerQuad):
        (WebCore::RenderObject::localToContainerPoint):
        * rendering/RenderObject.h:
        (RenderObject): MapLocalToContainerFlags is now MapCoordinatesFlags since it's
        now used for other conversion methods.
        (WebCore::RenderObject::localToAbsoluteQuad):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::mapLocalToContainer):
        (WebCore::RenderView::mapAbsoluteToLocalPoint):
        * rendering/RenderView.h:
        (RenderView):
        * 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.cpp:
        (WebCore::RenderSVGRoot::mapLocalToContainer):
        * rendering/svg/RenderSVGRoot.h:
        (RenderSVGRoot):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer):
        * rendering/svg/RenderSVGText.h:
        (RenderSVGText):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::mapLocalToContainer):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):

2012-10-09  Jon Lee  <jonlee@apple.com>

        [WK2] Have plugins render offscreen to capture snapshot
        https://bugs.webkit.org/show_bug.cgi?id=98326
        <rdar://problem/12426658>

        Reviewed by Simon Fraser.

        Change updateSnapshot() to use a PassRefPtr<Image> instead of Image*. WebKit2 ultimately
        hands the image off to RenderSnapshottedPlugin. A CachedImage instance then manages the
        lifetime of the Image.

        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::updateSnapshot):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateSnapshot):
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot): Updated to use the PassRefPtr<Image>
        pointer.
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn):

2012-10-09  Adam Barth  <abarth@webkit.org>

        Unreviewed. Move this file to where the build systems think it should
        be. See https://bugs.webkit.org/show_bug.cgi?id=94755

        * platform/graphics/CustomFilterConstants.h: Removed.
        * platform/graphics/filters/CustomFilterConstants.h: Copied from Source/WebCore/platform/graphics/CustomFilterConstants.h.

2012-10-09  Tony Chang  <tony@chromium.org>

        Use computeLogical* methods instead of updateLogical* methods in RenderImage
        https://bugs.webkit.org/show_bug.cgi?id=98802

        Reviewed by Eric Seidel.

        We were storing the old values of width/height, calling updateLogical{Width,Height}, then restoring
        the old values.  Instead, use the computeLogical{Width,Height} methods so we don't have to overwrite
        the current values.

        No new tests, this is just a refactoring.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):

2012-10-09  Enrica Casucci  <enrica@apple.com>

        [chromium] fast/text/international/text-spliced-font.html and fast/writing-mode/Kusa-Makura-
        background-canvas.html failing on the Mac after r130443
        https://bugs.webkit.org/show_bug.cgi?id=98545

        Reviewed by Tony Chang.

        Adding back the ! removed by mistake before submitting r130779. 

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataAndPageForCharacter):

2012-10-09  Artem Simonov  <asimonov@rim.com>

        [BlackBerry] EGL Context deleted prematurely in GraphicsContext3D destructor
        https://bugs.webkit.org/show_bug.cgi?id=98796

        Reviewed by George Staikos.

        Reordered destruction of GraphicsContext3D so that the compositing layer is
        destroyed first.

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

2012-10-09  Ben Wagner  <bungeman@chromium.org>

        Disable hinting when webkit-font-smoothing:antialiased is used on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=98061

        Reviewed by Stephen White.

        Normal anti-aliased text matches subpixel anti-aliased text.
        However, text marked with webkit-font-smoothing:antialiased should be drawn without hinting to match Safari.
        See crbug.com/152304 . 

        Test is fast/css/font-smoothing.html, but DRT runs with font smoothing disabled, so no change visible. 

        * platform/graphics/skia/FontSkia.cpp:
        (WebCore::setupPaint):
        Set kNo_Hinting when webkit-font-smoothing is antialiased.

2012-10-09  Max Vujovic  <mvujovic@adobe.com>

        [CSS Shaders] Create constants for vertex attribute sizes and offsets
        https://bugs.webkit.org/show_bug.cgi?id=94755

        Reviewed by Dean Jackson.

        Factor out the vertex attribute size and offset constants into a new file,
        CustomFilterConstants.h. Replace literals in CustomFilterMeshGenerator with the constants.

        I could have added the constants to CustomFilterMeshGenerator.h, but this would make
        FECustomFilter depend on CustomFilterMeshGenerator.

        I also could have added the constants to CustomFilterMesh.h, but this would make
        CustomFilterMeshGenerator depend on CustomFilterMesh.

        No new tests. No change in behavior.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/CustomFilterConstants.h: Added.
        (WebCore):
        * platform/graphics/filters/CustomFilterMeshGenerator.h:
        (WebCore::CustomFilterMeshGenerator::floatsPerVertex):
            Use the new constants instead of literal values.
        * platform/graphics/filters/FECustomFilter.cpp:
        (WebCore::FECustomFilter::bindProgramAndBuffers):
            Pull the constant definitions out of here.

2012-10-09  Michael Saboff  <msaboff@apple.com>

        MarkupAccumulator should optimally handle 8 bit Strings
        https://bugs.webkit.org/show_bug.cgi?id=98224

        Reviewed by Ryosuke Niwa.

        Updated appendCharactersReplacingEntities to take a string, offset and length and process 8 or 16 bit
        data as appropriate.  Also made it a member function of MarkupAccumulator.

        No new tests, behavior covered by existing tests.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendCharactersReplacingEntities):
        (WebCore::MarkupAccumulator::appendAttributeValue):
        (WebCore::MarkupAccumulator::appendNodeValue):
        * editing/MarkupAccumulator.h:
        (MarkupAccumulator):
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendText):
        (WebCore::urlToMarkup):

2012-10-09  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Overflowing key generator should throw ConstraintError
        https://bugs.webkit.org/show_bug.cgi?id=98807

        Reviewed by Tony Chang.

        After the WebKit implementation landed throwing DataError, public-webapps
        consensus was that the exception thrown should be ConstraintError. Trivial
        change, and we pass one more W3C test submission.

        Test: storage/indexeddb/key-generator.html

        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):

2012-10-08  Martin Robinson  <mrobinson@igalia.com>

        Fix the order of the statements in my previous build fix.

        Reviewed by Gustavo Noronha Silva.

        My previous build build fix for ResourceHandleSoup ordered the assignment
        of the local ResourceHandleInternal incorrectly. Instead of being before
        both assertions, it should be interspersed among them.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupMessageForHandleAndRequest):

2012-10-09  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=98457
        ScrollingStateNodes should be referenced via IDs on 
        RenderLayerBacking

        Reviewed by Simon Fraser.

        This patch associates all ScrollingStateNodes with a 
        RenderLayerBacking via a HashMap from RenderLayerBackings to 
        ScrollingStateNodes on ScrollingCoordinator. Prior to this patch, the 
        root ScrollingStateNode was created immediately upon creation of the 
        ScrollingCoordinator, and it was constantly re-used for every main 
        FrameView. This doesn't work in the new model since that doesn't 
        allow that ScrollingStateNode to have a definite association with a 
        RenderLayerBacking. So this patch does also introduce some lifetime 
        differences with the ScrollingStateNodes.

        If a page is going into the page cache, we should clear the state 
        tree. When the page is in the cache, we won't have access to the 
        RenderLayerBacking, and we don't want to be doing anything with the 
        ScrollingStateNodes anyway.
        * dom/Document.cpp:
        (WebCore::Document::setInPageCache):

        When a page is restored from the page cache, call 
        frameViewRootLayerDidChange() to re-create the state tree.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):

        This new FrameView function will return the scrollLayerID for a given FrameView.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollLayerID):
        (WebCore):
        * page/FrameView.h:
        (FrameView):

        There is a lot of unfortunate fiddling with the terrible 
        if-defs in ScrollingCoordinator. I added a FIXME to the header
        noting how we can avoid this in the future.
        * page/scrolling/ScrollingCoordinator.cpp:

        All of this code used to refer to the rootStateNode directly. 
        Instead, now it looks up the proper ScrollingStateNode for the given 
        FrameView in the HashMap.
        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::ScrollingCoordinator::frameViewWheelEventHandlerCountChanged):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::ScrollingCoordinator::updateMainFrameScrollLayerPosition):
        (WebCore::ScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::ScrollingCoordinator::setScrollLayerForNode):
        (WebCore::ScrollingCoordinator::setNonFastScrollableRegionForNode):
        (WebCore::ScrollingCoordinator::setScrollParametersForNode):
        (WebCore::ScrollingCoordinator::setWheelEventHandlerCountForNode):

        Returns the existing ScrollingStateNode for a given FrameView by 
        looking it up in the HashMap.
        (WebCore::ScrollingCoordinator::stateNodeForFrameView):

        This is called when a RenderLayerBacking is destroyed. At that time, 
        its associated ScrollingStateNode is destroyed.
        (WebCore::ScrollingCoordinator::detachFromStateTree):

        clearStateTree() clears the HashMap and destroys all of the nodes in 
        the current state tree.
        (WebCore::ScrollingCoordinator::clearStateTree):

        Creates a new root state node for the given FrameView.
        (WebCore::ScrollingCoordinator::ensureRootStateNodeForFrameView):

        Some new functions for the new node stuff.
        * page/scrolling/ScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinatorNone.cpp:
        (WebCore::ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread):
        (WebCore::ScrollingCoordinator::supportsFixedPositionLayers):
        (WebCore::ScrollingCoordinator::setLayerIsContainerForFixedPositionLayers):
        (WebCore::ScrollingCoordinator::setLayerIsFixedToContainerLayer):
        (WebCore::ScrollingCoordinator::scrollableAreaScrollLayerDidChange):
        (WebCore::ScrollingCoordinator::detachFromStateTree):
        (WebCore::ScrollingCoordinator::clearStateTree):
        (WebCore::ScrollingCoordinator::ensureRootStateNodeForFrameView):
        (WebCore::setScrollParameters):
        (WebCore::setWheelEventHandlerCount):

        New remove functions are used when the sate tree is cleared and when 
        a RenderLayerBacking is destroyed.
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::removeChild):
        (WebCore):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::isScrollingStateScrollingNode):
        (ScrollingStateNode):
        (WebCore::ScrollingStateNode::parent):

        New convenience function for casting to ScrollingStateScrollingNodes.
        * page/scrolling/ScrollingStateScrollingNode.h:
        (WebCore::toScrollingStateScrollingNode):
        (WebCore):

        No longer automatically create a root node upon creation of the 
        ScrollingStateTree. We now want to wait to create the root node until 
        we have a RenderLayerBacking to associate it with.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::removeNode):
        (WebCore):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::setRootStateNode):
        (ScrollingStateTree):

        RenderLayerBacking has a new data member called m_scrollLayerID. If 
        this RenderLayerBacking is represented in the scrolling tree, then 
        the ID with be unique and non-zero. 
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::~RenderLayerBacking):
        (WebCore::generateScrollLayerID):
        (WebCore):
        (WebCore::RenderLayerBacking::attachToScrollingCoordinator):
        (WebCore::RenderLayerBacking::detachFromScrollingCoordinator):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        (WebCore::RenderLayerBacking::scrollLayerID):

        Move the call to ScrollingCooridinator::frameViewRootLayerDidChange() 
        from RenderLayerCompositor::attachRootLayer() to 
        RenderLayerCompositor:: updateBacking(). The problem with the old call 
        site is that there is no backing at that time, so we are trying to set 
        state on the root scrolling state node before we have enough 
        information to create that node and add it to the HashMap.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::attachRootLayer):

2012-10-09  Florin Malita  <fmalita@chromium.org>

        SVGResources should use HashSet<AtomicString> instead of HashSet<AtomicStringImpl*>
        https://bugs.webkit.org/show_bug.cgi?id=98683

        Reviewed by Darin Adler.

        Eric's notes:

        SVGResources should use HashSet<AtomicString> instead of HashSet<AtomicStringImpl*>
        They do basically the same thing, and the former is much more common (and less code). It's
        also safe, on the off-chance that we're using AtomicStrings which might otherwise go away.

        No new tests, refactoring. 

        * rendering/svg/SVGResources.cpp:
        (WebCore::clipperFilterMaskerTags):
        (WebCore::markerTags):
        (WebCore::fillAndStrokeTags):
        (WebCore::chainableResourceTags):
        (WebCore::SVGResources::buildCachedResources):

2012-10-09  Enrica Casucci  <enrica@apple.com>

        [chromium] fast/text/international/text-spliced-font.html and fast/writing-mode/Kusa-Makura-background-canvas.html
        failing on the Mac after r130443
        https://bugs.webkit.org/show_bug.cgi?id=98545

        Reviewed by Tony Chang.

        Fixes a regression introduced with r130443.
        No new tests added since we already have tests covering this.
        Updated TestExpectations for chromium and mac.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataAndPageForCharacter): Text orientation should not be
        taken into account if the character is an ideograph or a symbol.

2012-10-09  Philip Rogers  <pdr@google.com>

        Prevent animation when CSS attributeType is invalid.
        https://bugs.webkit.org/show_bug.cgi?id=94569

        Reviewed by Dirk Schulze.

        This patch changes hasValidAttributeType() to return false when
        we have attributeType=CSS with a non-CSS attribute name.

        Previously we would animate non-CSS attributes when attributeType was
        CSS which resulted in crashes. To track this case, this patch catches
        changes to targetElement, attributeName, and attributeType and checks
        if an invalid combination is present. If invalid, hasInvalidCSSAttributeType()
        will return true causing hasValidAttributeType() to return false and prevent
        the animation from running.

        Tests: svg/animations/animate-css-xml-attributeType.html
               svg/animations/invalid-css-attribute-crash-expected.svg
               svg/animations/invalid-css-attribute-crash.svg

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::hasValidAttributeType):
        (WebCore::SVGAnimateElement::targetElementWillChange):
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        (WebCore::SVGAnimationElement::isSupportedAttribute):

            This now supports the attributeType attribute which is stored in m_attributeType.

        (WebCore::SVGAnimationElement::parseAttribute):
        (WebCore::SVGAnimationElement::setAttributeType):

            Changes to attributeType, attributeName, and targetElement need to be tracked
            to determine when an invalid combination happens.

        (WebCore::SVGAnimationElement::targetElementWillChange):
        (WebCore):
        (WebCore::SVGAnimationElement::setAttributeName):
        (WebCore::SVGAnimationElement::checkInvalidCSSAttributeType):
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::attributeType):
        (SVGAnimationElement):
        (WebCore::SVGAnimationElement::hasInvalidCSSAttributeType):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::targetElement):
        * svg/animation/SVGSMILElement.h:
        (SVGSMILElement):

2012-10-09  Pravin D  <pravind.2k4@gmail.com>

        max-width property is does not overriding the width properties for css tables(display:table)
        https://bugs.webkit.org/show_bug.cgi?id=98455

        Reviewed by Tony Chang.

        The max-width property determines the maximum computed width an element can have. In case of css tables(display:table),
        the computed was not being limited by the max-width property. The current patch fixes this issue.

        Test: fast/table/css-table-max-width.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
         Logic to compute the logical width of an element such that it does not exceed the max-width value.
         Also when both min-width and max-width are present, the following contraint is used to compute the logical width:
           1) min-width < Computed LogicalWidth < max-width, when min-width < max-width.
           2) Computed LogicalWidth = min-width, when min-width > max-width.

2012-10-09  Harald Alvestrand  <hta@google.com>

        Change PeerConnection getStats function to single value local / remote
        elements in RTCStatsReport.

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

        Reviewed by Adam Barth.

        IDL of RTCStatsReport has been changed to make local/remote
        single valued RTCStatsElement attributes.
        The RTCStatsReport argument to index the list of RTCStatsElement
        in the local and remote functions has been removed.

        Tested by modifications to RTCPeerConnection-stats.html

        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::addElement):
        (WebCore::RTCStatsReport::addStatistic):
        * Modules/mediastream/RTCStatsReport.h:
        (WebCore::RTCStatsReport::local):
        (WebCore::RTCStatsReport::remote):
        (RTCStatsReport):
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::addElement):
        (WebCore::RTCStatsResponse::addStatistic):
        * Modules/mediastream/RTCStatsResponse.h:
        (RTCStatsResponse):
        * platform/chromium/support/WebRTCStatsResponse.cpp:
        (WebKit::WebRTCStatsResponse::addElement):
        (WebKit::WebRTCStatsResponse::addStatistic):
        * platform/mediastream/RTCStatsResponseBase.h:
        (RTCStatsResponseBase):

2012-10-09  Antonio Gomes  <agomes@rim.com>

        Get rid of FIXED_POSITION_CREATES_STACKING_CONTEXT in favor of Settings::fixedPositionCreatesStackingContext()
        https://bugs.webkit.org/show_bug.cgi?id=98756

        Reviewed by Rob Buis.

        No behavior change so no new tests.

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

2012-10-09  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Fix build with QtMultimedia

        Reviewed by Tor Arne Vestbø.

        This is an initial rudimentary port to of the QtMultimedia back-end,
        adapted to slight API changes and (more importantly) to the
        implementation of QAbstractVideoSurface instead of using
        QGraphicsVideoItem (which is in QtMultimediaWidgets).

        * WebCore.pri:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::supportsType):
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::~MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::didLoadingProgress):
        (WebCore::MediaPlayerPrivateQt::totalBytes):
        (WebCore::MediaPlayerPrivateQt::setVisible):
        (WebCore::MediaPlayerPrivateQt::surfaceFormatChanged):
        (WebCore::MediaPlayerPrivateQt::setSize):
        (WebCore::MediaPlayerPrivateQt::removeVideoItem):
        (WebCore::MediaPlayerPrivateQt::restoreVideoItem):
        (WebCore):
        (WebCore::MediaPlayerPrivateQt::start):
        (WebCore::MediaPlayerPrivateQt::supportedPixelFormats):
        (WebCore::MediaPlayerPrivateQt::present):
        (WebCore::MediaPlayerPrivateQt::paint):
        (WebCore::MediaPlayerPrivateQt::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateQt::paintToTextureMapper):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (MediaPlayerPrivateQt):

2012-10-09  Garrett Casto  <gcasto@chromium.org>

        Allow users to specify a different hover image for TextFieldDecorationElement
        https://bugs.webkit.org/show_bug.cgi?id=93662

        Reviewed by Kent Tamura.

        * html/shadow/TextFieldDecorationElement.cpp:
        (WebCore::TextFieldDecorationElement::TextFieldDecorationElement):
        (WebCore::TextFieldDecorationElement::updateImage):
        (WebCore::TextFieldDecorationElement::defaultEventHandler): Handles mouseover and mouseout events.
        (WebCore::TextFieldDecorationElement::willRespondToMouseMoveEvents): Now returns true if the element is not disabled.
        (WebCore):
        * html/shadow/TextFieldDecorationElement.h:
        (TextFieldDecorator):
        (TextFieldDecorationElement):

2012-10-09  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Uploading images to Google+ using QtWebKit does not work.
        https://bugs.webkit.org/show_bug.cgi?id=72329

        Reviewed by Jocelyn Turcotte.

        Implement handling of Blob FormData, including its extensions to the File FormData.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::appendBlobResolved):
        (WebCore::FormDataIODevice::prepareFormElements):
        (WebCore::FormDataIODevice::computeSize):
        (WebCore::FormDataIODevice::moveToNextElement):
        (WebCore::FormDataIODevice::prepareCurrentElement):
        (WebCore::FormDataIODevice::openFileForCurrentElement):
        (WebCore::FormDataIODevice::readData):
        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
        * platform/network/qt/QNetworkReplyHandler.h:
        (FormDataIODevice):

2012-10-09  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Text decorations specified on the containing block are not properly applied when ::first-line is present.
        https://bugs.webkit.org/show_bug.cgi?id=93829

        Reviewed by Abhishek Arya.

        If a container's style and its pseudo :first-line style have unique
        text-decorations specified for them, only the :first-line text-decoarations
        were being applied.

        The uploaded patch intends to first compute the text decoration colors
        for the containing box, followed by that of the first-line (if specified).

        This thus avoids the condition wherein our containing box's text-decorations
        were not getting applied at all since initially we were only computing
        for the first-line style.

        Test: fast/css/text-decorations-on-first-line-and-containing-block.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        getTextDecorationColors() is first called for computing the containing box's
        text-decoration values and then for first-line style's text-decorations,
        if specified.

2012-10-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130746.
        http://trac.webkit.org/changeset/130746
        https://bugs.webkit.org/show_bug.cgi?id=98749

        It made 45 tests crash on Qt (Requested by Ossy on #webkit).

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::FormDataIODevice::computeSize):
        (WebCore::FormDataIODevice::moveToNextElement):
        (WebCore::FormDataIODevice::openFileForCurrentElement):
        (WebCore::FormDataIODevice::readData):
        (WebCore::QNetworkReplyHandler::getIODevice):
        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
        * platform/network/qt/QNetworkReplyHandler.h:
        (QNetworkReplyHandler):
        (FormDataIODevice):

2012-10-09  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        [Qt] Uploading images to Google+ using QtWebKit does not work.
        https://bugs.webkit.org/show_bug.cgi?id=72329

        Reviewed by Jocelyn Turcotte.

        Implement handling of Blob FormData, including its extensions to the File FormData.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::FormDataIODevice::computeSize):
        (WebCore::FormDataIODevice::moveToNextElement):
        (WebCore::FormDataIODevice::prepareCurrentElement):
        (WebCore::FormDataIODevice::openFileForCurrentElement):
        (WebCore::FormDataIODevice::readData):
        (WebCore::QNetworkReplyHandler::getIODevice):
        (WebCore::QNetworkReplyHandler::handleBlobDataIfAny):
        (WebCore::QNetworkReplyHandler::sendNetworkRequest):
        * platform/network/qt/QNetworkReplyHandler.h:
        (QNetworkReplyHandler):
        (FormDataIODevice):

2012-10-09  Keishi Hattori  <keishi@webkit.org>

        Page popup should be smarter about its layout
        https://bugs.webkit.org/show_bug.cgi?id=98499

        Reviewed by Kent Tamura.

        This change fixes these two issues:
        1. Page popup should reposition itself so it won't get clipped by screen(Win/Linux) or rootview(Mac) bounds.
        2. Page popup should resize itself when it doesn't fit.

        Test: platform/chromium/fast/forms/page-popup/page-popup-adjust-rect.html

        * Resources/pagepopups/calendarPicker.js:
        (initialize): We need to set global.params at the beginning because we need it for resizeWindow().
        * Resources/pagepopups/colorSuggestionPicker.js: Added global.params.
        (handleMessage):
        (initialize):
        (handleArgumentsTimeout):
        * Resources/pagepopups/pickerCommon.js:
        (Rect): Represents an axis aligned rectangle.
        (Rect.prototype.get maxX): Gets position of right edge.
        (Rect.prototype.get maxY): Gets position of bottom edge.
        (Rect.prototype.toString):
        (Rect.intersection): Returns the intersection of two rectangles.
        (resizeWindow): Resize window to a certain size. Don't allow shrinking.
        (adjustWindowRect): Calculates the best position and size for the popup.
        (_adjustWindowRectVertically):
        (_adjustWindowRectHorizontally):
        (setWindowRect): Sets the position and size of the popup to the given rect.
        * Resources/pagepopups/suggestionPicker.css:
        (.suggestion-list): Don't show horizontal scroll bar.
        * Resources/pagepopups/suggestionPicker.js:
        (SuggestionPicker.prototype._fixWindowSize): 
        * page/PagePopupClient.cpp:
        (WebCore::PagePopupClient::addProperty): For adding an int to JSON.
        (WebCore::PagePopupClient::addProperty): For adding an IntRect to JSON.
        (WebCore):
        * page/PagePopupClient.h:
        (PagePopupClient):

2012-10-09  Hajime Morrita  <morrita@google.com>

        [Refactoring] Scoped Style related code should have its own class.
        https://bugs.webkit.org/show_bug.cgi?id=98244

        Reviewed by Dimitri Glazkov.

        This change extracts StyleScopeResolver from StyleResolver to clarify
        the responsibility of the style scope handling. Now we can easily see
        where the style scoping needs to be involed.

        Coming Shadow DOM related change like @host rules will fit within this class.

        No new tests, refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::StyleResolver):
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::appendAuthorStylesheets):
        (WebCore::StyleResolver::pushParentElement):
        (WebCore::StyleResolver::popParentElement):
        (WebCore::StyleResolver::pushParentShadowRoot):
        (WebCore::StyleResolver::popParentShadowRoot):
        (WebCore::StyleResolver::matchScopedAuthorRules):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        (WebCore::StyleResolver::reportMemoryUsage):
        * css/StyleResolver.h:
        (StyleResolver):
        * css/StyleScopeResolver.cpp: Added.
        (WebCore):
        (WebCore::StyleScopeResolver::StyleScopeResolver):
        (WebCore::StyleScopeResolver::~StyleScopeResolver):
        (WebCore::StyleScopeResolver::scopeFor):
        (WebCore::StyleScopeResolver::ruleSetFor):
        (WebCore::StyleScopeResolver::ensureRuleSetFor):
        (WebCore::StyleScopeResolver::setupStack):
        (WebCore::StyleScopeResolver::push):
        (WebCore::StyleScopeResolver::pop):
        (WebCore::StyleScopeResolver::collectFeaturesTo):
        (WebCore::StyleScopeResolver::reportMemoryUsage):
        * css/StyleScopeResolver.h: Added.
        (WebCore):
        (StyleScopeResolver):
        (WebCore::StyleScopeResolver::StackFrame::StackFrame):
        (StackFrame):
        (WebCore::StyleScopeResolver::hasScopedStyles):
        (WebCore::StyleScopeResolver::stackSize):
        (WebCore::StyleScopeResolver::stackFrameAt):
        (WebCore::StyleScopeResolver::matchesStyleBounds):
        (WebCore::StyleScopeResolver::stackIsConsistent):
        (WebCore::StyleScopeResolver::ensureStackConsistency):
        (WebCore::StyleScopeResolver::scopeFor):
        (WebCore::StyleScopeResolver::ensureRuleSetFor):

2012-10-08  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Make RenderThemeQStyle/ScrollbarThemeQStyle compile without QStyle/QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=98268

        Reviewed by Tor Arne Vestbø.

        Extracted QStyle/QWidget related code into a QWebStyle class that implements the QStyleFacade interface.

        QStyleFacade is a pure interface that lives in WebCore/platform/qt
        (next to RenderThemeQStyle and ScrollbarThemeQStyle) and provides a
        minimal interface of what we need to draw with QStyle as well as basic
        hit testing and metric retrieval. It also provides a
        QStyleFacadeOption class that aggregates common meta-data for
        rendering primitives, such as direction, rectangle, state (sunken,
        enabled, etc.) or palette. It also provides some more slider/scrollbar
        specific fields in a slider sub-structure.

        RenderThemeQStyle/ScrollbarThemeQStyle used to instantiate specific QStyleOption sub-classes and populate
        them with state information from render objects, before calling straight to QStyle. Most of the common code
        was encapsulated in StylePainterQStyle.

        The new RenderThemeQStyle/ScrolllbarThemeQStyle uses common code in
        StylePainterQStyle to populate state into QStyleFacadeOption before
        calling into QStyleFacade.

        The style facade is then implemented by QStyleFacadeImp, which extracts
        meta-data from QStyleFacadeOption arguments, populates style
        primitive specific QStyleOption objects and then calls on QStyle.

        RenderThemeQStyle/ScrollbarThemeQStyle can only use interface methods
        from QStyleFacade. QStyleFacadeImp on the other hand will live in the
        separate QtWebKitWidgets library in the future and therefore cannot use
        any WebCore types.

        * Target.pri:
        * platform/qt/QStyleFacade.cpp: Added.
        (WebCore):
        (WebCore::QStyleFacade::styleForPage):
        * platform/qt/QStyleFacade.h: Added.
        (WebCore):
        (QStyleFacade):
        (WebCore::QStyleFacade::~QStyleFacade):
        (WebCore::QStyleFacadeOption::QStyleFacadeOption):
        (QStyleFacadeOption):
        * platform/qt/RenderThemeQStyle.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp.
        (WebCore):
        (WebCore::RenderThemeQStyle::getStylePainter):
        (WebCore::StylePainterQStyle::StylePainterQStyle):
        (WebCore::StylePainterQStyle::init):
        (WebCore::RenderThemeQStyle::create):
        (WebCore::RenderThemeQStyle::setStyleFactoryFunction):
        (WebCore::RenderThemeQStyle::styleFactory):
        (WebCore::RenderThemeQStyle::RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::~RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQStyle::inflateButtonRect):
        (WebCore::RenderThemeQStyle::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQStyle::adjustButtonStyle):
        (WebCore::RenderThemeQStyle::setButtonPadding):
        (WebCore::RenderThemeQStyle::paintButton):
        (WebCore::RenderThemeQStyle::paintTextField):
        (WebCore::RenderThemeQStyle::adjustTextAreaStyle):
        (WebCore::RenderThemeQStyle::paintTextArea):
        (WebCore::RenderThemeQStyle::setPopupPadding):
        (WebCore::RenderThemeQStyle::colorPalette):
        (WebCore::RenderThemeQStyle::paintMenuList):
        (WebCore::RenderThemeQStyle::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQStyle::paintMenuListButton):
        (WebCore::RenderThemeQStyle::animationDurationForProgressBar):
        (WebCore::RenderThemeQStyle::paintProgressBar):
        (WebCore::RenderThemeQStyle::paintSliderTrack):
        (WebCore::RenderThemeQStyle::adjustSliderTrackStyle):
        (WebCore::RenderThemeQStyle::paintSliderThumb):
        (WebCore::RenderThemeQStyle::adjustSliderThumbStyle):
        (WebCore::RenderThemeQStyle::paintSearchField):
        (WebCore::RenderThemeQStyle::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldDecoration):
        (WebCore::RenderThemeQStyle::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeQStyle::paintInnerSpinButton):
        (WebCore::RenderThemeQStyle::initializeCommonQStyleOptions):
        (WebCore::RenderThemeQStyle::adjustSliderThumbSize):
        * platform/qt/RenderThemeQStyle.h: Renamed from Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.h.
        (WebCore):
        (RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::qStyle):
        (StylePainterQStyle):
        (WebCore::StylePainterQStyle::isValid):
        (WebCore::StylePainterQStyle::paintButton):
        (WebCore::StylePainterQStyle::paintTextField):
        (WebCore::StylePainterQStyle::paintComboBox):
        (WebCore::StylePainterQStyle::paintComboBoxArrow):
        (WebCore::StylePainterQStyle::paintSliderTrack):
        (WebCore::StylePainterQStyle::paintSliderThumb):
        (WebCore::StylePainterQStyle::paintInnerSpinButton):
        (WebCore::StylePainterQStyle::paintProgressBar):
        (WebCore::StylePainterQStyle::paintScrollCorner):
        (WebCore::StylePainterQStyle::paintScrollBar):
        * platform/qt/ScrollbarThemeQStyle.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.cpp.
        (WebCore):
        (WebCore::ScrollbarThemeQStyle::ScrollbarThemeQStyle):
        (WebCore::ScrollbarThemeQStyle::~ScrollbarThemeQStyle):
        (WebCore::scPart):
        (WebCore::scrollbarPart):
        (WebCore::initSliderStyleOption):
        (WebCore::ScrollbarThemeQStyle::paint):
        (WebCore::ScrollbarThemeQStyle::hitTest):
        (WebCore::ScrollbarThemeQStyle::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeQStyle::invalidatePart):
        (WebCore::ScrollbarThemeQStyle::scrollbarThickness):
        (WebCore::ScrollbarThemeQStyle::thumbPosition):
        (WebCore::ScrollbarThemeQStyle::thumbLength):
        (WebCore::ScrollbarThemeQStyle::trackPosition):
        (WebCore::ScrollbarThemeQStyle::trackLength):
        (WebCore::ScrollbarThemeQStyle::paintScrollCorner):
        * platform/qt/ScrollbarThemeQStyle.h: Renamed from Source/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.h.
        (WebCore):
        (ScrollbarThemeQStyle):
        (WebCore::ScrollbarThemeQStyle::qStyle):

2012-10-08  Kiran Muppala  <cmuppala@apple.com>

        Throttle DOM timers on hidden pages.
        https://bugs.webkit.org/show_bug.cgi?id=98474

        Reviewed by Maciej Stachowiak.

        When the visibility of a page changes to "hidden", all it's DOM timers are
        updated to align their fire times on one second intervals.  This limits the
        number of CPU wakes due to a hidden pages to one per second.

        Test: fast/dom/timer-throttling-hidden-page.html

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore):
        (WebCore::Document::timerAlignmentInterval):
        Read Page::timerAlignmentInterval and pass it along to DOMTimer.

        * dom/Document.h:
        (Document):
        * dom/ScriptExecutionContext.cpp:
        (WebCore):
        (WebCore::ScriptExecutionContext::didChangeTimerAlignmentInterval):
        Scan through self DOM Timers and tell them to recompute their fire
        time based on the updated alignment interval.
        (WebCore::ScriptExecutionContext::timerAlignmentInterval):

        * dom/ScriptExecutionContext.h:
        (ScriptExecutionContext):
        * page/DOMTimer.cpp:
        (WebCore):
        (WebCore::DOMTimer::alignedFireTime):
        If the document's alignment interval is non zero, round up the fire
        time to the next multiple of alignment interval.

        * page/DOMTimer.h:
        (DOMTimer):
        (WebCore::DOMTimer::defaultTimerAlignmentInterval):
        (WebCore::DOMTimer::setDefaultTimerAlignmentInterval):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore):
        (WebCore::Page::setTimerAlignmentInterval):
        (WebCore::Page::timerAlignmentInterval):
        (WebCore::Page::setVisibilityState):
        Getter and Setter for alignment interval.  Expose setVisibilityState
        if either PAGE_VISIBILITY_API is enabled or if HIDDEN_PAGE_DOM_TIMER_REDUCTION
        is enabled.

        * page/Page.h:
        (Page):
        * page/Settings.cpp:
        (WebCore):
        (WebCore::Settings::setDefaultDOMTimerAlignmentInterval):
        (WebCore::Settings::defaultDOMTimerAlignmentInterval):
        (WebCore::Settings::setDOMTimerAlignmentInterval):
        (WebCore::Settings::domTimerAlignmentInterval):
        * page/Settings.h:
        (Settings):
        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::suspend):
        Save the time remaining to the original unaligned fire time, so that
        on resuming, the fire time will be correctly aligned using the latest
        alignment interval.

        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        Clear m_unalignedNextFireTime along with m_nextFireTime to keep
        them always in sync.

        * platform/Timer.cpp:
        (WebCore::TimerBase::TimerBase):
        (WebCore::TimerBase::setNextFireTime):
        Save the requested fire time in m_unalignedNextFireTime and
        set m_nextFireTime to the aligned value.  The unalinged value
        is used to recompute fire time if alignment interval changes.
        (WebCore):
        (WebCore::TimerBase::didChangeAlignmentInterval):
        Recompute next fire time from m_unalignedNextFireTime.
        (WebCore::TimerBase::nextUnalignedFireInterval):
        Interval from current time to the original unaligned fire time.

        * platform/Timer.h:
        (TimerBase):
        (WebCore::TimerBase::alignedFireTime):

2012-10-08  Andreas Kling  <kling@webkit.org>

        1.18MB below RenderTableSection::setCachedCollapsedBorderValue() on Membuster3.
        <http://webkit.org/b/98670>
        <rdar://problem/12454276>

        Reviewed by Anders Carlsson.

        Refactor CollapsedBorderValue to only store the bits and pieces from the BorderValue
        that it actually needs. Packed the whole thing into 64 bits.

        Reduces memory consumption by 547kB on Membuster3.

        * rendering/RenderTableCell.cpp:

            Add compile-time size assertion for CollapsedBorderValue.

        * rendering/style/CollapsedBorderValue.h:
        (WebCore::CollapsedBorderValue::CollapsedBorderValue):
        (WebCore::CollapsedBorderValue::width):
        (WebCore::CollapsedBorderValue::style):
        (WebCore::CollapsedBorderValue::color):
        (WebCore::CollapsedBorderValue::isTransparent):
        (WebCore::CollapsedBorderValue::precedence):
        (WebCore::CollapsedBorderValue::isSameIgnoringColor):
        (CollapsedBorderValue):

            Apply shrinkwrap to CollapsedBorderValue. Removed specialized copy constructor since
            the class only has primitive members now.

2012-10-08  Yoshifumi Inoue  <yosin@chromium.org>

        HTMLSelectElement::typeAheadFind depends on implementation dependent behavior
        https://bugs.webkit.org/show_bug.cgi?id=98710

        Reviewed by Kent Tamura.

        This patch gets rid of C/C++ implementation dependent behavior from
        HTMLSelectElement::typeAheadFind() which does modulo operation with
        a negative operand.

        HTMLSelectElement::typeAheadFind() contains expression with modulo
        operator and dividend can be -1 when the "select" element without
        "option" element but "optgroup" element.

        Test: fast/forms/select/select-typeahead-crash.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::typeAheadFind): Changed to do modulo
        operation with both operands are non-negative.

2012-10-08  Kent Tamura  <tkent@chromium.org>

        Take account of overflowing values for width calculation of a year sub-field
        https://bugs.webkit.org/show_bug.cgi?id=98506

        Reviewed by Eric Seidel.

        When we decide the width of a year field of an input[type=date]
        with the multiple fields UI, we need to take account of the
        current value width because we allow to set overflowing values to
        the input[type=date].

        This change affects only platforms with INPUT_TYPE_DATE &&
        INPUT_MULTIPLE_FIELDS_UI.

        Test: fast/forms/date-multiple-fields/date-multiple-fields-change-layout-by-value.html

        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::customStyleForRenderer):
        Take account of the current value width.

2012-10-08  Tony Chang  <tony@chromium.org>

        image not displayed in flexbox
        https://bugs.webkit.org/show_bug.cgi?id=98611

        Reviewed by Ojan Vafai.

        Flexbox will override the width of a child and when stretching, will override the height of the child.
        When this happens, when an image loads, it checks to see if it's width/height has
        changed, and if so, does a relayout.  The overridden width/height was preventing this
        relayout from happening.

        To fix, we clear all the override sizes when we're done laying out the flex children.

        Test: css3/flexbox/relayout-image-load.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock): Clear child override sizes.
        (WebCore::RenderFlexibleBox::clearChildOverrideSizes):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes): No longer need to clear the override size
        here since it should have already been cleared.
        * rendering/RenderFlexibleBox.h:

2012-10-08  Andreas Kling  <kling@webkit.org>

        REGRESSION(r130643): editing/pasteboard/data-transfer-item is failing on chromium.
        <http://webkit.org/b/98686>

        Reviewed by Tony Chang.

        Change ChromiumDataObject::createFromPasteboard() to use a ListHashSet instead of a HashSet so that
        item order is preserved.

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::createFromPasteboard):

2012-10-08  Eric Seidel  <eric@webkit.org>

        Inline logicalHeightForRowSizing to shave another 2-3% off robohornet's resizecol.html
        https://bugs.webkit.org/show_bug.cgi?id=98703

        Reviewed by Emil A Eklund.

        This is very small potatoes.  There are much bigger wins for table layout yet, but
        this was an easy win.

        This function should probably be converted to use int's only, as table cells are pixel-sized
        according to our subpixel-experts.

        Also, I suspect there should be ways to early return with less-math in the common cases, but
        I've saved such for a later patch.

        Note that I changed from using paddingBefore/paddingAfter (which include the instrinsic padding)
        to calling computedCSSPaddingBefore/computedCSSPaddingAfter directly as well.

        This single function is about 11% of total time for robohornet's resizecol.

        * rendering/RenderTableCell.cpp:
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::logicalHeightForRowSizing):

2012-10-08  Alec Flett  <alecflett@chromium.org>

        IndexedDB: remove autogenerated objectStore/index id code
        https://bugs.webkit.org/show_bug.cgi?id=98085

        Reviewed by Tony Chang.

        Remove support for backend-generated objectstore and index
        ids. The frontend objects now manage that state during
        versionchange transactions. The IDBDatabaseBackendInterface and
        IDBObjectStoreBackendInterface methods will go away when
        https://bugs.webkit.org/show_bug.cgi?id=98682 lands.

        No new tests as this is part of a refactoring, existing indexeddb
        tests cover correctness.

        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::setMaxIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:

2012-10-08  Jaehun Lim  <ljaehun.lim@samsung.com>

        [CAIRO] Adjust the source rect size when IMAGE_DECODER_DOWN_SAMPLING is enabled
        https://bugs.webkit.org/show_bug.cgi?id=98630

        Reviewed by Martin Robinson.

        IMAGE_DECODER_DOWN_SAMPLING scales down the size of the big image.
        CAIRO needs to adjust the source size to the scaled value.

        No new tests.

        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):

2012-10-08  Adam Barth  <abarth@webkit.org>

        Remove unused features of BlobBuilder
        https://bugs.webkit.org/show_bug.cgi?id=98331

        Reviewed by Eric Seidel.

        Now that we don't expose BlobBuilder as a web platform API, we can
        strip down the class to handle only those cases that are needed by the
        Blob constructor.

        I've also renamed the class from WebKitBlobBuilder to BlobBuilder and
        made it stack allocated rather than RefCounted. A future patch will
        actually move the files around. (I didn't want to mix moving code
        around with modifying the code.)

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/v8/custom/V8BlobCustom.cpp:
        (WebCore::V8Blob::constructorCallback):
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore):
        (WebCore::BlobBuilder::BlobBuilder):
        (WebCore::BlobBuilder::getBuffer):
        (WebCore::BlobBuilder::append):
        (WebCore::BlobBuilder::appendBytesData):
        (WebCore::BlobBuilder::getBlob):
        * fileapi/WebKitBlobBuilder.h:
        (WebCore):
        (BlobBuilder):
        * page/FeatureObserver.h:

2012-10-08  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the debug build after r130699

        Move the assignment of the ResourceHandleInternal local to before
        the include statement where it is used.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupMessageForHandleAndRequest):

2012-10-08  Nate Chapin  <japhet@chromium.org>

        Post-r130226 Cleanup: Comment a complicated if statement and make it a helper.
        https://bugs.webkit.org/show_bug.cgi?id=98463

        Reviewed by Eric Seidel.

        No new tests, refactor only.

        * rendering/RenderLayer.cpp:
        (WebCore::frameElementAndViewPermitScroll):
        (WebCore::RenderLayer::scrollRectToVisible):

2012-10-06  Martin Robinson  <mrobinson@igalia.com>

        [Soup] Simplify the way that requests are started
        https://bugs.webkit.org/show_bug.cgi?id=98532

        Reviewed by Gustavo Noronha Silva.

        Simplify the creation of the libsoup request and message when kicking off
        requests, by elminating a bit of duplicate code.

        No new tests. This should not change any behavior.

        * platform/network/ResourceHandle.h:
        (ResourceHandle):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore):
        (WebCore::ResourceHandleInternal::soupSession): Ensure the session
        is initialized when passing it to the caller.
        (WebCore::createSoupMessageForHandleAndRequest): Added this helper which
        takes care of creating the SoupMessage for HTTP/HTTPS requests.
        (WebCore::createSoupRequestAndMessageForHandle): Collapsed the HTTP and
        non-HTTP request creation into this helper.
        (WebCore::ResourceHandle::start): Call the new helper now and then sendPendingRequest.
        (WebCore::ResourceHandle::sendPendingRequest): Instead of having special
        helpers to create and send the request, duplicating the logic for sending it
        across the file, add this method which can be used in both cases.
        (WebCore::waitingToSendRequest): Reworked the hasBeenSent method to answer
        the question of whether or not the request is ready to be sent, but is unsent.
        (WebCore::ResourceHandle::platformSetDefersLoading): Use the new helper.
        * platform/network/soup/ResourceRequest.h:
        (ResourceRequest): Added a new method for getting the URL string for soup.
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::urlStringForSoup): Added.

2012-10-08  Eric Seidel  <eric@webkit.org>

        Make no-column table-layout cases a little faster with inlining
        https://bugs.webkit.org/show_bug.cgi?id=98566

        Reviewed by Julien Chaffraix.

        This change is almost not worth it at only a couple percent boost on
        http://www.robohornet.org/tests/resizecol.html
        However, I think the logicalWidthFromTableColumn split it kinda nice
        so I've decided to post it anyway.

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::slowColElement):
        * rendering/RenderTable.h:
        (WebCore::RenderTable::colElement):
        (RenderTable):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::logicalWidthFromTableColumn):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::styleOrColLogicalWidth):
        (RenderTableCell):

2012-10-08  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        Rename RenderObject::firstLineStyleSlowCase() to a more appropriate cachedFirstLineStyle()
        https://bugs.webkit.org/show_bug.cgi?id=98631

        Reviewed by Eric Seidel.

        Renaming firstLineStyleSlowCase() to cachedFirstLineStyle().

        The current name is confusing since the function actually gets the
        the cached first-line styles.
        It also makes the name more descriptive of its functionality
        and in accordance with RenderObject::uncachedFirstLineStyle().

        No new tests required for this change since no change in behavior is expected.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::cachedFirstLineStyle):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::firstLineStyle):
        (RenderObject):
        Renamed RenderObject::firstLineStyleSlowCase() to cachedFirstLineStyle()
        and made the associated changes.

2012-10-08  Sami Kyostila  <skyostil@chromium.org>

        Some non-scrollable elements are added to non-fast-scrollable region
        https://bugs.webkit.org/show_bug.cgi?id=97927

        Reviewed by James Robinson.

        Only RenderLayers that can actually be scrolled should be added to the
        ScrollingCoordinator's non-fast scrollable region. Otherwise we may
        needlessly fall back to main thread scrolling.

        Test: ScrollingCoordinatorChromiumTest.clippedBodyTest

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):

2012-10-08  Simon Fraser  <simon.fraser@apple.com>

        Move layerTreeAsText to window.internals
        https://bugs.webkit.org/show_bug.cgi?id=98690

        Reviewed by James Robinson.

        Add window.internals.layerTreeAsText(document), and change the tests to use it.
        I'll remove testRunner.layerTreeAsText() in a later patch.

        * testing/Internals.cpp:
        (WebCore::Internals::layerTreeAsText):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2012-10-08  Jon Lee  <jonlee@apple.com>

        Add render object that paints plugin snapshots
        https://bugs.webkit.org/show_bug.cgi?id=98322
        <rdar://problem/12426546>

        Reviewed by Simon Fraser.

        First, teach plugins to maintain a set of states when plugin snapshotting is enabled.

        Second, a new RenderSnapshottedPlugIn class is a RenderEmbeddedObject that knows how to paint
        snapshots when the plugin is not visibly playing. It maintains a RenderImageResource to
        the generated poster image.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): By default all plugins play on load.
        * html/HTMLPlugInElement.h: Move the inheritance of ImageLoaderClientBase down to
        HTMLPlugInImageElement, since that is the class that actually deals with image-based plugins.
        (WebCore::HTMLPlugInElement::displayState): Add bit for display state.
        (WebCore::HTMLPlugInElement::setDisplayState):
        (WebCore::HTMLPlugInElement::updateSnapshot):

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): If plugin snapshotting is
        enabled, plugin state is set to wait for a poster image.
        (WebCore::HTMLPlugInImageElement::createRenderer): Create RenderSnapshottedPlugIn if
        plugin snapshotting is enabled.
        (WebCore::HTMLPlugInImageElement::updateSnapshot): Once a snapshot is available, update the
        renderer and set its state to wait for user input to start the plugin.
        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement):

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSnapshottedPlugIn): Add new function to identify
        RenderSnapshottedPlugIn instances. Since RenderSnapshottedPlugIn inherits from
        RenderEmbeddedObject, isEmbeddedObject() still returns true.
        * rendering/RenderEmbeddedObject.h:
        (RenderEmbeddedObject): Elevate a few virtual methods to protected for
        RenderSnapshottedPlugIn to override.

        * rendering/RenderSnapshottedPlugIn.cpp: Added.
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn): Initialize snapshot
        resource.
        (WebCore::RenderSnapshottedPlugIn::~RenderSnapshottedPlugIn): Shut down snapshot
        image resource to remove the renderer as a client, and remove image from memory cache.
        (WebCore::RenderSnapshottedPlugIn::plugInImageElement): Convenience function to get the
        HTML element.
        (WebCore::RenderSnapshottedPlugIn::updateSnapshot): Cache the snapshot, and repaint.
        (WebCore::RenderSnapshottedPlugIn::paint): If the plugin is not playing, paint like a
        RenderImage does.
        (WebCore::RenderSnapshottedPlugIn::paintReplaced): Paint the snapshot and overlay if the
        plugin is not playing.
        (WebCore::RenderSnapshottedPlugIn::paintReplacedSnapshot): Inspired by
        RenderImage::paintReplaced() and RenderImage::paintIntoRect().
        * rendering/RenderSnapshottedPlugIn.h: Added.
        (WebCore::RenderSnapshottedPlugIn::isSnapshottedPlugin): Returns true.

        * rendering/RenderTheme.h: Add a function that paints the overlay on top of the snapshot.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintPlugInSnapshotOverlay):

        * WebCore.xcodeproj/project.pbxproj: Add new RenderSnapshottedPlugIn class.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.list.am: Ditto.
        * Target.pri: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * rendering/RenderingAllInOne.cpp: Ditto.

2012-10-08  Hans Muller  <hmuller@adobe.com>

        [CSS Exclusions] Add support for polygonal shapes
        https://bugs.webkit.org/show_bug.cgi?id=96811

        Reviewed by Dirk Schulze.

        Initial version of the layout support for polygonal exclusion shapes: the ExclusionPolygon class.
        Supports the public ExclusionShape operations using the algorithm described here:
        http://hansmuller-webkit.blogspot.com/2012/06/horizontal-box-polygon-intersection-for.html.
        Although both the "included" and "excluded" operations are supported, only the former is
        used, since only shape-inside is supported at the moment.

        The ExclusionPolygon class stores the polygon's edges in an interval tree.

        Polygon edges are represented by the ExclusionPolygonEdge struct, which records the indices of
        the pair of vertices joined by the edge.  Edge vertex index1 is usually less than index2, except
        the last edge where index2 is 0.  We plan to improve the algorithm that creates the edges
        by spanning vertices contained in sequences of more than two colinear vertices. For example,
        a triangular polygon might be specified with 5 vertices like this: 3,0 5,0, 5,5, 4,4 2,2, 0,0.
        By spanning the extra colinear points: 0,0 5,0, 5,5, which implies index1-index2 edges: 5-1 1-2 2-5.

        Although the implementation supports complex polygons, the layout code is limited to
        essentially rectangular shapes until a patch for https://bugs.webkit.org/show_bug.cgi?id=96813
        lands.

        Tests: fast/exclusions/shape-inside/shape-inside-polygon-rectangle.html
               fast/exclusions/shape-inside/shape-inside-simple-polygon-001.html
               fast/exclusions/shape-inside/shape-inside-simple-polygon-002.html
               fast/exclusions/shape-inside/shape-inside-simple-polygon-003.html
               fast/exclusions/shape-inside/shape-inside-simple-polygon-004.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/ExclusionPolygon.cpp: Added.
        (WebCore):
        (EdgeIntersection): Internal description of the intersection of a polygon edge and a horizontal line.
        (WebCore::ExclusionPolygon::ExclusionPolygon): See the introductory text above for a description of this type.
        (WebCore::computeXIntersection): Find and classify the X intercept of a polygon edge with horizontal line, if any.
        (WebCore::ExclusionPolygon::rightVertexY): This method is used to decide if a horizontal line "crosses" a vertex.
        (WebCore::appendIntervalX): Append an x coordinate to a vector of ExclusionIntervals.
        (WebCore::ExclusionPolygon::computeXIntersections): Return a vector of the intersections of a horizontal line with the polygon's edges.
        (WebCore::ExclusionPolygon::computeEdgeIntersections): Return a vector of the X projections of the edges that overlap a horizonal rectangle.
        (WebCore::ExclusionPolygon::getExcludedIntervals): Return a SegmentList of the X intervals within a horizontal rectangle that overlap the polygon.
        (WebCore::ExclusionPolygon::getIncludedIntervals): Return the X intervals within a horizontal rectangle that fit inside the polygon.
        * rendering/ExclusionPolygon.h: Added.
        (WebCore):
        (ExclusionPolygon):
        (WebCore::ExclusionPolygon::getXAt): X coordinate of a polygon vertex
        (WebCore::ExclusionPolygon::getYAt): Y coordinate of a polygon vertex
        (WebCore::ExclusionPolygon::numberOfVertices):
        (WebCore::ExclusionPolygon::fillRule): A WindRule value that defines "inside" for self-intersecting polygons.
        (ExclusionPolygonEdge):
        (WebCore::ExclusionPolygonEdge::ExclusionPolygonEdge):
        (WebCore::ExclusionPolygonEdge::vertex1):
        (WebCore::ExclusionPolygonEdge::vertex2):
        (WebCore::ExclusionPolygonEdge::minX):
        (WebCore::ExclusionPolygonEdge::minY):
        (WebCore::ExclusionPolygonEdge::maxX):
        (WebCore::ExclusionPolygonEdge::maxY):
        * rendering/ExclusionShape.cpp:
        (WebCore::createExclusionPolygon): Return a new ExclusionPolygon.
        (WebCore):
        (WebCore::ExclusionShape::createExclusionShape): Added support for BasicShape::BASIC_SHAPE_POLYGON.
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::isExclusionShapeInsideInfoEnabledForRenderBlock): Enable BASIC_SHAPE_POLYGON shapes for RenderBlocks.

2012-10-08  Tony Chang  <tony@chromium.org>

        Replace 2 uses of updateLogicalHeight with computeLogicalHeight
        https://bugs.webkit.org/show_bug.cgi?id=98677

        Reviewed by Ojan Vafai.

        This is part of bug 96804.  Convert RenderTextControl and RenderSVGForeignObject to
        override the const computeLogicalHeight method rather than the updateLogicalHeight
        setter method.

        No new tests, there should be no behavior change as this is just a refactor.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight): Pass logicalHeight through rather than setting height.
        This is a slight correctness fix, although we don't support vertical inputs yet.
        * rendering/RenderTextControl.h:
        (RenderTextControl):
        * rendering/svg/RenderSVGForeignObject.cpp:
        (WebCore::RenderSVGForeignObject::computeLogicalHeight):
        * rendering/svg/RenderSVGForeignObject.h:
        (RenderSVGForeignObject):

2012-10-08  Min Qin  <qinmin@chromium.org>

        Upstream some tweaks for overlay play button on Android
        https://bugs.webkit.org/show_bug.cgi?id=98671

        Reviewed by Adam Barth.

        This change stops displaying the overlay play button if video height is too small
        No test for this. Will rebase layout test expectations for android later.

        * css/mediaControlsChromiumAndroid.css:
        (video::-webkit-media-controls-overlay-enclosure):

2012-10-08  Simon Fraser  <simon.fraser@apple.com>

        Some GraphicsLayer cleanup to separate the concepts of using a tile cache, and being the main tile cache layer
        https://bugs.webkit.org/show_bug.cgi?id=98574

        Reviewed by Dean Jackson.

        GraphicsLayerCA assumed that using a TileCache equated to being the main page tile
        cache layer, which has some special considerations. Make these two concepts separate
        to get closer to being able to use TileCaches in place of CATiledLayer.

        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer): Remove m_usingTileCache member, which was not appropriate
        for this class to have.
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer): Remove init of m_usingTileCache.
        (WebCore::GraphicsLayer::debugBorderInfo): Can no longer use m_usingTileCache to
        get the blue color, so moved code into a virtual debugBorderInfo() method.
        (WebCore::GraphicsLayer::updateDebugIndicators): Call the virtual debugBorderInfo().
        * platform/graphics/GraphicsLayerClient.h: Remove the usingTileCache() callback;
        we now just cache this information in the GraphicsLayerCA on creation.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::GraphicsLayerCA): Init m_isPageTileCacheLayer to false,
        then set to m_isPageTileCacheLayer if the client says we should create a tile cache.
        (WebCore::GraphicsLayerCA::platformCALayerShowRepaintCounter): Overidden to avoid duplicate repaint
        counters in the top-left tile.
        (WebCore::GraphicsLayerCA::updateLayerBackgroundColor): If this layer is the page tile cache layer,
        we allow setting of its background color.
        (WebCore::GraphicsLayerCA::debugBorderInfo): Overidden to use a blue color for tiles.
        (WebCore::GraphicsLayerCA::requiresTiledLayer): Don't make CATiledLayers for the page tile cache.
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/ca/PlatformCALayerClient.h:
        (PlatformCALayerClient): Need to pass the platform layer into platformCALayerShowRepaintCounter()
        so we can distinguish between calls for tiles, and calls for the tile cache layer itself.
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::shouldShowRepaintCounters): Pass 0 to platformCALayerShowRepaintCounter() to
        indicate that we're asking about a tile.
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents): Now we can just rely on platformCALayerShowRepaintCounter() to tell us whether
        to draw the repaint counter.
        (-[WebLayer setNeedsDisplayInRect:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplayInRect:]):
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::usingTileCache):
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::documentBackgroundColorDidChange): We can ask the RenderLayerBacking
        whether it's for the tile cache, rather than going to the GraphicsLayer.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerShowRepaintCounter):

2012-10-08  Huang Dongsung  <luxtella@company100.net>

        [Qt] Make ImageBufferQt use premultiplied converting functions in Color.h instead of its own mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=98582

        Reviewed by Eric Seidel.

        Only Qt port failed canvas/philip/tests/2d.imageData.put.unchanged.html because
        ImageBufferQt converts from or to a premultiplied color using its own code. When
        we convert twice from an unmultiplied color to a premultiplied color and then to
        an unmultiplied color using this code, the calculated result are pretty
        different against the input color. It is why Gtk passes this test although Qt
        fails. Gtk port uses them in Color.h.

        In addition, Qt should use the functions in Color.h to reduce duplicated codes.

        Tests: canvas/philip/tests/2d.imageData.put.unchanged.html: Fixed a test case

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        (WebCore::convertBGRAToRGBA):
        (WebCore::ImageBuffer::putByteArray):

2012-10-08  Tab Atkins  <jackalmage@gmail.com>

        Remove "orphaned units" quirk
        https://bugs.webkit.org/show_bug.cgi?id=98553

        Reviewed by Eric Seidel.

        This patch removes our "orphaned units" quirk.
        We have an "orphaned units" quirk to match IE, which allows things like "width: 20 px;".
        But FF and Opera don't have it and aren't aware of bugs for it,
        and it's not in Simon Pieters' Quirks Mode spec <http://dvcs.w3.org/hg/quirks-mode/raw-file/tip/Overview.html>

        No new tests, because I'm killing a quirk.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSParser.h:
        (CSSParser):

2012-10-08  Robert Hogan  <robert@webkit.org>

        Border, margin and padding of an inline's inline ancestors counted twice
        https://bugs.webkit.org/show_bug.cgi?id=63074

        Reviewed by David Hyatt.

        In a line such as '<span><span><img>Text' the border, padding and margin belonging
        to the two spans was counted twice by RenderBlockLineLayout::nextLineBreak(): once
        when adding the width of the <img> object to the line, and a second time when adding
        the 'Text'. The result was that nextLineBreak() now had a length for the line that 
        exceeded the line's maximum length and inserted a bogus line break.

        This all happened because the helper function that is used to add in the border etc.
        from inline ancestors was crawling up the tree each time. It doesn't need to do that, it
        should stop crawling up the tree when the current object is not the first or last sibling below a parent.

        Test: fast/inline/bpm-inline-ancestors.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::shouldAddBorderPaddingMargin): Broke this check out into a helper function so that it 
        can help inlineLogicalWidth() return early and also treat empty RenderTexts the same as no previous/next
        sibling on the line. This ensures that collapsed leading space does not interfere with the decision to
        crawl up the ancestors accumulating border, padding, and margin.
        (WebCore):
        (WebCore::inlineLogicalWidth): Return early once the current child is no longer on the edge of its line - 
        this ensures the border, padding and margin of ancestors is not counted twice. 

2012-10-08  Mike West  <mkwst@chromium.org>

        Null-check for DOMWindow before feeding it to FeatureObserver.
        https://bugs.webkit.org/show_bug.cgi?id=98624

        Reviewed by Adam Barth.

        We shouldn't call out to FeatureObserver in
        ContentSecurityPolicy::didReceiveHeader if the policy's document doesn't
        have a DOMWindow.

        Test: http/tests/security/contentSecurityPolicy/xmlhttprequest-protected-resource-does-not-crash.html

        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
            Null check 'document->domWindow' before passing it on.
        * page/FeatureObserver.cpp:
        (WebCore::FeatureObserver::observe):
            ASSERT 'domWindow'.

2012-10-08  Nate Chapin  <japhet@chromium.org>

        Loader cleanup : Simplify FrameLoader/DocumentLoader setupForReplace()
        https://bugs.webkit.org/show_bug.cgi?id=49072

        Reviewed by Eric Seidel.

        This patch contains one small known behavior change: multipart/x-mixed-replace main resources with text/html parts
        will no longer load the text/html progressively. In practice, loading the html progressively causes the document
        to get cleared as soon as the next part's data starts arriving, which leads to a blank page most of the time. This case
        seems to be pathological, as IE, FF, Opera and WebKit all do something different currently. This patch will cause
        us to behave like Firefox, which is the most sane of the current behaviors.

        Test: http/tests/multipart/multipart-html.php

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData): Use isMultipartReplacingLoad() helper.
        (WebCore::DocumentLoader::receivedData):
        (WebCore::DocumentLoader::setupForReplace): Renamed from setupForReplaceByMIMEType(). Call maybeFinishLoadingMultipartContent()
            instead of doing identical work inline. After we call frameLoader()->setReplacing(), we will never load progressively, so remove
            the if (doesProgressiveLoad(newMIMEType)) {} block.
        (WebCore::DocumentLoader::isMultipartReplacingLoad):
        (WebCore::DocumentLoader::maybeFinishLoadingMultipartContent): Inline the old DocumentLoader::setupForeReplace(), check
            frameLoader()->isReplacing() instead of the delete doesProgressiveLoad().
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setupForReplace): Move all calls to revertToProvisionalState here.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse): Call setupForReplace(), renamed from setupForReplaceByMIMEType().

2012-10-08  Zoltan Horvath  <zoltan@webkit.org>

        [Qt] r122720 causes performance regression with DirectFB on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=97548

        Reviewed by Jocelyn Turcotte.

        Revert the rest of r122720. This change modifies the NativeImagePtr from QImage* to QPixmap*.

        Covered by existing tests.

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::assignToHTMLImageElement):
        (JSC::Bindings::QtPixmapRuntime::toQt):
        * platform/DragImage.h:
        (WebCore):
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/Image.h:
        (Image):
        * platform/graphics/NativeImagePtr.h:
        (WebCore):
        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerQt.cpp:
        (ImageGStreamer::ImageGStreamer):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::pushTransparencyLayerInternal):
        (WebCore::GraphicsContext::beginPlatformTransparencyLayer):
        (WebCore::GraphicsContext::endPlatformTransparencyLayer):
        * platform/graphics/qt/ImageBufferDataQt.h:
        (ImageBufferData):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore):
        (WebCore::ImageBufferData::toQImage):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::platformTransformColorSpace):
        (WebCore::getImageData):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageFrame::asNewNativeImage):
        * platform/graphics/qt/ImageQt.cpp:
        (graphics):
        (loadResourcePixmap):
        (WebCore::Image::loadPlatformResource):
        (WebCore::Image::setPlatformResource):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::create):
        * platform/graphics/qt/PatternQt.cpp:
        (WebCore::Pattern::createPlatformPattern):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::StillImage):
        (WebCore::StillImage::~StillImage):
        (WebCore::StillImage::currentFrameHasAlpha):
        (WebCore::StillImage::size):
        (WebCore::StillImage::nativeImageForCurrentFrame):
        (WebCore::StillImage::draw):
        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::create):
        (WebCore::StillImage::createForRendering):
        (StillImage):
        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):
        (TransparencyLayer):
        * platform/graphics/surfaces/qt/GraphicsSurfaceQt.cpp:
        (WebCore::GraphicsSurface::createReadOnlyImage):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::updateContents):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::createDragImage):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        * platform/qt/CursorQt.cpp:
        (WebCore::createCustomCursor):
        * platform/qt/DragImageQt.cpp:
        (WebCore::createDragImageFromImage):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):

2012-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header file to compilation.

2012-10-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130619.
        http://trac.webkit.org/changeset/130619
        https://bugs.webkit.org/show_bug.cgi?id=98634

        Causes many crashes on the EFL bots. (Requested by rakuco on
        #webkit).

        * platform/RunLoop.h:
        (RunLoop):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::wakeUpEvent):
        (WebCore::RunLoop::wakeUp):

2012-10-08  Byungwoo Lee  <bw80.lee@samsung.com>

        [EFL] Use ecore_main_loop_thread_safe_call_async() to wakeup main loop.
        https://bugs.webkit.org/show_bug.cgi?id=98505

        Reviewed by Kenneth Rohde Christiansen.

        Instead of ecore_pipe_write(),
        use ecore_main_loop_thread_safe_call_async() to wakeup ecore main loop.

        According to the EFL API document, this function is designed to dispatch
        a function on ecore main loop by avoiding dead lock or race condition. 
        With this function, webkit doesn't need to maintain ecore pipe also.

        No new tests. The function to wakeup main loop is changed.

        * platform/RunLoop.h:
        (RunLoop):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::wakeUpEvent):
        (WebCore::RunLoop::wakeUp):

2012-10-07  Arpita Bahuguna  <arpitabahuguna@gmail.com>

        :first-line pseudo selector ignoring words created from :before
        https://bugs.webkit.org/show_bug.cgi?id=80794

        Reviewed by Daniel Bates.

        The :first-line pseudo-element style is not applied for content
        which is generated from the :before/:after pseudo-elements.

        Test: fast/css/first-line-style-for-before-after-content.html

        * rendering/RenderObject.cpp:
        (WebCore::firstLineStyleForCachedUncachedType):
        Added a new static helper function incorporating the common
        functionality of both uncachedFirstLineStyle() and firstLineStyleSlowCase()
        functions. It also modifies the functionality to handle the
        scenario when :first-line style needs to be applied on content
        generated from :before/:after.

        While getting the :first-line style we should also consider the case
        when the content is generated from a :before/:after pseudo-element in
        which case the RenderInline's parent should be considered for
        obtaining the first-line style.

        (WebCore):
        (WebCore::RenderObject::uncachedFirstLineStyle):
        (WebCore::RenderObject::firstLineStyleSlowCase):
        Moved the duplicate code between the two functions to the common
        helper function firstLineStyleForCachedUncachedType().

2012-10-07  Peter Wang  <peter.wang@torchmobile.com.cn>

        Web Inspector: The front-end should provide the position in original source file when set a breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=93473

        Reviewed by Yury Semikhatsky.

        Since frontend truncates the indent, the first statement in a line must match the breakpoint (line, 0).
        With this patch JSC debugger can support both normal and "Pretty Print" mode.

        No new test case. This patch can be verified with cases in "LayoutTests/inspector/debugger/".

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::createCallFrameAndPauseIfNeeded):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        (ScriptDebugServer):

2012-10-07  Martin Robinson  <mrobinson@igalia.com>

        [Soup] Clean up ResourceError creation
        https://bugs.webkit.org/show_bug.cgi?id=98521

        Reviewed by Carlos Garcia Campos.

        Simplify the creation of ResourcErrors in ResourceHandleSoup. This is
        part of a process to make the libsoup networking backend more hackable.

        No new tests. This shouldn't change functionality.

        * GNUmakefile.list.am: Added new file.
        * PlatformEfl.cmake: Added new file.
        * platform/network/soup/ResourceError.h:
        (ResourceError): Added new factories.
        * platform/network/soup/ResourceErrorSoup.cpp: Added.
        (WebCore::failingURI): Added this helper.
        (WebCore::ResourceError::httpError): New factory.
        (WebCore::ResourceError::genericIOError): Ditto.
        (WebCore::ResourceError::tlsError): Ditto.
        (WebCore::ResourceError::timeoutError): Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::handleUnignoredTLSErrors): Created this helper which merges
        some of the logic from sendRequestCallback.
        (WebCore::sendRequestCallback): Use the new helper.
        (WebCore::requestTimeoutCallback): Use the new factory.

2012-10-07  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Rename first/second to key/value in HashMap iterators
        https://bugs.webkit.org/show_bug.cgi?id=82784

        Reviewed by Eric Seidel.

        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Watchers::find):
        (WebCore::Geolocation::Watchers::remove):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStoreNames):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::metadata):
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::deleteDatabase):
        (WebCore::IDBFactoryBackendImpl::openBackingStore):
        (WebCore::IDBFactoryBackendImpl::open):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::deleteIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::metadata):
        (WebCore::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::objectStoreDeleted):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::dispatchEvent):
        * Modules/mediastream/MediaConstraintsImpl.cpp:
        (WebCore::MediaConstraintsImpl::getMandatoryConstraints):
        (WebCore::MediaConstraintsImpl::getMandatoryConstraintValue):
        * Modules/webdatabase/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::performOpenAndVerify):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        * Modules/webdatabase/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::diskUsage):
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::acquireLock):
        (WebCore::SQLTransactionCoordinator::releaseLock):
        (WebCore::SQLTransactionCoordinator::shutdown):
        * Modules/webdatabase/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        * Modules/webdatabase/chromium/QuotaTracker.cpp:
        (WebCore::QuotaTracker::getDatabaseSizeAndSpaceAvailableToOrigin):
        (WebCore::QuotaTracker::updateDatabaseSize):
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        (WebCore::WebSocketExtensionDeflateFrame::processResponse):
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::appendAcceptedExtension):
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        * bindings/gobject/DOMObjectCache.cpp:
        (WebKit::DOMObjectCache::clearByFrame):
        * bindings/js/DOMObjectHashTableMap.h:
        (WebCore::DOMObjectHashTableMap::~DOMObjectHashTableMap):
        (WebCore::DOMObjectHashTableMap::get):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::cacheDOMStructure):
        * bindings/js/JSDOMGlobalObject.cpp:
        (WebCore::JSDOMGlobalObject::visitChildren):
        * bindings/js/JSDOMGlobalObject.h:
        (WebCore::getDOMConstructor):
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        * bindings/js/ScriptCachedFrameData.cpp:
        (WebCore::ScriptCachedFrameData::ScriptCachedFrameData):
        (WebCore::ScriptCachedFrameData::restore):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::clearWindowShell):
        (WebCore::ScriptController::attachDebugger):
        (WebCore::ScriptController::updateDocument):
        (WebCore::ScriptController::createRootObject):
        (WebCore::ScriptController::collectIsolatedContexts):
        (WebCore::ScriptController::cleanupScriptObjectsForPlugin):
        (WebCore::ScriptController::clearScriptObjects):
        * bindings/js/ScriptController.h:
        (WebCore::ScriptController::windowShell):
        (WebCore::ScriptController::existingWindowShell):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::checkForDuplicate):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateImplementation):
        * bindings/scripts/test/V8/V8Float64Array.cpp:
        (WebCore::V8Float64Array::GetRawTemplate):
        (WebCore::V8Float64Array::GetTemplate):
        * bindings/scripts/test/V8/V8TestActiveDOMObject.cpp:
        (WebCore::V8TestActiveDOMObject::GetRawTemplate):
        (WebCore::V8TestActiveDOMObject::GetTemplate):
        * bindings/scripts/test/V8/V8TestCustomNamedGetter.cpp:
        (WebCore::V8TestCustomNamedGetter::GetRawTemplate):
        (WebCore::V8TestCustomNamedGetter::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventConstructor.cpp:
        (WebCore::V8TestEventConstructor::GetRawTemplate):
        (WebCore::V8TestEventConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestEventTarget.cpp:
        (WebCore::V8TestEventTarget::GetRawTemplate):
        (WebCore::V8TestEventTarget::GetTemplate):
        * bindings/scripts/test/V8/V8TestException.cpp:
        (WebCore::V8TestException::GetRawTemplate):
        (WebCore::V8TestException::GetTemplate):
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        (WebCore::V8TestInterface::GetRawTemplate):
        (WebCore::V8TestInterface::GetTemplate):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::V8TestMediaQueryListListener::GetRawTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        * bindings/scripts/test/V8/V8TestNamedConstructor.cpp:
        (WebCore::V8TestNamedConstructor::GetRawTemplate):
        (WebCore::V8TestNamedConstructor::GetTemplate):
        * bindings/scripts/test/V8/V8TestNode.cpp:
        (WebCore::V8TestNode::GetRawTemplate):
        (WebCore::V8TestNode::GetTemplate):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::V8TestObj::GetRawTemplate):
        (WebCore::V8TestObj::GetTemplate):
        * bindings/scripts/test/V8/V8TestSerializedScriptValueInterface.cpp:
        (WebCore::V8TestSerializedScriptValueInterface::GetRawTemplate):
        (WebCore::V8TestSerializedScriptValueInterface::GetTemplate):
        * bindings/v8/DOMWrapperWorld.cpp:
        (WebCore::DOMWrapperWorld::deallocate):
        (WebCore::DOMWrapperWorld::ensureIsolatedWorld):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::freeV8NPObject):
        (WebCore::npCreateV8ScriptObject):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::clearScriptObjects):
        (WebCore::ScriptController::resetIsolatedWorlds):
        (WebCore::ScriptController::ensureIsolatedWorldContext):
        (WebCore::ScriptController::existingWindowShellInternal):
        (WebCore::ScriptController::evaluateInIsolatedWorld):
        (WebCore::ScriptController::setIsolatedWorldSecurityOrigin):
        (WebCore::ScriptController::cleanupScriptObjectsForPlugin):
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::removeIfPresent):
        (WebCore::WeakReferenceMap::visit):
        * bindings/v8/V8PerContextData.cpp:
        (WebCore::V8PerContextData::dispose):
        * bindings/v8/npruntime.cpp:
        * bridge/IdentifierRep.cpp:
        (WebCore::IdentifierRep::get):
        * bridge/NP_jsobject.cpp:
        (ObjectMap::add):
        (ObjectMap::remove):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasChanged):
        (WebCore::CSSCanvasValue::canvasResized):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::counterToCSSValue):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::crossfadeChanged):
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontData):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::removeClient):
        (WebCore::CSSImageGeneratorValue::getImage):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::parsePseudoType):
        * css/CSSValuePool.cpp:
        (WebCore::CSSValuePool::createColorValue):
        (WebCore::CSSValuePool::createFontFamilyValue):
        (WebCore::CSSValuePool::createFontFaceValue):
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
        * css/RuleSet.cpp:
        (WebCore::reportAtomRuleMap):
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::shrinkMapVectorsToFit):
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyCounter::applyInheritValue):
        (WebCore::ApplyPropertyCounter::applyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::collectFeatures):
        (WebCore::StyleResolver::ruleSetForScope):
        (WebCore::StyleResolver::appendAuthorStylesheets):
        (WebCore::StyleResolver::sweepMatchedPropertiesCache):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parserAddNamespace):
        (WebCore::StyleSheetContents::determineNamespace):
        * dom/CheckedRadioButtons.cpp:
        (WebCore::CheckedRadioButtons::addButton):
        (WebCore::CheckedRadioButtons::removeButton):
        * dom/ChildListMutationScope.cpp:
        (WebCore::ChildListMutationAccumulator::getOrCreate):
        * dom/Document.cpp:
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        (WebCore::Document::getCSSCanvasElement):
        (WebCore::Document::cachedImmutableAttributeData):
        (WebCore::Document::getCachedLocalizer):
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::invalidateRenderedRectsForMarkersInRect):
        (WebCore::DocumentMarkerController::showMarkers):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::remove):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::pageGroupUserSheets):
        * dom/ElementAttributeData.cpp:
        (WebCore::ensureAttrListForElement):
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedTargetAdjuster::findRelatedTarget):
        * dom/IdTargetObserverRegistry.cpp:
        (WebCore::IdTargetObserverRegistry::addObserver):
        (WebCore::IdTargetObserverRegistry::removeObserver):
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::isOldValueRequested):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Node::clearRareData):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::collectMatchingObserversForMutation):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::adoptTreeScope):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::adjustMinimumTimerInterval):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorQueryCache::add):
        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitStringData::create):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::updateAttributeStyle):
        * editing/mac/AlternativeTextUIController.mm:
        (WebCore::AlternativeTextUIController::AlernativeTextContextController::alternativesForContext):
        * html/FormController.cpp:
        (WebCore::SavedFormState::serializeTo):
        (WebCore::SavedFormState::appendControlState):
        (WebCore::SavedFormState::takeControlState):
        (WebCore::SavedFormState::getReferencedFilePaths):
        (WebCore::FormKeyGenerator::formKey):
        (WebCore::FormController::createSavedFormStateMap):
        (WebCore::FormController::formElementsState):
        (WebCore::FormController::takeStateForFormElement):
        (WebCore::FormController::getReferencedFilePaths):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollectionCacheBase::append):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::getAttachment):
        (WebCore::WebGLFramebuffer::removeAttachmentFromBoundFramebuffer):
        (WebCore::WebGLFramebuffer::checkStatus):
        (WebCore::WebGLFramebuffer::deleteObjectImpl):
        (WebCore::WebGLFramebuffer::initializeAttachments):
        * inspector/CodeGeneratorInspector.py:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        (WebCore::DOMPatchSupport::removeChildAndMoveToNew):
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptForId):
        (WebCore::InjectedScriptManager::injectedScriptIdFor):
        (WebCore::InjectedScriptManager::discardInjectedScriptsFor):
        (WebCore::InjectedScriptManager::releaseObjectGroup):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::commitSelector):
        (WebCore::SelectorProfile::commitSelectorTime):
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::UpdateRegionLayoutTask::onTimer):
        (WebCore::InspectorCSSAgent::forcePseudoState):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::assertStyleSheetForId):
        (WebCore::InspectorCSSAgent::didRemoveDOMNode):
        (WebCore::InspectorCSSAgent::didModifyDOMAttr):
        (WebCore::InspectorCSSAgent::resetPseudoStates):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::stopTiming):
        (WebCore::InspectorConsoleAgent::count):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForId):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::getSearchResults):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::clearFrontend):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageResourceForId):
        (WebCore::InspectorDOMStorageAgent::didUseDOMStorage):
        (WebCore::InspectorDOMStorageAgent::memoryBytesUsedByStorageCache):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::databaseId):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::cachedResourcesForFrame):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::frameDetached):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore):
        (WebCore::InspectorProfilerAgent::getProfile):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForHeaders):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::documentThreadableLoaderStartedLoadingForClient):
        (WebCore::InspectorResourceAgent::willLoadXHR):
        (WebCore::InspectorResourceAgent::replayXHR):
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::getBoolean):
        (WebCore::InspectorState::getString):
        (WebCore::InspectorState::getLong):
        (WebCore::InspectorState::getDouble):
        (WebCore::InspectorState::getObject):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObjectBase::get):
        (WebCore::InspectorObjectBase::writeJSON):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::workerContextTerminated):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannelsForExistingWorkers):
        (WebCore::InspectorWorkerAgent::destroyWorkerFrontendChannels):
        * inspector/MemoryInstrumentationImpl.cpp:
        (WebCore::MemoryInstrumentationClientImpl::countObjectSize):
        * inspector/MemoryInstrumentationImpl.h:
        (WebCore::MemoryInstrumentationClientImpl::totalSize):
        (WebCore::MemoryInstrumentationClientImpl::reportedSizeForAllTypes):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::setXHRReplayData):
        (WebCore::NetworkResourcesData::removeCachedResource):
        (WebCore::NetworkResourcesData::clear):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isSimpleCrossOriginAccessRequest):
        (WebCore::createAccessControlPreflightRequest):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::getSubresources):
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveResponse):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::removeResource):
        (WebCore::ApplicationCache::clearStorageID):
        (WebCore::ApplicationCache::dump):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::ApplicationCacheGroup::addEntry):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::fillResourceList):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::estimatedSizeInStorage):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::findOrCreateCacheGroup):
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::empty):
        (WebCore::ApplicationCacheStorage::storeCopyOfCache):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::canReuse):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        * loader/cache/CachedResourceClientWalker.h:
        (WebCore::CachedResourceClientWalker::CachedResourceClientWalker):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::reloadImagesIfNotDeferred):
        (WebCore::CachedResourceLoader::removeCachedResource):
        (WebCore::CachedResourceLoader::garbageCollectDocumentResources):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeResourcesWithOrigin):
        (WebCore::MemoryCache::getOriginsWithCache):
        (WebCore::MemoryCache::getStatistics):
        (WebCore::MemoryCache::setDisabled):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::removeAllIcons):
        (WebCore::IconDatabase::iconRecordCountWithData):
        (WebCore::IconDatabase::performPendingRetainAndReleaseOperations):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents):
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::pageGroup):
        (WebCore::PageGroup::closeLocalStorage):
        (WebCore::PageGroup::clearLocalStorageForAllOrigins):
        (WebCore::PageGroup::clearLocalStorageForOrigin):
        (WebCore::PageGroup::syncLocalStorage):
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::urlForBlankFrame):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::addOriginAccessWhitelistEntry):
        (WebCore::SecurityPolicy::removeOriginAccessWhitelistEntry):
        * page/Settings.cpp:
        (WebCore::setGenericFontFamilyMap):
        (WebCore::getGenericFontFamilyForScript):
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::registerListener):
        * page/TouchDisambiguation.cpp:
        (WebCore::findGoodTouchTargets):
        * page/WindowFeatures.cpp:
        (WebCore::WindowFeatures::boolFeature):
        (WebCore::WindowFeatures::floatFeature):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateAnimations):
        (WebCore::AnimationControllerPrivate::suspendAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::resumeAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::numberOfActiveAnimations):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::clearRenderer):
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::animate):
        (WebCore::CompositeAnimation::getAnimatedStyle):
        (WebCore::CompositeAnimation::setAnimating):
        (WebCore::CompositeAnimation::timeToNextService):
        (WebCore::CompositeAnimation::getAnimationForProperty):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        (WebCore::CompositeAnimation::overrideImplicitAnimations):
        (WebCore::CompositeAnimation::resumeOverriddenImplicitAnimations):
        (WebCore::CompositeAnimation::isAnimatingProperty):
        (WebCore::CompositeAnimation::numberOfActiveAnimations):
        * platform/Language.cpp:
        (WebCore::languageDidChange):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getNormalizedMIMEType):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::getConcatenatedImpulseResponsesForSubject):
        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::generateHtmlFragmentForCookies):
        (WebCore::CookieManager::removeAllCookies):
        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::removeOldestCookie):
        (WebCore::CookieMap::getAllChildCookies):
        * platform/cf/BinaryPropertyList.cpp:
        (WebCore::BinaryPropertyListPlan::writeIntegerArray):
        * platform/chromium/support/WebHTTPLoadInfo.cpp:
        (WebKit::addHeader):
        * platform/chromium/support/WebURLRequest.cpp:
        (WebKit::WebURLRequest::visitHTTPHeaderFields):
        * platform/chromium/support/WebURLResponse.cpp:
        (WebKit::WebURLResponse::addHTTPHeaderField):
        (WebKit::WebURLResponse::visitHTTPHeaderFields):
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitorManager::ensureMonitorForClient):
        (WebCore::DisplayRefreshMonitorManager::unregisterClient):
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::getVerticalData):
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::releaseFontData):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::treeGlyphPageCount):
        (WebCore::GlyphPageTreeNode::pageCount):
        (WebCore::GlyphPageTreeNode::pruneTreeCustomFontData):
        (WebCore::GlyphPageTreeNode::pruneTreeFontData):
        (WebCore::GlyphPageTreeNode::pruneCustomFontData):
        (WebCore::GlyphPageTreeNode::pruneFontData):
        (WebCore::GlyphPageTreeNode::showSubtree):
        (showGlyphPageTrees):
        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::updateTileBuffers):
        (WebCore::TiledBackingStore::resizeEdgeTiles):
        (WebCore::TiledBackingStore::setKeepRect):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::avfWrapperForCallbackContext):
        * platform/graphics/blackberry/LayerTiler.cpp:
        (WebCore::LayerTiler::layerVisibilityChanged):
        (WebCore::LayerTiler::uploadTexturesIfNeeded):
        (WebCore::LayerTiler::addTileJob):
        (WebCore::LayerTiler::deleteTextures):
        (WebCore::LayerTiler::pruneTextures):
        (WebCore::LayerTiler::bindContentsTexture):
        * platform/graphics/blackberry/TextureCacheCompositingThread.cpp:
        (WebCore::TextureCacheCompositingThread::textureForTiledContents):
        (WebCore::TextureCacheCompositingThread::textureForColor):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::moveOrCopyAnimations):
        (WebCore::GraphicsLayerCA::pauseAnimation):
        (WebCore::GraphicsLayerCA::layerDidDisplay):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::updateTransform):
        (WebCore::GraphicsLayerCA::updateChildrenTransform):
        (WebCore::GraphicsLayerCA::updateMasksToBounds):
        (WebCore::GraphicsLayerCA::updateContentsVisibility):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::updateBackfaceVisibility):
        (WebCore::GraphicsLayerCA::updateFilters):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateLayerDrawsContent):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateContentsRect):
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        (WebCore::GraphicsLayerCA::updateLayerAnimations):
        (WebCore::GraphicsLayerCA::setAnimationOnLayer):
        (WebCore::GraphicsLayerCA::removeCAAnimationFromLayer):
        (WebCore::GraphicsLayerCA::pauseCAAnimationOnLayer):
        (WebCore::GraphicsLayerCA::suspendAnimations):
        (WebCore::GraphicsLayerCA::resumeAnimations):
        (WebCore::GraphicsLayerCA::findOrMakeClone):
        (WebCore::GraphicsLayerCA::setOpacityInternal):
        (WebCore::GraphicsLayerCA::updateOpacityOnLayer):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::~TileCache):
        (WebCore::TileCache::setNeedsDisplay):
        (WebCore::TileCache::setScale):
        (WebCore::TileCache::setAcceleratesDrawing):
        (WebCore::TileCache::setTileDebugBorderWidth):
        (WebCore::TileCache::setTileDebugBorderColor):
        (WebCore::TileCache::revalidateTiles):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::animationStarted):
        (resubmitAllAnimations):
        (PlatformCALayer::animationForKey):
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::LookupAltName):
        (WebCore::fontContainsCharacter):
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::getDerivedFontData):
        * platform/graphics/filters/CustomFilterGlobalContext.cpp:
        (WebCore::CustomFilterGlobalContext::~CustomFilterGlobalContext):
        (WebCore::CustomFilterGlobalContext::getValidatedProgram):
        (WebCore::CustomFilterGlobalContext::removeValidatedProgram):
        * platform/graphics/filters/CustomFilterProgram.cpp:
        (WebCore::CustomFilterProgram::notifyClients):
        * platform/graphics/harfbuzz/HarfBuzzSkia.cpp:
        (WebCore::getCachedHarfbuzzFace):
        (WebCore::releaseCachedHarfbuzzFace):
        * platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:
        (WebCore::HarfBuzzNGFace::HarfBuzzNGFace):
        (WebCore::HarfBuzzNGFace::~HarfBuzzNGFace):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::mappedSymbolName):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        * platform/graphics/openvg/EGLDisplayOpenVG.cpp:
        (WebCore::EGLDisplayOpenVG::~EGLDisplayOpenVG):
        (WebCore::EGLDisplayOpenVG::destroySurface):
        (WebCore::EGLDisplayOpenVG::contextForSurface):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::SharedGLData::currentSharedGLData):
        (WebCore::TextureMapperGLData::SharedGLData::~SharedGLData):
        * platform/graphics/texmap/TextureMapperShaderManager.cpp:
        (WebCore::TextureMapperShaderManager::getShaderProgram):
        (WebCore::TextureMapperShaderManager::getShaderForFilter):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontData::create):
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::forClipboard):
        * platform/gtk/GtkDragAndDropHelper.cpp:
        (WebCore::GtkDragAndDropHelper::handleGetDragData):
        (WebCore::GtkDragAndDropHelper::handleDragLeave):
        (WebCore::GtkDragAndDropHelper::handleDragMotion):
        (WebCore::GtkDragAndDropHelper::handleDragDataReceived):
        (WebCore::GtkDragAndDropHelper::handleDragDrop):
        * platform/gtk/RedirectedXCompositeWindow.cpp:
        (WebCore::filterXDamageEvent):
        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::gtkStyleChangedCallback):
        (WebCore::getStyleContext):
        * platform/mac/ScrollbarThemeMac.mm:
        (+[WebScrollbarPrefsObserver appearancePrefsChanged:]):
        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::get):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        (WebCore::HTTPHeaderMap::get):
        * platform/network/MIMEHeader.cpp:
        (WebCore::MIMEHeader::parseHeader):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderField):
        (WebCore::ResourceRequestBase::addHTTPHeaderFields):
        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
        (WebCore::ResourceRequest::targetTypeFromMimeType):
        (WebCore::ResourceRequest::initializePlatformRequest):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::makeFinalRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):
        (WebCore::ResourceHandle::setClientCertificate):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessage):
        (WebCore::ResourceRequest::toSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::toSoupMessage):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):
        * platform/qt/RunLoopQt.cpp:
        (WebCore::RunLoop::TimerBase::timerFired):
        * platform/text/LocaleToScriptMappingDefault.cpp:
        (WebCore::scriptNameToCode):
        (WebCore::localeToScriptCodeForFontSelection):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::pruneBlacklistedCodecs):
        (WebCore::dumpTextEncodingNameMap):
        * platform/text/transcoder/FontTranscoder.cpp:
        (WebCore::FontTranscoder::converterType):
        * platform/text/win/TextCodecWin.cpp:
        (WebCore::LanguageManager::LanguageManager):
        (WebCore::getCodePage):
        (WebCore::TextCodecWin::registerExtendedEncodingNames):
        (WebCore::TextCodecWin::registerExtendedCodecs):
        (WebCore::TextCodecWin::enumerateSupportedEncodings):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getDataMapItem):
        (WebCore::getClipboardData):
        (WebCore::setClipboardData):
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::types):
        * platform/win/FileSystemWin.cpp:
        (WebCore::cachedStorageDirectory):
        * platform/win/RunLoopWin.cpp:
        (WebCore::RunLoop::TimerBase::timerFired):
        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::createInstance):
        * platform/wince/MIMETypeRegistryWinCE.cpp:
        (WebCore::MIMETypeRegistry::getPreferredExtensionForMIMEType):
        * platform/wx/ContextMenuWx.cpp:
        (WebCore::ContextMenu::appendItem):
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::refresh):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        (WebCore::PluginDatabase::remove):
        * plugins/PluginMainThreadScheduler.cpp:
        (WebCore::PluginMainThreadScheduler::scheduleCall):
        (WebCore::PluginMainThreadScheduler::dispatchCalls):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream):
        * plugins/blackberry/PluginDataBlackBerry.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/wx/PluginDataWx.cpp:
        (WebCore::PluginData::initPlugins):
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::ensureExclusionShapeInsideInfoForRenderBlock):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::unregisterNamedFlowContentNode):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::requiresIdeographicBaseline):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):
        (WebCore::RenderCounter::rendererStyleChanged):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::performOverlapTests):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayerFilterInfo::filterInfoForRenderLayer):
        (WebCore::RenderLayerFilterInfo::createFilterInfoForRenderLayerIfNeeded):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRenderBoxRegionInfo):
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::systemColor):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::setSelection):
        * rendering/RenderWidget.cpp:
        (WebCore::WidgetHierarchyUpdatesSuspensionScope::moveWidgets):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/VerticalPositionCache.h:
        (WebCore::VerticalPositionCache::get):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::characterStartsNewTextChunk):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::resourceDestroyed):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::swapItemsInLayoutAttributes):
        * rendering/svg/SVGTextLayoutAttributes.cpp:
        (WebCore::SVGTextLayoutAttributes::dump):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildCharacterDataMap):
        (WebCore::SVGTextLayoutAttributesBuilder::fillCharacterDataMap):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::syncTimerFired):
        (WebCore::StorageAreaSync::performImport):
        (WebCore::StorageAreaSync::sync):
        * storage/StorageMap.cpp:
        (WebCore::StorageMap::key):
        (WebCore::StorageMap::setItem):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::localStorageNamespace):
        (WebCore::StorageNamespaceImpl::copy):
        (WebCore::StorageNamespaceImpl::close):
        (WebCore::StorageNamespaceImpl::clearAllOriginsForDeletion):
        (WebCore::StorageNamespaceImpl::sync):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::removeAnimationElementFromTarget):
        (WebCore::SVGDocumentExtensions::removeAllAnimationElementsFromTarget):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget):
        (WebCore::SVGDocumentExtensions::removeAllTargetReferencesForElement):
        (WebCore::SVGDocumentExtensions::removeAllElementReferencesForTarget):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::setElapsed):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/graphics/SVGImageCache.cpp:
        (WebCore::SVGImageCache::~SVGImageCache):
        (WebCore::SVGImageCache::removeClientFromCache):
        (WebCore::SVGImageCache::requestedSizeAndScales):
        (WebCore::SVGImageCache::imageContentChanged):
        (WebCore::SVGImageCache::redraw):
        (WebCore::SVGImageCache::lookupOrCreateBitmapImageForRenderer):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::effectReferences):
        (WebCore::SVGFilterBuilder::addBuiltinEffects):
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::~SVGAnimatedProperty):
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        (WebCore::SVGAttributeToPropertyMap::addProperties):
        (WebCore::SVGAttributeToPropertyMap::synchronizeProperties):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::hasPendingActivity):
        * workers/WorkerEventQueue.cpp:
        (WebCore::WorkerEventQueue::close):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::setRequestHeaderInternal):
        (WebCore::XMLHttpRequest::getAllResponseHeaders):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunction):
        * xml/XPathParser.cpp:
        (isAxisName):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltParamArrayFromParameterMap):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTProcessor::transformToString):

2012-10-07  Geoffrey Garen  <ggaren@apple.com>

        REGRESSION (r130584): Crashes in JSC::MarkedAllocator::allocateSlowCase, failing fast/dom/gc-dom-tree-lifetime.html
        https://bugs.webkit.org/show_bug.cgi?id=98612

        Reviewed by Darin Adler.

        Since DOM modification can happen outside of JS, calls into JS due to
        DOM modification need to take the JS lock.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::willCreatePossiblyOrphanedTreeByRemovalSlowCase): Take the JS
        lock before doing a JS allocation, since this may be a JS entrypoint.

        * bindings/js/JSNodeCustom.h:
        (WebCore::willCreatePossiblyOrphanedTreeByRemoval): Split out a slow case
        to help the inliner.

2012-10-07  Nick Carter  <nick@chromium.org>

        [chromium] Crash in WebCore::GraphicsLayerChromium::setContentsToImage
        https://bugs.webkit.org/show_bug.cgi?id=98456

        Reviewed by James Robinson.

        Handle null return of nativeImageForCurrentFrame.

        Test: compositing/images/truncated-direct-png-image.html

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToImage):

2012-10-07  Benjamin Poulain  <benjamin@webkit.org>

        WTFURL: implement URL port removal for HTMLAnchorElement
        https://bugs.webkit.org/show_bug.cgi?id=98604

        Reviewed by Adam Barth.

        * platform/KURLWTFURL.cpp:
        (WebCore::KURL::hasPort):
        (WebCore::KURL::removePort):
        (WebCore::KURL::isHierarchical):
        Implement those methods to pass the port removal test of HTMLAnchorElement.

2012-10-05  Dirk Schulze  <krit@webkit.org>

        SVG radialGradient should support 'fr' for focal radius (just like Canvas)
        https://bugs.webkit.org/show_bug.cgi?id=97986

        Reviewed by Daniel Bates.

        Update SVGRadialGradient to the changed behavior in SVG2: http://www.w3.org/TR/SVG2/pservers.html#RadialGradients
        SVG2 adds the focal radius for radial gradients. Color stops will start from the edge of
        the focal radius.
        The new specification does not limit the focal point to be inside the radial gradients radius.
        This makes SVGRadialGradient consistent with the radial gradient on Canvas.

        Test: svg/custom/radialGradient-focal-radius.svg

        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
            Remove checks for position of focal point. The focal point
            can be placed every where outside the radius of the gradient now.
        (WebCore::RenderSVGResourceRadialGradient::focalRadius):
            Add new method to get the focal radius from SVGRadialGradientElement.
        (WebCore::RenderSVGResourceRadialGradient::buildGradient):
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        (RenderSVGResourceRadialGradient):
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
            Modify DRT output to include the focal radius.
        * svg/RadialGradientAttributes.h:
        (WebCore::RadialGradientAttributes::RadialGradientAttributes):
        (WebCore::RadialGradientAttributes::fr):
        (WebCore::RadialGradientAttributes::setFr):
        (WebCore::RadialGradientAttributes::hasFr):
        (RadialGradientAttributes):
            New setters and getters for focal radius.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore):
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        (WebCore::SVGRadialGradientElement::isSupportedAttribute):
        (WebCore::SVGRadialGradientElement::parseAttribute):
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        (WebCore::SVGRadialGradientElement::selfHasRelativeLengths):
            Ditto.
        * svg/SVGRadialGradientElement.h:
        (SVGRadialGradientElement):
        * svg/SVGRadialGradientElement.idl:
        * svg/svgattrs.in:
            Add 'fr' as new attribute to the SVG attribute list.

2012-10-07  Glenn Adams  <glenn@skynav.com>

        Use start instead of -webkit-auto in default and quirks mode stylesheets.
        https://bugs.webkit.org/show_bug.cgi?id=98609

        Reviewed by Antti Koivisto.

        Change text-align use of legacy '-webkit-auto' to 'start' in the few places where it is used
        in default/quirks stylesheets.
        
        No new tests. No change of rendering/styling behavior. No performance impact.

        * css/html.css:
        (input, textarea, keygen, select, button, isindex):
        (ruby > rt):
        * css/quirks.css:
        (table):

2012-10-06  Raul Hudea  <rhudea@adobe.com>

        -webkit-clip-path should parse IRIs
        https://bugs.webkit.org/show_bug.cgi?id=96381

        Reviewed by Andreas Kling.

        Implemented the clipping via referencing a SVG clipPath. Currently it works only if the clipPath is defined
        before using it on an HTML element. The forward reference issue is tracked via https://bugs.webkit.org/show_bug.cgi?id=90405.

        Tests: css3/masking/clip-path-reference-userSpaceOnUse.html
               css3/masking/clip-path-reference.html
               fast/masking/parsing-clip-path-iri.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Add handling for SVG clipPath references.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Add handling for SVG clipPath references.
        * css/StyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue): Add handling for SVG references.
        * rendering/ClipPathOperation.h:
        (ReferenceClipPathOperation): Added a new class corresponding to SVG referenced clipPath.
        (WebCore::ReferenceClipPathOperation::create):
        (WebCore::ReferenceClipPathOperation::url):
        (WebCore::ReferenceClipPathOperation::fragment):
        (WebCore::ReferenceClipPathOperation::operator==):
        (WebCore::ReferenceClipPathOperation::ReferenceClipPathOperation):
        (WebCore):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayerContents): Add handling for ReferenceClipPathOperation.
        * rendering/svg/RenderSVGResourceClipper.h:
        (RenderSVGResourceClipper): Made applyClippingToContext public as it needs to be called directly for HTML elements.

2012-10-06  Pratik Solanki  <psolanki@apple.com>

        Reduce calls to CGImageSourceCopyPropertiesAtIndex from frameSizeAtIndex
        https://bugs.webkit.org/show_bug.cgi?id=98607

        Reviewed by Dan Bernstein.

        Refactor code so that we avoid a second call to CGImageSourceCopyPropertiesAtIndex under
        ImageSource::frameSizeAtIndex().

        No new tests because no functional change.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::orientationFromProperties):
        (WebCore):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::orientationAtIndex):

2012-10-06  Mark Rowe  <mrowe@apple.com>

        Build fix.

        Stop calling -[NSSliderCell setTitle:]. It's never done anything on OS X.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):

2012-10-06  Andreas Kling  <kling@webkit.org>

        Clipboard::types() should return an ordered collection.
        <http://webkit.org/b/98547>

        Reviewed by Darin Adler.

        Let Clipboard::types() return a ListHashSet<String> instead of a HashSet<String> to make sure
        it retains the order in which type strings are added.

        No test, this fixes an issue that was uncovered when lowering the default table size of WTF
        hash tables, causing the HashSet<String> to rehash and reorder itself.

        * 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):
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::types):
        * platform/wx/ClipboardWx.h:
        (ClipboardWx):

2012-10-06  Geoffrey Garen  <ggaren@apple.com>

        If Node X is reachable from JavaScript, all Nodes in the same tree should be kept alive
        https://bugs.webkit.org/show_bug.cgi?id=88834

        Reviewed by Gavin Barraclough.

        Follow-up patch to address some comments by Darin Adler.

        * bindings/js/JSNodeCustom.h:
        (WebCore::willCreatePossiblyOrphanedTreeByRemoval): Save some space by
        collapsing comment lines. Use Node::hasChildNodes() for brevity.

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

        Fix weird use of KURL's protocolIs
        https://bugs.webkit.org/show_bug.cgi?id=98584

        Reviewed by Adam Barth.

        Converting a KURL to string is a bad idea.

        Invalid URLs can return a string that pass the tests, while an
        invalid URL will fail protocolIs().

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::removeClient):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        * platform/network/DataURL.cpp:
        (WebCore::handleDataURL):

2012-10-06  Dan Bernstein  <mitz@apple.com>

        WebCore part of <rdar://problem/12446507> [mac] WebKit clients cannot change the behavior of text-rendering: auto
        https://bugs.webkit.org/show_bug.cgi?id=98601

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported Font::setDefaultTypesettingFeatures().
        * platform/graphics/Font.cpp:
        (WebCore::Font::s_defaultTypesettingFeatures): Defined this static.
        (WebCore::Font::setDefaultTypesettingFeatures): Added this setter.
        (WebCore::Font::defaultTypesettingFeatures): Added this getter.
        * platform/graphics/Font.h:
        (WebCore::Font::typesettingFeatures): Changed to use the value of the new static member
        s_defaultTypesettingFeatures, rather than 0, if text-redering is set to auto.

2012-10-04  Geoffrey Garen  <ggaren@apple.com>

        If Node X is reachable from JavaScript, all Nodes in the same tree should be kept alive
        https://bugs.webkit.org/show_bug.cgi?id=88834

        Reviewed by Gavin Barraclough.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::isObservable): Clarified this comment, since it seems to have
        misled some folks. 

        * bindings/js/JSNodeCustom.h:
        (WebCore::willCreatePossiblyOrphanedTreeByRemoval): New helper function
        to ensure that a disconnected tree is visible to JavaScript.

        * bindings/js/ScriptState.cpp:
        (WebCore::mainWorldScriptState): Need to check for null because a document's
        frame can be null.

        * dom/ContainerNode.cpp:
        (WebCore::dispatchChildRemovalEvents): When we remove a subtree from the
        document, we sever the reference that JavaScript previously held by
        referencing its root. So, we give JavaScript an opportunity to establish
        a reference to the new root.

2012-10-06  Byungwoo Lee  <bw80.lee@samsung.com>

        Fix build warning : -Wunused-parameter.
        https://bugs.webkit.org/show_bug.cgi?id=98583

        Reviewed by Kentaro Hara.

        Use ASSERT_UNUSED() macro to remove build warning.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::delayDeliveryTimerFired):
        (WebCore::PluginStream::didReceiveResponse):
        (WebCore::PluginStream::didReceiveData):
        (WebCore::PluginStream::didFail):
        (WebCore::PluginStream::didFinishLoading):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::requestTimerFired):
        (WebCore::PluginView::invalidateTimerFired):

2012-10-05  Adam Barth  <abarth@webkit.org>

        [V8] toV8(Node*, ...) does more work than needed (6% faster on dom-traverse)
        https://bugs.webkit.org/show_bug.cgi?id=98567

        Reviewed by Kentaro Hara.

        This patch introduces toV8Fast for Node*. This function works a
        differently from the existing toV8 function in two ways:

        1) It uses the inline wrapper cache in Node to determine if we're
           executing in the main world. This is faster both in the case when
           isolated worlds exist because we don't need to retrieve any state
           for the current context.

        2) It doesn't attempt to inline the hash table lookup used to find the
           wrapper in the isolated world. There isn't a big need to inline this
           code since performance in the isolated world case is dominated by
           the hash table lookup.

        Because of these two changes, toV8Fast is small enough to inline into
        each attribute getter profitably. Over time, I would like to convert
        all the performance critical uses of toV8(Node*) to toV8Fast. At that
        point, we can delete toV8 and rename toV8Slow to toV8.

        * bindings/scripts/CodeGeneratorV8.pm:
        (GenerateHeader):
        (GenerateNormalAttrGetter):

2012-10-05  Huang Dongsung  <luxtella@company100.net>

        [mac] REGRESSION (r122215): Animated GIF outside the viewport doesn't play when scrolled into view.
        https://bugs.webkit.org/show_bug.cgi?id=94874

        Reviewed by Simon Fraser.

        Rollback previous patch because this patch caused two problems.
        1. GIF animation is occasionally paused when tiled scrolling is enabled.
        2. This change regressed Apple's Membuster benchmark by ~20% (80MB.)

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::shouldPauseAnimation):
        * loader/cache/CachedImage.h:
        (CachedImage):
        * loader/cache/CachedResource.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willRenderImage):

2012-10-05  Xianzhu Wang  <wangxianzhu@chromium.org>

        OpenTypeVerticalData issue with DroidSansFallback.ttf on chromium-android and chromium-linux
        https://bugs.webkit.org/show_bug.cgi?id=97824

        Reviewed by Tony Chang.

        The issue occurred when a font that contains vert GSUB table but doesn't have
        a DFLT script and the first script doesn't have vert feature. Added logic to
        handle the case.

        Test: fast/writing-mode/vertical-subst-font-vert-no-dflt.html

        * platform/graphics/opentype/OpenTypeVerticalData.cpp:
        (FeatureList):
        (WebCore::OpenType::FeatureList::findFeature): Added to find the matching feature in FeatureList.
        (WebCore::OpenType::GSUBTable::feature): Added logic to handle the case of no DFLT script and no vert feature under the first script.

2012-10-05  Tony Chang  <tony@chromium.org>

        Form controls should always be horizontal
        https://bugs.webkit.org/show_bug.cgi?id=98563

        Reviewed by Ojan Vafai.

        Fix a regression where we didn't force form controls to be horizontal.

        Tests: fast/dom/HTMLMeterElement/meter-writing-mode.html
               fast/dom/HTMLProgressElement/progress-writing-mode.html
               fast/table/colspanMinWidth-vertical.html

        * css/html.css:
        (input, textarea, keygen, select, button, isindex, meter, progress):

2012-10-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130556 and r130564.
        http://trac.webkit.org/changeset/130556
        http://trac.webkit.org/changeset/130564
        https://bugs.webkit.org/show_bug.cgi?id=98572

        The patch wasn't reviewed by a reviewer and it is breaking
        Chromium Windows (Requested by jchaffraix on #webkit).

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mediaControls.css:
        (video::-webkit-media-text-track-container):
        (video::-webkit-media-text-track-past-nodes):
        (video::-webkit-media-text-track-future-nodes):
        (video::-webkit-media-text-track-display):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::attach):
        (WebCore::HTMLMediaElement::userIsInterestedInThisLanguage):
        (WebCore::HTMLMediaElement::userIsInterestedInThisTrackKind):
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible):
        (WebCore::HTMLMediaElement::updateClosedCaptionsControls):
        * html/HTMLMediaElement.h:
        (HTMLMediaElement):
        * html/shadow/MediaControlElements.cpp:
        (WebCore):
        (WebCore::MediaControlTextTrackContainerElement::updateSizes):
        * html/shadow/MediaControlElements.h:
        (MediaControlTextTrackContainerElement):
        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::updateTextTrackDisplay):
        * html/shadow/MediaControlRootElement.h:
        (MediaControlRootElement):
        * html/shadow/MediaControls.h:
        (MediaControls):
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::isValidKindKeyword):
        (WebCore::TextTrack::setKind):
        (WebCore::TextTrack::setMode):
        (WebCore::TextTrack::mode):
        * html/track/TextTrack.h:
        (WebCore::TextTrack::create):
        (WebCore::TextTrack::kind):
        (TextTrack):
        (WebCore::TextTrack::label):
        (WebCore::TextTrack::setLabel):
        (WebCore::TextTrack::language):
        (WebCore::TextTrack::setLanguage):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCueBox::TextTrackCueBox):
        (WebCore::TextTrackCueBox::shadowPseudoId):
        (WebCore):
        (WebCore::TextTrackCue::updateDisplayTree):
        * html/track/TextTrackCue.h:
        (TextTrackCueBox):
        (TextTrackCue):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * rendering/CaptionPreferencesChangedListener.h: Removed.
        * rendering/RenderTheme.h:
        (WebCore):
        (RenderTheme):
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        * rendering/RenderThemeMac.mm:
        (WebCore):
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::~RenderThemeMac):

2012-10-05  Tim Horton  <timothy_horton@apple.com>

        [cg] GraphicsContextCG should ask CG whether the shadow offset workaround is required
        https://bugs.webkit.org/show_bug.cgi?id=98565
        <rdar://problem/12436468>

        Reviewed by Simon Fraser.

        On Mountain Lion and above, CG can tell us whether we need to work around incorrect
        shadow offsets. Prior to Mountain Lion, we should assume we need to apply the workaround.

        No new tests, as this requires an obscure configuration to test.

        * WebCore.exp.in:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::applyShadowOffsetWorkaroundIfNeeded):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/mac/WebCoreSystemInterface.h: Add wkCGContextDrawsWithCorrectShadowOffsets.
        * platform/mac/WebCoreSystemInterface.mm: Add wkCGContextDrawsWithCorrectShadowOffsets.

2012-10-05  Anders Carlsson  <andersca@apple.com>

        Try to fix the build.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::captionsWindowColor):

2012-10-05  Eric Seidel  <eric@webkit.org>

        Remove needless virtual calls and inline RenderStyle::logical* to make table layout faster
        https://bugs.webkit.org/show_bug.cgi?id=98550

        Reviewed by Andreas Kling.

        This shaved another 5% (100ms) off of the runtime of resizecol.html microbenchmark:
        http://www.robohornet.org/tests/resizecol.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2012-10-04  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 Silvia Pfeiffer.

        * WebCore.exp.in: Export new WebkitSystemInterface functions.
        * WebCore.xcodeproj/project.pbxproj: Add CaptionPreferencesChangedListener.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::userCaptionPreferencesChanged): New, if theme
            has a captions style sheet override, inject it into the current page group, otherwise
            remove injected sheet.
        (WebCore::MediaControlTextTrackContainerElement::updateSizes): Get rid of unnecessary member
            variable. Get caption font scale from theme instead of hard coding.
        * html/shadow/MediaControlElements.h:

        * html/shadow/MediaControlRootElement.cpp:
        (WebCore::MediaControlRootElement::userCaptionPreferencesChanged): New.
        (WebCore::MediaControlRootElement::updateTextTrackDisplay):
        * html/shadow/MediaControlRootElement.h: Add userCaptionPreferencesChanged, minor cleanup.

        * html/shadow/MediaControls.h:
        (WebCore::MediaControls::userCaptionPreferencesChanged): New.

        * 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:

        * platform/mac/WebCoreSystemInterface.h: Updated.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

        * rendering/CaptionPreferencesChangedListener.h: Added.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::userPrefersCaptions): New, default do-nothing implementation.
        (WebCore::RenderTheme::userHasCaptionPreferences): Ditto.
        (WebCore::RenderTheme::captionFontSizeScale): Ditto.
        (WebCore::RenderTheme::captionsStyleSheetOverride): Ditto.
        (WebCore::RenderTheme::registerForCaptionPreferencesChangedCallbacks): Ditto.
        (WebCore::RenderTheme::unregisterForCaptionPreferencesChangedCallbacks): Ditto.

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::userCaptionPreferencesChangedNotificationCallback): New, receives preference changed notifications.
        (WebCore::RenderThemeMac::RenderThemeMac): Initialize m_listeningForCaptionPreferenceNotifications.
        (WebCore::RenderThemeMac::~RenderThemeMac): Unregister for notifications if necessary.
        (WebCore::RenderThemeMac::userHasCaptionPreferences): New, passthrough to WKSI function.
        (WebCore::RenderThemeMac::userPrefersCaptions): Ditto.
        (WebCore::RenderThemeMac::captionsWindowColor): Return Color with user's caption window color preference.
        (WebCore::RenderThemeMac::captionsBackgroundColor): Return Color with user's caption 
            background color preference.
        (WebCore::RenderThemeMac::captionsTextColor): Return Color with user's caption text color preference.
        (WebCore::RenderThemeMac::captionsEdgeColorForTextColor): Return Color for text edge effect.
        (WebCore::RenderThemeMac::cssPropertyWithTextEdgeColor): Return String with CSS to set a text-shadow
            or webkit-text-stroke property.
        (WebCore::RenderThemeMac::cssColorProperty): Return a String with css to set a property 
            with a color value.
        (WebCore::RenderThemeMac::captionsTextEdgeStyle): Return a String with css to style caption 
            text with the user's preferred text edge stye.
        (WebCore::RenderThemeMac::captionsDefaultFont): Return a String with css to style caption
            text with the user's preferred font.
        (WebCore::RenderThemeMac::captionsStyleSheetOverride): Return a String with css to style captions
            with the user's preferred style.
        (WebCore::RenderThemeMac::captionFontSizeScale): Return the user's preferred caption font scale.
        (WebCore::RenderThemeMac::captionPreferencesChanged): Notify listeners of caption preference change.
        (WebCore::RenderThemeMac::registerForCaptionPreferencesChangedCallbacks): Add a caption preferences 
            changes listener.
        (WebCore::RenderThemeMac::unregisterForCaptionPreferencesChangedCallbacks): Remove a caption preferences
            changes listener.

2012-10-05  Takashi Sakamoto  <tasak@google.com>

        Inline continuations create :after generated content on style recalcs
        https://bugs.webkit.org/show_bug.cgi?id=93170

        Reviewed by Abhishek Arya.

        The bug is caused by RenderInline::styleDidChange's setContinuation(0).
        RenderObjectChildList uses continuation to know whether the given
        renderer should have AFTER render object or not.
        However, setContinuation(0) makes RenderObjectChildList to
        misunderstand that all continuations are last continuation.
        To avoid the misunderstanding, added a new flag to class
        RenderObejctChildList to enable/disable updating :after content (and
        also :before content).

        Tests: fast/css-generated-content/after-with-inline-continuation.html
               fast/css-generated-content/dynamic-apply-after-for-inline.html

        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::styleDidChange):
        Disable upating :after content for continuations which are not
        the last one during setStyle just after setContinuation(0).
        The setStyle invokes RenderInline::styleDidChange and also invokes
        updateBeforeAfterContent via the styleDidChange. This means,
        the last continuation's updateBeforeAfterContent is also invoked
        after setContinuation(0). We have to update :after for the last
        continuation.
        * rendering/RenderObjectChildList.cpp:
        (WebCore):
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        If s_updateBeforeAfterContent is false, quickly exit
        updateBeforeAfterContent.
        * rendering/RenderObjectChildList.h:
        (RenderObjectChildList):
        Added a new flag s_enableUpdateBeforeAfterContent to enable/disable
        updating :before or :after content.

2012-10-05  Simon Fraser  <simon.fraser@apple.com>

        Don't assume that TileCache layers are opaque
        https://bugs.webkit.org/show_bug.cgi?id=98555

        Reviewed by Dean Jackson.

        TileCache previously set all its tile CALayers as opaque.
        However, we will need non-opaque tile caches when we use this
        tile cache for tiled layers, so add a member function to
        control tile opacity.
        
        RenderLayerBacking already calls m_graphicsLayer->setContentsOpaque()
        using the FrameView's notion of opaqueness, so this change will
        cause the main tile cache to be non-opaque if external forces have
        set the FrameView to be non-opaque.
        
        Also tweak the layer border widths on tiled layers.

        * platform/graphics/ca/mac/TileCache.h:
        (TileCache):
        (WebCore::TileCache::tilesAreOpaque):
        * platform/graphics/ca/mac/TileCache.mm:
        (WebCore::TileCache::TileCache):
        (WebCore::TileCache::setTilesOpaque):
        (WebCore::TileCache::createTileLayer):
        * platform/graphics/ca/mac/WebTileCacheLayer.mm:
        (-[WebTileCacheLayer setOpaque:]):
        (-[WebTileCacheLayer isOpaque]):
        (-[WebTileCacheLayer setBorderWidth:]):

2012-10-05  Tony Chang  <tony@chromium.org>

        Fix margin box ascent computation in flexbox
        https://bugs.webkit.org/show_bug.cgi?id=98540

        Reviewed by Ojan Vafai.

        The margin box ascent doesn't depend on the margin below the box.

        Tests: css3/flexbox/flex-align.html: Fixed a test case and removed a FIXME.
               css3/flexbox/flex-align-vertical-writing-mode.html: Similar test case.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::marginBoxAscentForChild):

2012-10-05  Ojan Vafai  <ojan@chromium.org>

        Deprecated flexboxes subtract scrollbar width/height twice
        https://bugs.webkit.org/show_bug.cgi?id=98552

        Reviewed by Tony Chang.

        This is a regression from http://trac.webkit.org/changeset/119507.
        The problem is that contentHeight subtracts the scrollbar and
        RenderDeprecatedFlexbox subtracts the scrollbar.

        -Make it so that we only access override sizes if one has been set.
        I think this makes the calling code more clear.
        -If we don't have one set, grab the height/width - borderAndPadding.
        -Add a FIXME to change this all back to being borderbox sizes.
        There's something trick with making table padding/border work right for that
        though (noted in the original patch).

        Test: fast/flexbox/flexing-overflow-scroll-item.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::overrideLogicalContentWidth):
        (WebCore::RenderBox::overrideLogicalContentHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        * rendering/RenderBox.h:
        (RenderBox):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::contentWidthForChild):
        (WebCore):
        (WebCore::contentHeightForChild):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::allowedChildFlex):

2012-10-05  Eric Seidel  <eric@webkit.org>

        Make tables which don't use col/row span much faster to layout
        https://bugs.webkit.org/show_bug.cgi?id=98221

        Reviewed by Julien Chaffraix.

        My sense is that most tables on webpages do not use colspan/rowspan
        so I stole another bit from RenderTableCell::m_column to avoid
        having to re-parse the colSpan/rowSpan attributes for every cell
        when doing table layout.
        This made these symbols disappear from biggrid.html/redraw.html (dglazkov's spreadsheets benchmarks)
        as well as moved our robohornet/resizecol.html number from an average of 3221ms to 2608ms (~20%!).

        I removed m_hasHTMLTableCellElement (from http://trac.webkit.org/changeset/97691)
        since it was attempting to do the same sort of optimization.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):
        (WebCore::RenderTableCell::layout):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::colSpan):
        (WebCore::RenderTableCell::rowSpan):
        (RenderTableCell):

2012-10-05  Oli Lan  <olilan@chromium.org>

        Allow EventHandler to handle longpress gestures, including longpress selection on Android.
        https://bugs.webkit.org/show_bug.cgi?id=98173
        
        Reviewed by Ryosuke Niwa.

        Adds handling for GestureLongPress to EventHandler::handleGestureEvent, with a new
        handleGestureLongPress method. On Android, this method selects the closest word
        if the gesture event was over non-link text.

        This is tested via a new chromium test WebViewTest.LongPressSelection.  

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore):
        (WebCore::EventHandler::handleGestureEvent):
        (WebCore::EventHandler::handleGestureLongPress):
        * page/EventHandler.h:
        (EventHandler):

2012-10-05  Tab Atkins  <jackalmage@gmail.com>

        <marquee> element forces itself to be at least 1em high, regardless of 'height' declaration
        https://bugs.webkit.org/show_bug.cgi?id=18098

        Reviewed by Eric Seidel.

        This restriction originally existed to match IE, but IE changed some time ago to be normal instead.
        We're the last browser, afaict, to still enforce this de-facto restriction.
        This patch makes <marquee> instead act like a normal element.

        Tests: fast/css/MarqueeLayoutTest.html (rewritten from the older, bad version)

        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::updateMarqueeStyle):

2012-10-05  Joe Mason  <jmason@rim.com>

        [BlackBerry] Fix regression in proxy auth
        https://bugs.webkit.org/show_bug.cgi?id=98533

        Reviewed by Yong Li.

        The proxy auth dialog gets the proxy address from
        BlackBerry::Platform::Settings::proxyAddress, which returns
        "host:port", but we try to parse it with a KURL, which expects
        "scheme://host:port".  Since this is an http proxy, add http:// to the
        url to get it to parse.

        PR 220567.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::sendRequestWithCredentials):

2012-10-05  Jer Noble  <jer.noble@apple.com>

        No autorelease pool in place, causing buildup of autoreleased objects.
        https://bugs.webkit.org/show_bug.cgi?id=98522
        <rdar://problem/11647950>

        Reviewed by Alexey Proskuryakov.

        Wrap each timer callback in an AutodrainPool, ensuring an autorelease
        pool is present during calls from C/C++ into ObjC.

        * platform/cf/RunLoopTimerCF.cpp:
        (WebCore::timerFired):

2012-10-05  Ryosuke Niwa  <rniwa@webkit.org>

        Deleting across multiple paragraphs can change the style of surrounding text
        https://bugs.webkit.org/show_bug.cgi?id=97266

        Reviewed by Levi Weintraub.

        Preserve editing styles from CSS rules in wrappingStyleForSerialization as well as inline styles
        even when we're not annotating. We don't want to preserve all styles because it's against
        the user expectation to keep borders, etc... when merging paragraphs. We also don't want to copy
        styles from a mail blockquote because that's not a style the user has applied. See the comment
        in EditingStyle::wrappingStyleForSerialization.

        Test: editing/deleting/merge-paragraph-with-style-from-rule.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::EditingStyle::wrappingStyleForSerialization):

2012-10-05  Dan Bernstein  <mitz@apple.com>

        Reversing a GlyphBuffer needlessly queries its size multiple times
        https://bugs.webkit.org/show_bug.cgi?id=98530

        Reviewed by Simon Fraser.

        No new tests because there is no change in behavior.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText): Replaced the condition
        (i < glyphBuffer.size() / 2) with the equivalent test (i < end).
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForComplexText): Ditto.

2012-10-05  José Dapena Paz  <jdapena@igalia.com>

        [GTK] Add support for creating EGL contexts
        https://bugs.webkit.org/show_bug.cgi?id=77921

        Reviewed by Martin Robinson.

        This patch adds support for EGL, using OpenGL and OpenGL ES 2. Both
        options are set up on compile time, with the configure options
        --enable-egl and --enable-gles2.

        The implementation only adds support for EGL on top of X11, to
        isolate the changes to the minimum. More changes should come
        later to enable EGL for other targets (as Wayland).

        No new tests required, as existing WebGL and AC tests should cover
        the cases.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/graphics/GraphicsContext3D.h:
        (GraphicsContext3D):
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/cairo/GLContext.cpp:
        (WebCore):
        (WebCore::GLContext::sharedX11Display):
        (WebCore::GLContext::cleanupSharedX11Display):
        (WebCore::activeContextList):
        (WebCore::GLContext::addActiveContext):
        (WebCore::GLContext::removeActiveContext):
        (WebCore::GLContext::cleanupActiveContextsAtExit):
        (WebCore::GLContext::createContextForWindow):
        (WebCore::GLContext::createOffscreenContext):
        * platform/graphics/cairo/GLContext.h:
        (GLContext):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::isGLES2Compliant):
        * platform/graphics/cairo/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/clutter/GraphicsContext3DClutter.cpp:
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        * platform/graphics/egl/GLContextEGL.cpp: Added.
        (WebCore):
        (WebCore::sharedEGLDisplay):
        (WebCore::getEGLConfig):
        (WebCore::GLContextEGL::createWindowContext):
        (WebCore::GLContextEGL::createPbufferContext):
        (WebCore::GLContextEGL::createPixmapContext):
        (WebCore::GLContextEGL::createContext):
        (WebCore::GLContextEGL::GLContextEGL):
        (WebCore::GLContextEGL::~GLContextEGL):
        (WebCore::GLContextEGL::canRenderToDefaultFramebuffer):
        (WebCore::GLContextEGL::defaultFrameBufferSize):
        (WebCore::GLContextEGL::makeContextCurrent):
        (WebCore::GLContextEGL::swapBuffers):
        (WebCore::GLContextEGL::waitNative):
        (WebCore::GLContextEGL::platformContext):
        * platform/graphics/egl/GLContextEGL.h: Added.
        (WebCore):
        (GLContextEGL):
        * platform/graphics/glx/GLContextGLX.cpp:
        (WebCore::GLContextGLX::createWindowContext):
        (WebCore::GLContextGLX::createPbufferContext):
        (WebCore::GLContextGLX::createPixmapContext):
        (WebCore::GLContextGLX::createContext):
        (WebCore::GLContextGLX::~GLContextGLX):
        (WebCore::GLContextGLX::defaultFrameBufferSize):
        (WebCore::GLContextGLX::makeContextCurrent):
        (WebCore::GLContextGLX::swapBuffers):
        (WebCore):
        (WebCore::GLContextGLX::waitNative):
        * platform/graphics/glx/GLContextGLX.h:
        (GLContextGLX):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/gtk/RedirectedXCompositeWindow.cpp:
        (WebCore::RedirectedXCompositeWindow::RedirectedXCompositeWindow):
        (WebCore::RedirectedXCompositeWindow::~RedirectedXCompositeWindow):
        (WebCore::RedirectedXCompositeWindow::resize):
        * platform/gtk/RedirectedXCompositeWindow.h:

2012-10-04  Jon Lee  <jonlee@apple.com>

        Add a setting to enable plugin snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=98319
        <rdar://problem/12426480>

        Reviewed by Brady Eidson.

        Add a new bit for this preference.

        * page/Settings.cpp:
        (WebCore::Settings::Settings): Preference is false by default.
        * page/Settings.h: Added m_plugInSnapshottingEnabled bit.
        (WebCore::Settings::setPlugInSnapshottingEnabled): Set the bit.
        (WebCore::Settings::plugInSnapshottingEnabled): Return the bit.

2012-10-05  Vsevolod Vlasov  <vsevik@chromium.org>

        Unreviewed inspector front-end closure compilaiton fixes.

        * inspector/InjectedScriptCanvasModuleSource.js:
        * inspector/InjectedScriptExterns.js:
        (InjectedScriptHost.prototype.getInternalProperties):
        * inspector/front-end/DockController.js:
        * inspector/front-end/externs.js:
        (InspectorFrontendHostAPI.prototype.requestSetDockSide):

2012-10-05  Tab Atkins  <jackalmage@gmail.com>

        Replace uses of prefixed properties with unprefixed versions in the UA stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=98453

        Reviewed by Ojan Vafai.

        Switched 'border-radius' and 'box-shadow' to their unprefixed version in the UA stylesheets.

        No new tests, because the unprefixed properties have the same behavior as the prefixed.

        * css/fullscreenQuickTime.css:
        (video:-webkit-full-screen::-webkit-media-controls-panel):
        * css/html.css:
        (keygen, select):
        (select[size][multiple]):
        (select[size="1"]):
        (::-webkit-validation-bubble-message):
        * css/themeBlackBerry.css:
        (input, textarea):
        * css/themeChromiumAndroid.css:
        (select[size][multiple]):
        * css/themeQtNoListboxes.css:
        (select[size][multiple]):
        * css/themeWin.css:
        (select[size="1"]):
        * css/view-source.css:
        (.webkit-html-message-bubble):

2012-10-05  Kevin Ellis  <kevers@chromium.org>

        [chromium] Only inflate the height of rows in a popup menu when a touch device is detected.
        https://bugs.webkit.org/show_bug.cgi?id=98515

        Reviewed by Adam Barth.

        Enforces a minimum row height for popup menus when a touch device is
        detected.  In a previous patch (r127597), the sizing of popup was 
        consolidated for touch and non-touch.  Based on user feedback, reverting
        to the old behavior for non-touch and only adding padding for touch
        devices seems like a much safer strategy.  This patch is not a direct
        revert of r127567 since the padding previously used for touch is a bit
        excessive.

        Covered by existing tests.

        * platform/chromium/PopupListBox.cpp:
        (WebCore::PopupListBox::getRowHeight):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupMenuChromium::optionRowHeightForTouch):
        (WebCore::PopupMenuChromium::setOptionRowHeightForTouch):
        (PopupMenuChromium):

2012-10-05  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: [Styles] Unable to edit properties in broken stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=98246

        Reviewed by Vsevolod Vlasov.

        Pop source data for invalid rules off the stack whenever we have consecutive CSSParser::markRuleHeaderStart() invocations.

        Test: inspector/styles/parse-stylesheet-errors.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::popRuleData):
        (WebCore::CSSParser::markRuleHeaderStart):
        (WebCore::CSSParser::markRuleBodyStart):
        * css/CSSParser.h:
        (CSSParser):

2012-10-05  Gabor Rapcsanyi  <rgabor@webkit.org>

        Add ARM-NEON support to VectorMath in WebAudio
        https://bugs.webkit.org/show_bug.cgi?id=98131

        Reviewed by Zoltan Herczeg.

        Speed up vector operations in WebAudio with NEON intrinsics.

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsma):
        (WebCore::VectorMath::vsmul):
        (WebCore::VectorMath::vadd):
        (WebCore::VectorMath::vmul):
        (WebCore::VectorMath::zvmul):
        (WebCore::VectorMath::vsvesq):
        (WebCore::VectorMath::vmaxmgv):

2012-10-05  Simon Hausmann  <simon.hausmann@digia.com>

        Unreviewed, rolling out r130495.
        http://trac.webkit.org/changeset/130495
        https://bugs.webkit.org/show_bug.cgi?id=98268

        Made WK2 tests crash.

        * Target.pri:
        * platform/qt/QStyleFacade.cpp: Removed.
        * platform/qt/QStyleFacade.h: Removed.

2012-10-05  Simon Hausmann  <simon.hausmann@digia.com>

        [Qt] Make RenderThemeQStyle/ScrollbarThemeQStyle compile without QStyle/QtWidgets
        https://bugs.webkit.org/show_bug.cgi?id=98268

        Reviewed by Tor Arne Vestbø.

        Extracted QStyle/QWidget related code into a QWebStyle class that implements the QStyleFacade interface.

        QStyleFacade is a pure interface that lives in WebCore/platform/qt
        (next to RenderThemeQStyle and ScrollbarThemeQStyle) and provides a
        minimal interface of what we need to draw with QStyle as well as basic
        hit testing and metric retrieval. It also provides a
        QStyleFacadeOption class that aggregates common meta-data for
        rendering primitives, such as direction, rectangle, state (sunken,
        enabled, etc.) or palette. It also provides some more slider/scrollbar
        specific fields in a slider sub-structure.

        RenderThemeQStyle/ScrollbarThemeQStyle used to instantiate specific QStyleOption sub-classes and populate
        them with state information from render objects, before calling straight to QStyle. Most of the common code
        was encapsulated in StylePainterQStyle.

        The new RenderThemeQStyle/ScrolllbarThemeQStyle uses common code in
        StylePainterQStyle to populate state into QStyleFacadeOption before
        calling into QStyleFacade.

        The style facade is then implemented by QStyleFacadeImp, which extracts
        meta-data from QStyleFacadeOption arguments, populates style
        primitive specific QStyleOption objects and then calls on QStyle.

        RenderThemeQStyle/ScrollbarThemeQStyle can only use interface methods
        from QStyleFacade. QStyleFacadeImp on the other hand will live in the
        separate QtWebKitWidgets library in the future and therefore cannot use
        any WebCore types.

        * Target.pri:
        * platform/qt/QStyleFacade.cpp: Added.
        (WebCore):
        (WebCore::QStyleFacade::styleForPage):
        * platform/qt/QStyleFacade.h: Added.
        (WebCore):
        (QStyleFacade):
        (WebCore::QStyleFacade::~QStyleFacade):
        (WebCore::QStyleFacadeOption::QStyleFacadeOption):
        (QStyleFacadeOption):
        * platform/qt/RenderThemeQStyle.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.cpp.
        (WebCore):
        (WebCore::RenderThemeQStyle::getStylePainter):
        (WebCore::StylePainterQStyle::StylePainterQStyle):
        (WebCore::StylePainterQStyle::init):
        (WebCore::RenderThemeQStyle::create):
        (WebCore::RenderThemeQStyle::setStyleFactoryFunction):
        (WebCore::RenderThemeQStyle::styleFactory):
        (WebCore::RenderThemeQStyle::RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::~RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::setPaletteFromPageClientIfExists):
        (WebCore::RenderThemeQStyle::inflateButtonRect):
        (WebCore::RenderThemeQStyle::computeSizeBasedOnStyle):
        (WebCore::RenderThemeQStyle::adjustButtonStyle):
        (WebCore::RenderThemeQStyle::setButtonPadding):
        (WebCore::RenderThemeQStyle::paintButton):
        (WebCore::RenderThemeQStyle::paintTextField):
        (WebCore::RenderThemeQStyle::adjustTextAreaStyle):
        (WebCore::RenderThemeQStyle::paintTextArea):
        (WebCore::RenderThemeQStyle::setPopupPadding):
        (WebCore::RenderThemeQStyle::colorPalette):
        (WebCore::RenderThemeQStyle::paintMenuList):
        (WebCore::RenderThemeQStyle::adjustMenuListButtonStyle):
        (WebCore::RenderThemeQStyle::paintMenuListButton):
        (WebCore::RenderThemeQStyle::animationDurationForProgressBar):
        (WebCore::RenderThemeQStyle::paintProgressBar):
        (WebCore::RenderThemeQStyle::paintSliderTrack):
        (WebCore::RenderThemeQStyle::adjustSliderTrackStyle):
        (WebCore::RenderThemeQStyle::paintSliderThumb):
        (WebCore::RenderThemeQStyle::adjustSliderThumbStyle):
        (WebCore::RenderThemeQStyle::paintSearchField):
        (WebCore::RenderThemeQStyle::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldDecoration):
        (WebCore::RenderThemeQStyle::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeQStyle::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeQStyle::paintInnerSpinButton):
        (WebCore::RenderThemeQStyle::initializeCommonQStyleOptions):
        (WebCore::RenderThemeQStyle::adjustSliderThumbSize):
        * platform/qt/RenderThemeQStyle.h: Renamed from Source/WebKit/qt/WebCoreSupport/RenderThemeQStyle.h.
        (WebCore):
        (RenderThemeQStyle):
        (WebCore::RenderThemeQStyle::qStyle):
        (StylePainterQStyle):
        (WebCore::StylePainterQStyle::isValid):
        (WebCore::StylePainterQStyle::paintButton):
        (WebCore::StylePainterQStyle::paintTextField):
        (WebCore::StylePainterQStyle::paintComboBox):
        (WebCore::StylePainterQStyle::paintComboBoxArrow):
        (WebCore::StylePainterQStyle::paintSliderTrack):
        (WebCore::StylePainterQStyle::paintSliderThumb):
        (WebCore::StylePainterQStyle::paintInnerSpinButton):
        (WebCore::StylePainterQStyle::paintProgressBar):
        (WebCore::StylePainterQStyle::paintScrollCorner):
        (WebCore::StylePainterQStyle::paintScrollBar):
        * platform/qt/ScrollbarThemeQStyle.cpp: Renamed from Source/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.cpp.
        (WebCore):
        (WebCore::ScrollbarThemeQStyle::ScrollbarThemeQStyle):
        (WebCore::ScrollbarThemeQStyle::~ScrollbarThemeQStyle):
        (WebCore::scPart):
        (WebCore::scrollbarPart):
        (WebCore::initSliderStyleOption):
        (WebCore::ScrollbarThemeQStyle::paint):
        (WebCore::ScrollbarThemeQStyle::hitTest):
        (WebCore::ScrollbarThemeQStyle::shouldCenterOnThumb):
        (WebCore::ScrollbarThemeQStyle::invalidatePart):
        (WebCore::ScrollbarThemeQStyle::scrollbarThickness):
        (WebCore::ScrollbarThemeQStyle::thumbPosition):
        (WebCore::ScrollbarThemeQStyle::thumbLength):
        (WebCore::ScrollbarThemeQStyle::trackPosition):
        (WebCore::ScrollbarThemeQStyle::trackLength):
        (WebCore::ScrollbarThemeQStyle::paintScrollCorner):
        * platform/qt/ScrollbarThemeQStyle.h: Renamed from Source/WebKit/qt/WebCoreSupport/ScrollbarThemeQStyle.h.
        (WebCore):
        (ScrollbarThemeQStyle):
        (WebCore::ScrollbarThemeQStyle::qStyle):

2012-10-05  Andrei Bucur  <abucur@adobe.com>

        Incomplete repaint of boxes with inset box-shadow and padding when resized
        https://bugs.webkit.org/show_bug.cgi?id=59863

        Reviewed by Simon Fraser.

        The patch extends the repaint rectangle to include the inset shadow extent for renderers that resize and need to be repainted. The rectangle computations are also better fragmented and easier to read.

        New Test: fast/repaint/box-shadow-inset-repaint.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getShadowInsetExtent):
        (WebCore):
        * rendering/style/RenderStyle.h:

2012-10-04  Kent Tamura  <tkent@chromium.org>

        Fix sub-field width to the maximum width of a placeholder and the maximum value
        https://bugs.webkit.org/show_bug.cgi?id=98481

        Reviewed by Hajime Morita.

        We can't assume a placeholder text is shorter than the width of
        digits. The placeholder string for the year field of
        input[type=week] is "----", but input[type=date] will have a
        localized string for it.

        We should set the 'width' CSS property to the maximum of the
        placeholder width and the maximum value width in order to prevent
        the field width from growing/narrowing.

        Before this patch, we secured four digits space for a year field,
        and allowed the field to grow its width when a larger year is
        set. After this patch, we don't allow it to grow because the
        'width' property is set to the maximum width.

        Update week-multiple-fields-appearance-basic.html, and the
        following tests are affected.
        - fast/forms/week-multiple-fields/week-multiple-fields-appearance-pseudo-classes.html
        - fast/forms/week-multiple-fields/week-multiple-fields-appearance-pseudo-elements.html
        - fast/forms/week-multiple-fields/week-multiple-fields-appearance-style.html

        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::DateTimeNumericFieldElement):
        Enable customStyleForRenderer.
        (WebCore::DateTimeNumericFieldElement::customStyleForRenderer):
        Added. The code is similar to DateTimeSymbolicFieldElement::customStyleForRenderer().
        (WebCore::DateTimeNumericFieldElement::formatValue):
        Made a function with the code in value(). This is used in
        customStyleForRenderer() and value().
        (WebCore::DateTimeNumericFieldElement::value): Use formatValue().
        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement): Declare new functions.

2012-10-05  Kent Tamura  <tkent@chromium.org>

        Improve spelling and performance of Localizer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=98485

        Reviewed by Kentaro Hara.

        Some improvements pointed in webkit.org/b/98229#c5.

        No new tests because of no behavior change.

        * platform/text/Localizer.h:
        (Localizer):
         - Rename dateTimeFormatWithSecond to dateTimeFormatWithSeconds
         - Rename dateTimeFormatWithoutSecond to dateTimeFormatWithoutSeconds
         - Add data members: m_dateTimeFormatWithSeconds and m_dateTimeFormatWithoutSeconds.
        * platform/text/Localizer.cpp:
        (WebCore::Localizer::timeFormat): Check isNull instead of isEmpty
        (WebCore::Localizer::shortTimeFormat): Ditto.
        (WebCore::Localizer::dateTimeFormatWithSeconds):
        - Renamed.
        - Cache the concatenation result to a data member.
        (WebCore::Localizer::dateTimeFormatWithoutSeconds): Ditto.

        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setupLayoutParameters): Follow the renaming.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::setupLayoutParameters): Ditto.

2012-10-04  Kenichi Ishibashi  <bashi@chromium.org>

        [WebSocket] ExtensionParser should have its own file
        https://bugs.webkit.org/show_bug.cgi?id=98475

        Reviewed by Yuta Kitamura.

        Factor out ExtensionParser from WebSocketExtensionDispatcher and rename it as WebSocketExtensionParser.
        WebSocketExtensionParser has its own file.

        No changes in behavior. Added a test case for parsing Sec-WebSocket-Extensions field as a chromium unit test.

        * CMakeLists.txt: Added WebSocketExtensionParser.
        * GNUmakefile.list.am: Ditto.
        * Modules/websockets/WebSocketExtensionDispatcher.cpp:
        (WebCore::WebSocketExtensionDispatcher::processHeaderValue):
        Use WebSocketExtensionParser::parseExtension() to parser extension header value.
        * Modules/websockets/WebSocketExtensionParser.cpp: Added.
        (WebCore):
        (WebCore::WebSocketExtensionParser::finished): Moved from ExtensionParser.
        (WebCore::WebSocketExtensionParser::parsedSuccessfully): Ditto.
        (WebCore::isSeparator): Ditto.
        (WebCore::WebSocketExtensionParser::skipSpaces): Ditto.
        (WebCore::WebSocketExtensionParser::consumeToken): Ditto.
        (WebCore::WebSocketExtensionParser::consumeQuotedString): Ditto.
        (WebCore::WebSocketExtensionParser::consumeQuotedStringOrToken): Ditto.
        (WebCore::WebSocketExtensionParser::consumeCharacter): Ditto.
        (WebCore::WebSocketExtensionParser::parseExtension): Moved from WebSocketExtensionDispatcher.
        * Modules/websockets/WebSocketExtensionParser.h: Added.
        (WebCore):
        (WebSocketExtensionParser):
        (WebCore::WebSocketExtensionParser::WebSocketExtensionParser):
        (WebCore::WebSocketExtensionParser::currentToken):
        * Target.pri: Added WebSocketExtensionParser.
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

2012-10-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>

        <input> size attribute should throw INDEX_SIZE_ERR when set to 0
        https://bugs.webkit.org/show_bug.cgi?id=61675

        Reviewed by Kent Tamura.

        According to the spec, the size IDL attribute of input elements is limited
        to only non-negative numbers greater than zero. It should throw INDEX_SIZE_ERR
        exception when set to 0. New behavior matches both Firefox and IE.
        Spec: http://www.w3.org/TR/html5/common-input-element-attributes.html#the-size-attribute

        Test: fast/dom/HTMLInputElement/input-size-attribute.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setSize):
        * html/HTMLInputElement.h:
        (HTMLInputElement):
        * html/HTMLInputElement.idl:

2012-10-04  Kent Tamura  <tkent@chromium.org>

        Fix font for date/time input types.
        https://bugs.webkit.org/show_bug.cgi?id=98478

        Reviewed by Kentaro Hara.

        input[type=date] should use monospace font if
        ENABLE_INPUT_MULTIPLE_FIELDS_UI && ENABLE_INPUT_TYPE_DATE.

        For other date/time types, they should use monospace font only
        if their types are enabled. input[type="foo"] matches input
        element with type="foo" even if the foo type is not supported.

        The input[type=date] change is covered by
        fast/forms/date/calendar-picker-appearance.html,
        platform/chromium/fast/forms/date/date-suggestion-picker-appearance*.html

        * css/html.css:
        (input[type="date"]):
        (input[type="datetime"]):
        (input[type="datetime-local"]):
        (input[type="month"]):
        (input[type="time"]):

2012-10-04  Hajime Morrita  <morrita@google.com>

        [Refactoring] Some classes in StyleResolver.cpp/h could have its own file.
        https://bugs.webkit.org/show_bug.cgi?id=98469

        Reviewed by Dimitri Glazkov.

        This change extracts RuleData, RuleSet, RuleFeature and Featurs class
        to its own file: RuleSet.h/cpp and RuleFeature.h/cpp

        RuleFeature class is moved fro StyleResolver inner class to plain WebCore class.
        Feaures class is renamed to RuleFeatureSet to avoid possible name conflict.

        No new tests. Just splitting file and doing simple rename.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSAllInOne.cpp:
        * css/RuleFeature.cpp: Added.
        (WebCore):
        (WebCore::RuleFeatureSet::add):
        (WebCore::RuleFeatureSet::clear):
        (WebCore::RuleFeatureSet::reportMemoryUsage):
        * css/RuleFeature.h: Added.
        (WebCore):
        (RuleFeature):
        (WebCore::RuleFeature::RuleFeature):
        (RuleFeatureSet):
        (WebCore::RuleFeatureSet::RuleFeatureSet):
        * css/RuleSet.cpp: Added.
        (WebCore):
        (WebCore::isSelectorMatchingHTMLBasedOnRuleHash):
        (WebCore::selectorListContainsUncommonAttributeSelector):
        (WebCore::isCommonAttributeSelectorAttribute):
        (WebCore::containsUncommonAttributeSelector):
        (WebCore::RuleData::RuleData):
        (WebCore::RuleData::reportMemoryUsage):
        (WebCore::reportAtomRuleMap):
        (WebCore::RuleSet::reportMemoryUsage):
        (WebCore::RuleSet::RuleSetSelectorPair::reportMemoryUsage):
        (WebCore::collectFeaturesFromSelector):
        (WebCore::collectFeaturesFromRuleData):
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRule):
        (WebCore::RuleSet::addPageRule):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addRulesFromSheet):
        (WebCore::RuleSet::addStyleRule):
        (WebCore::shrinkMapVectorsToFit):
        (WebCore::RuleSet::shrinkToFit):
        * css/RuleSet.h: Added.
        (WebCore):
        (RuleData):
        (WebCore::RuleData::position):
        (WebCore::RuleData::rule):
        (WebCore::RuleData::selector):
        (WebCore::RuleData::selectorIndex):
        (WebCore::RuleData::hasFastCheckableSelector):
        (WebCore::RuleData::hasMultipartSelector):
        (WebCore::RuleData::hasRightmostSelectorMatchingHTMLBasedOnRuleHash):
        (WebCore::RuleData::containsUncommonAttributeSelector):
        (WebCore::RuleData::specificity):
        (WebCore::RuleData::linkMatchType):
        (WebCore::RuleData::hasDocumentSecurityOrigin):
        (WebCore::RuleData::isInRegionRule):
        (WebCore::RuleData::descendantSelectorIdentifierHashes):
        (SameSizeAsRuleData):
        (RuleSet):
        (WebCore::RuleSet::create):
        (WebCore::RuleSet::disableAutoShrinkToFit):
        (WebCore::RuleSet::features):
        (WebCore::RuleSet::idRules):
        (WebCore::RuleSet::classRules):
        (WebCore::RuleSet::tagRules):
        (WebCore::RuleSet::shadowPseudoElementRules):
        (WebCore::RuleSet::linkPseudoClassRules):
        (WebCore::RuleSet::focusPseudoClassRules):
        (WebCore::RuleSet::universalRules):
        (WebCore::RuleSet::pageRules):
        (WebCore::RuleSet::RuleSetSelectorPair::RuleSetSelectorPair):
        (RuleSetSelectorPair):
        (WebCore::RuleSet::RuleSet):
        * css/StyleResolver.cpp:
        (WebCore):
        (WebCore::makeRuleSet):
        (WebCore::StyleResolver::collectMatchingRulesForList):
        * css/StyleResolver.h:
        (StyleResolver):

2012-10-04  Adam Barth  <abarth@webkit.org>

        FeatureObserver should distinguish between legacy HTML and text notifications
        https://bugs.webkit.org/show_bug.cgi?id=98441

        Reviewed by Tony Chang.

        We might be able to drop support for legacy HTML notifications before
        we can drop support for legacy text notifications. We should measure
        and find out.

        * Modules/notifications/NotificationCenter.idl:
        * page/FeatureObserver.h:

2012-10-04  Pravin D  <pravind.2k4@gmail.com>

        Removing the unused member variable m_wasMalformed from HTMLFormElement class and its related code frgment.
        https://bugs.webkit.org/show_bug.cgi?id=98444

        Reviewed by Eric Seidel.

        The member variable m_wasMalformed of HTMLFormElement class was used to determine if the <form> tag was malformed or not.
        This information was used elsewhere to decide if bottom margins have to be included for such a <form>.
        However currently this member variable is not being set by any code following code refactoring in HTML parser class.

        Code cleanup patch. No new tests required.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
          Removed m_wasMalformed initialization.

        * html/HTMLFormElement.h:
        (HTMLFormElement):
         Removed m_wasMalformed variable.
         Removed m_wasMalformed variable's setter and getter functions.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
         Removed code fragment using/dependent on m_wasMalformed.

2012-10-04  Rik Cabanier  <cabanier@adobe.com>

        Turn Compositing on by default in WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=98315

        Reviewed by Simon Fraser.

        enable -webkit-blend-mode on trunk.

        No new tests. Existing blending test were updated.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:

2012-10-04  Hayato Ito  <hayato@chromium.org>

        [Refactoring] Introduce a traversal strategy in SelectorChecker
        https://bugs.webkit.org/show_bug.cgi?id=97298

        Reviewed by Antti Koivisto.

        We extract DOM traversal code from SelectorChecker so that we can use another traversal strategy.
        Another traversal strategy will be introduced in Bug 96990.

        Since this code path is very hot, we were very careful not to regress performance.
        We will use template specialization to change the traversal implementation.

        We confirmed that this patch does not regress SelectorCheckerPerformance. I have checked the performance of
        the added test in my Linux Box using run-perf-tests.

        The performance of the added test before using this patch was:

          RESULT CSS: PseudoClassSelectors= 3399.68308031 runs/s
          median= 3404.48685564 runs/s, stdev= 37.3480114449 runs/s, min= 3272.64871114 runs/s, max= 3438.72385184 runs/s

        When we used this patch, the performance was:

          RESULT CSS: PseudoClassSelectors= 3367.74473886 runs/s
          median= 3367.12072755 runs/s, stdev= 14.1464547639 runs/s, min= 3348.55881171 runs/s, max= 3395.98212857 runs/s

        Test: PerformanceTests/CSS/PseudoClass-Selectors.html

        * css/SelectorChecker.cpp:
        (WebCore):
        (WebCore::SelectorChecker::checkSelector): Make this a template method to accept another Context type.
        Another Context type will be introduced in coming patch.
        (WebCore::SelectorChecker::checkOneSelector):
        (WebCore::SelectorChecker::DOMTraversalStrategy::isFirstChild):
        (WebCore::SelectorChecker::DOMTraversalStrategy::isLastChild):
        (WebCore::SelectorChecker::DOMTraversalStrategy::isFirstOfType):
        (WebCore::SelectorChecker::DOMTraversalStrategy::isLastOfType):
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsBefore):
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsOfTypeBefore):
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsAfter):
        (WebCore::SelectorChecker::DOMTraversalStrategy::countElementsOfTypeAfter):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::SelectorCheckingContext::SelectorCheckingContext):
        (SelectorCheckingContext):
        (SelectorChecker):
        (DOMTraversalStrategy): Extracted the DOM traversal code from SelectorChecker. Another traversal code
        will be introduced the coming patch.

2012-10-04  Eric Seidel  <eric@webkit.org>

        SVGAttributeHashTranslator does not need to copy QualifiedName in the common case
        https://bugs.webkit.org/show_bug.cgi?id=98473

        Reviewed by Adam Barth.

        I tested this using instruments on a test case which modified SVG attributes in a loop.
        I believe pdr has some perf-tests in this area, but they weren't needed here.  A simple sample showed this as a huge win,
        since we're no longer creating a QualifiedName (and thus adding it to the hash) on each QualifiedName-based lookup in SVG.

        * svg/SVGElement.h:
        (WebCore::SVGAttributeHashTranslator::hash):
        (WebCore::SVGAttributeHashTranslator::equal):

2012-10-04  Julien Chaffraix  <jchaffraix@webkit.org>

        Split the intrinsic padding update code out of RenderTableSection::layoutRows
        https://bugs.webkit.org/show_bug.cgi?id=98454

        Reviewed by Eric Seidel.

        RenderTableSection::layoutRows is very long and it's difficult to see what's
        going on. This change moves the intrinsic padding update code into RenderTableCell
        for clarity. While at it, cleaned up a bit the code (renaming variables, functions).

        Change covered by existing table tests.

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeIntrinsicPadding):
        Added this new function that does the update. Removed the 'default' case, replaced by
        the explicit label BASELINE_MIDDLE.

        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::setIntrinsicPaddingBefore):
        (WebCore::RenderTableCell::setIntrinsicPaddingAfter):
        (WebCore::RenderTableCell::setIntrinsicPadding):
        Moved those setters to the private section as we want other classes
        to use computeIntrinsicPadding.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        Replaced the code with a call to RenderTableCell::computeIntrinsicPadding.
        Also moved 2 variables in the loop per our coding style.

        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::rowBaseline):
        Renamed to match our coding style.

2012-10-04  Nate Chapin  <japhet@chromium.org>

        Crash in EventHandler::mouseMoved().
        https://bugs.webkit.org/show_bug.cgi?id=98460

        Reviewed by Abhishek Arya.

        No new tests, this fixes fast/events/mouse-moved-remove-frame-crash.html.

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

2012-10-04  Adam Barth  <abarth@webkit.org>

        [V8] NotificationCenter leaks because it uses buggy custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=98445

        Reviewed by Tony Chang.

        There's no reason to use custom bindings here. All they do is cause leaks..

        * Modules/notifications/NotificationCenter.idl:
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:

2012-10-04  Tab Atkins  <jackalmage@gmail.com>

        Selector specificity categories "overflow" into higher categories
        https://bugs.webkit.org/show_bug.cgi?id=98295

        Reviewed by Eric Seidel.

        This patch adds per-component overflow guards for CSS selector specificity.
        Previously, we didn't guard against overflow. 
        Since we stored each component as a byte mapped into a single unsigned int for the whole specificity,
        256 of a particular simple selector was equivalent to 1 of the next-higher-group selector.
        This violated the Selectors specification,
        which requires the components to be compared lexicographically.

        Tests: /fast/selectors/specificity-overflow.html

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

2012-10-04  Enrica Casucci  <enrica@apple.com>

        Font::glyphDataAndPageForCharacter doesn't account for text orientation when using systemFallback on a cold cache.
        https://bugs.webkit.org/show_bug.cgi?id=98452.

        Reviewed by Dan Bernstein.

        The text orientation was considered only when there is a cache hit.
        This change moves the logic to handle text orientation to a separate
        inline function that is called also when the glyph is added to the cache.

        Test: fast/text/vertical-rl-rtl-linebreak.html

        * platform/graphics/FontFastPath.cpp:
        (WebCore::applyTextOrientationForCharacter): Added.
        (WebCore::Font::glyphDataAndPageForCharacter): Modified to use the new function in
        both cases of cold and warm cache.

2012-10-04  Adam Klein  <adamk@chromium.org>

        MutationRecord attributeName should be null for non attribute changes
        https://bugs.webkit.org/show_bug.cgi?id=98438

        Reviewed by Ojan Vafai.

        Test: fast/mutation/mutation-record-nullity.html

        * dom/MutationRecord.idl:

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Final part of "sync" to "flush" renaming
        https://bugs.webkit.org/show_bug.cgi?id=98430

        Reviewed by Tim Horton.

        Change method names on GraphicsLayer and GraphicsLayerClient that
        refer to "sync" to use the term "flush" instead, to be consistent
        with the rest of the code.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::flushCompositingState):
        (WebCore::GraphicsLayer::flushCompositingStateForThisLayerOnly):
        * platform/graphics/GraphicsLayerClient.h:
        (GraphicsLayerClient):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        (WebCore::GraphicsLayerBlackBerry::notifyFlushRequired):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::setNeedsCommit):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::flushCompositingState):
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerCA::platformCALayerDidCreateTiles):
        (WebCore::GraphicsLayerCA::positionForCloneRootLayer):
        (WebCore::GraphicsLayerCA::noteLayerPropertyChanged):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::notifyChange):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerTextureMapper::flushCompositingState):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::flushCompositingState):
        (WebCore::TextureMapperLayer::flushCompositingStateSelf):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (TextureMapperLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::notifyFlushRequired):
        * rendering/RenderLayerBacking.h:
        (RenderLayerBacking):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::notifyFlushRequired):

2012-10-04  Tab Atkins  <tabatkins@google.com>

        1ex should equal .5em when the font has no x-height metric
        https://bugs.webkit.org/show_bug.cgi?id=80360

        Reviewed by Eric Seidel.

        Updated FontMetrics and CSSPrimitiveValue to have/use an explicit "hasXHeight" flag to determine how to size an 'ex' unit.

        Updated a few of the platform font files to set the flag properly.

        Patch cleanup by David Barr <davidbarr@chromium.org>.

        Test: fast/css/ex-unit-with-no-x-height.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::computeLengthDouble):
        * platform/graphics/FontMetrics.h:
        (WebCore::FontMetrics::FontMetrics):
        (WebCore::FontMetrics::setXHeight):
        (FontMetrics):
        (WebCore::FontMetrics::hasXHeight):
        (WebCore::FontMetrics::setHasXHeight):
        (WebCore::FontMetrics::reset):
        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore::SimpleFontData::platformInit):

2012-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix after r130411. Add the right offset.
        Also use RefPtr instead of a raw pointer for next and previous pointers.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition):

2012-10-04  Alec Flett  <alecflett@chromium.org>

        IndexedDB: promote objectstore/index backend ids to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=97834

        Reviewed by Tony Chang.

        Expose int64-based database/objectStore/index ids to the renderer,
        step 1 of 2. Support both styles of createObjectStore and
        createIndex: those that take an explicit id, and those that take
        -1, meaning to autogenerate an id on the backend. In part 2, after
        the chromium side lands, support for the autogenerated ids will be
        removed. (See https://bugs.webkit.org/show_bug.cgi?id=98085)

        This is a part of larger refactoring work to ultimately make the interface
        between the frontend and the backend simpler.

        No new tests, extensive ASSERTs and existing tests cover correctness.

        * Modules/indexeddb/IDBBackingStore.h:
        (IDBBackingStore):
        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::openInternal):
        (WebCore::IDBDatabaseBackendImpl::metadata):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        (IDBDatabaseBackendImpl):
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (IDBDatabaseBackendInterface):
        * Modules/indexeddb/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::metadata):
        * Modules/indexeddb/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (IDBIndexBackendImpl):
        * Modules/indexeddb/IDBLevelDBBackingStore.cpp:
        (WebCore):
        (WebCore::getMaxObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::getIDBDatabaseMetaData):
        (WebCore::IDBLevelDBBackingStore::deleteDatabase):
        (WebCore::IDBLevelDBBackingStore::getObjectStores):
        (WebCore::setMaxObjectStoreId):
        (WebCore::IDBLevelDBBackingStore::createObjectStore):
        (WebCore::getMaxIndexId):
        (WebCore::setMaxIndexId):
        (WebCore::IDBLevelDBBackingStore::createIndex):
        * Modules/indexeddb/IDBLevelDBBackingStore.h:
        (IDBLevelDBBackingStore):
        * Modules/indexeddb/IDBMetadata.h:
        (WebCore::IDBDatabaseMetadata::IDBDatabaseMetadata):
        (IDBDatabaseMetadata):
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):
        (IDBObjectStoreMetadata):
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        (IDBIndexMetadata):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::metadata):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        * Modules/indexeddb/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (IDBObjectStoreBackendImpl):
        * Modules/indexeddb/IDBObjectStoreBackendInterface.h:
2012-10-04  Pravin D  <pravind.2k4@gmail.com>

        Layout broken after cloning and re-inserting a table with a misplaced <form>
        https://bugs.webkit.org/show_bug.cgi?id=86746

        Reviewed by Julien Chaffraix.

        There is a concept of demotion for a <form> contained in a table. A <form> is demoted if its immediate parent
        is either a <table>, table sections (tbody, etc) or a table row (tr). A renderer for such a <form> is created only
        if its display is one of the table display types (TABLE, INLINE_TABLE, TABLE_FOOTER_GROUP, etc).
        However when a <table> containing a demoted <form> is cloned, the <form> does not retain its demotion state and 
        results in the table getting improperly rendered.

        Test: fast/table/form-with-non-table-display-inside-table-elements.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::copyNonAttributePropertiesFromElement):
          Extended the virtual function for HTMLFormElement class specific implementation.
          The function is used to copy any necessary state information(member variables) associated with
          the <form> element being cloned to the current node.
          For HTMLFormElement node the member variable can be classified into five groups based on the 
          information they hold:
            1) Variables containing information regarding <form> subtree and elements associated with it.
               These get updated as and when an element is added to the <form> subtree.
            2) Variables containing <form> submit state information.
            3) Flag to hold information if reset() has been called.
            4) Flag(m_wasDemoted) that indicates whether the form is demoted or not, based on which it needs to
               be handled differently during creation of its renderer.
               This information is currently being updated only during the HTML tree construction phase.
            5) Flag(m_wasMalformed) to hold information if the <form> is malformed or not.

          Variables of group (1) will be updated as and when elements are added to the <form> subtree. Whereas,
          (2) and (3) hold instance specific information, thus copying them is not required. Also (5) is currently not
          being used(not set by any code).

          On the other hand, (4) is required to be copied during cloning as this information cannot be accessed
          during the cloning process.

        (WebCore):
        * html/HTMLFormElement.h:
          Added copyNonAttributePropertiesFromElement() declaration.

2012-10-04  Dean Jackson  <dino@apple.com>

        Attribute and Uniform variable names need translation in shader
        https://bugs.webkit.org/show_bug.cgi?id=70989

        Reviewed by Tim Horton (and Darin Adler).

        WebGL specifies some maximum lengths for variable names (attributes
        and uniforms). Also, some GL drivers have issues with long names. For
        that reason, ANGLE has an option to rewrite the shader, translating
        long names into short names. Turning this on helps shaders compile,
        but we need to keep a mapping between the original names and the
        translated names, so that we bind to the right location from user code
        (which won't ever see the translated source).

        This provided an opportunity to clean up some other bits of code:
        CSS Filters examined the uniform names after a compilation; It can
        now use the variable name map. I also added a typedef for the
        HashMaps that keep the shader, the source code and the variable name
        mappings.

        I also opened a followup bug to make sure these tables are deleted
        when the associated shaders (or linked programs) go away:
        https://bugs.webkit.org/show_bug.cgi?id=98204

        Covered by existing tests (with some enhancements):
        - fast/canvas/webgl/attrib-location-length-limits.html:
        - fast/canvas/webgl/uniform-location-length-limits.html:

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo): Extracts all the information on symbols (either attributes
        or uniforms) from the newly compiled shader.
        (WebCore):
        (WebCore::ANGLEWebKitBridge::compileShaderSource): New method name.
        * platform/graphics/ANGLEWebKitBridge.h:
        (WebCore::getUniforms): Deleted this method.
        (WebCore::ANGLEShaderSymbol::isSampler): Make sure the symbol is a uniform.
        (ANGLEWebKitBridge):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::SymbolInfo::SymbolInfo): A new object that
        holds the size, type and translated name of a symbol from a WebGL shader.
        (ShaderSourceEntry):
        (WebCore::GraphicsContext3D::ShaderSourceEntry::ShaderSourceEntry): Now keeps track
        of the translated source code and symbol mappings.
        (WebCore::GraphicsContext3D::ShaderSourceEntry::symbolMap): Helper function to
        get the member variable corresponding to the type of symbol you're asking fo.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        (WebCore::CustomFilterValidatedProgram::CustomFilterValidatedProgram): Calls new method
        name which also produces a set of symbols to examine.
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE): We now can pass
        in some extra compile options to do translation of long symbol names. Also fill the
        map of translated symbol names.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::mappedSymbolName): Returns the mapped name for
        a shader symbol if it was translated during compilation.
        (WebCore):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getUniformLocation):

2012-10-04  Alpha Lam  <hclam@chromium.org>

        [skia] Drawing a subrect of bitmap image is misaligned
        https://bugs.webkit.org/show_bug.cgi?id=95121

        Reviewed by Stephen White.

        When drawing a subrect of BitmapImage and the subrect is not aligned
        to integer boundaries, skia expands it to the closest enclosing integer
        rectangle. This creates prominent rendering artifacts when an image
        is used as background and its sub-regions are invalidated frequently.

        This patch fixes the problem by doing alignment to integer boundaries
        and clipping for both cases of RESAMPLE_AWESOME and RESAMPLE_LINEAR.

        A clip rect is applied to the canvas using original destination
        rectangle, while source and destination rectangles are enlarged
        appropriately to ensure source rectangle is aligned.

        This patch also fixes a closely related problem. In RESAMPLE_AWESOME
        resampling mode the previous algorithm applies different approximated
        scale factor for each scaled image fragment. This caused the stitched
        image to look ugly.

        Scale factor is approximated using entire image size, this gives a
        more accurate approximation because of greater denominator and a
        consistent scale factor across all fragments.

        Changes in Skia enable caching of the scaled image and return the
        scaled fragment because scale factor is now consistent for all
        fragments.

        Tests: fast/images/paint-subrect-grid.html
               fast/images/paint-subrect.html
               fast/images/repaint-subrect-grid.html

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode): Use float for width and height.
        (WebCore):
        (WebCore::areBoundariesIntegerAligned):
        (WebCore::computeBitmapDrawRects):
        (WebCore::extractScaledImageFragment):
        (WebCore::drawResampledBitmap): New algorithm for drawing scaled image fragment.
        (WebCore::paintSkBitmap):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::draw): Use SkRect instead of SkIRect.
        (WebCore::BitmapImageSingleFrameSkia::draw):
        * platform/graphics/skia/NativeImageSkia.cpp:
        Changing the algorithm for extracting a scaled image fragment.
        A fragment is now identified by (scaledImageSize, scaledImageSubset).
        (WebCore::NativeImageSkia::hasResizedBitmap):
        (WebCore::NativeImageSkia::resizedBitmap):
        (WebCore::NativeImageSkia::shouldCacheResampling):
        (WebCore::NativeImageSkia::CachedImageInfo::CachedImageInfo):
        (WebCore):
        (WebCore::NativeImageSkia::CachedImageInfo::isEqual):
        (WebCore::NativeImageSkia::CachedImageInfo::set):
        (WebCore::NativeImageSkia::CachedImageInfo::rectInSubset):
        * platform/graphics/skia/NativeImageSkia.h:
        (NativeImageSkia):
        (CachedImageInfo):

2012-10-03  Ryosuke Niwa  <rniwa@webkit.org>

        ReplaceSelectionCommand should merge text nodes
        https://bugs.webkit.org/show_bug.cgi?id=98188

        Reviewed by Levi Weintraub.

        Added mergeTextNodesAroundPosition to ReplaceSelectionCommand to merge text nodes after the replace in
        completeHTMLReplacement. Also fixed a bunch of bugs in other classes and functions to make this work.

        This behavior change is tested by existing tests.

        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): When splitting a text node, place the insertionPosition
        at the end of the first half. Leaving it at the beginning of the second half confuses the rest of the code in
        the function. However, the logic to handle the "insignificant" white spaces needs the position at the start of
        the second half. So keep this position.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Update visibleStart after inserting a paragraph separator so that
        the logic to cleanup the nested div checks the right condition (right beneath it starting with a long comment).
        (WebCore::ReplaceSelectionCommand::addSpacesForSmartReplace): Insert a space for smart paste at the appropriate
        offset instead of at the end of endNode. Also update the layout before obtaining startDownstream as we may have 
        modified the DOM by inserting a space for endNode. Finally, a non-breaking space should be treated like a space
        isCharacterSmartReplaceExempt for the purpose of smart replace. e.g. if we're inserting "world" after
        "hello&nbsp;", we shouldn't be inserting another space between "hello" and "world".
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement):
        (WebCore::ReplaceSelectionCommand::mergeTextNodesAroundPosition): Added. Merge text nodes around position, and
        adjust position and positionOnlyToBeUpdated accordingly. We need to call updatePositionForNodeRemoval when
        positions were before or after the text node.
        * editing/ReplaceSelectionCommand.h:
        (ReplaceSelectionCommand):

2012-10-04  Tony Chang  <tony@chromium.org>

        Fix <input type="month"> tests
        https://bugs.webkit.org/show_bug.cgi?id=98426

        Reviewed by Ojan Vafai.

        The month picker uses flexbox and assumes that it will be aligned with
        the last line box. This looks visually correct. I will follow up on
        www-style to see what the expected behavior is.

        Tests: fast/forms/month-multiple-fields tests cover this.

        * rendering/RenderFlexibleBox.cpp:
        * rendering/RenderFlexibleBox.h:

2012-10-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130396.
        http://trac.webkit.org/changeset/130396
        https://bugs.webkit.org/show_bug.cgi?id=98421

        This patch is causing crashes on 4 tests on Lion Debug and
        Mountain Lion Debug (Requested by jernoble on #webkit).

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::calculateCompositedBounds):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        (Backup):

2012-10-04  Tony Chang  <tony@chromium.org>

        inline-flex baseline is sometimes wrong
        https://bugs.webkit.org/show_bug.cgi?id=96188

        Reviewed by Ojan Vafai.

        Implement the necessary methods to get the proper baseline alignment of flexbox.
        We were falling back to the inline-block behavior.

        Test: css3/flexbox/flexbox-baseline.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::baselinePosition): Used to get the baseline of the box.
        Mostly just the first line box baseline.
        (WebCore):
        (WebCore::RenderFlexibleBox::lastLineBoxBaseline): This is used for getting the baseline when in an inline-block.
        We actually don't want the last line, but the flexbox's baseline.
        (WebCore::RenderFlexibleBox::firstLineBoxBaseline): Compute the baseline according to the rules in the spec.
        (WebCore::RenderFlexibleBox::repositionLogicalHeightDependentFlexItems): Keep track of the number of children on the
        first line so we don't have to re-compute this when getting the baseline.
        (WebCore::RenderFlexibleBox::crossAxisExtentForChild): Make const.
        (WebCore::RenderFlexibleBox::mainAxisExtentForChild): Make const.
        (WebCore::RenderFlexibleBox::hasAutoMarginsInCrossAxis): Make const.
        * rendering/RenderFlexibleBox.h: Add a size_t to keep track of how many children are in the first line.

2012-10-04  Xianzhu Wang  <wangxianzhu@chromium.org>

        [Chromium] Should set unitsPerEm in SimpleFontDataSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=98100

        Reviewed by Stephen White.

        At least on chromium-linux and chromium-android, unitsPerEm was not set
        according to the information in the font, causing at least problems in
        OpenTypeVerticalData when calculating vertical advance.

        Test: fast/writing-mode/vertical-font-vmtx-units-per-em.html

        * platform/graphics/skia/SimpleFontDataSkia.cpp:
        (WebCore::SimpleFontData::platformInit):

2012-10-04  Simon Fraser  <simon.fraser@apple.com>

        Standardize on "flush" terminology for compositing layer flushing/syncing
        https://bugs.webkit.org/show_bug.cgi?id=98321

        Reviewed by Simon Fraser.

        Rename compositing-related methods that refer to "syncing" to instead
        refer to "flushing".

        * WebCore.exp.in:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::scheduleCompositingLayerFlush):
        * page/ChromeClient.h:
        (ChromeClient):
        * page/FrameView.cpp:
        (WebCore::FrameView::flushCompositingStateForThisFrame):
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlush):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):

2012-10-04  Peter Rybin  <peter.rybin@gmail.com>

        Web Inspector: expose object internal properties such as PrimitiveValue or BoundThis
        https://bugs.webkit.org/show_bug.cgi?id=94397

        Reviewed by Yury Semikhatsky.

        Internal property access is built from Injected Script to V8 debug API. JSC binding
        has a stub imlpementation. Protocol is updated to explicitly reflect internal properties.

        Test: inspector-protocol/runtime-getProperties.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::getInternalProperties):
        (WebCore):
        * bindings/v8/DebuggerScript.js:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::getInternalProperties):
        (WebCore):
        * bindings/v8/ScriptDebugServer.h:
        (ScriptDebugServer):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::getInternalPropertiesCallback):
        (WebCore):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getInternalProperties):
        (WebCore):
        * inspector/InjectedScript.h:
        (InjectedScript):
        * inspector/InjectedScriptHost.idl:
        * inspector/InjectedScriptSource.js:
        (.):
        * inspector/Inspector.json:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):

2012-10-04  Sami Kyostila  <skyostil@chromium.org>

        Fixed position visibility check does not consider descendants
        https://bugs.webkit.org/show_bug.cgi?id=98144

        Reviewed by Simon Fraser.

        The check against creating composition layers for invisible fixed positioned
        elements is too aggressive in that it does not consider descendants of the
        fixed positioned element that may be visible even though the element itself is
        out of view.

        Fix the problem by calculating the true composited bounds of the fixed
        element instead of just using the size of the fixed layer. Because calculating
        the true bounds may be expensive, it is only done if the fixed layer itself is
        invisible.

        Test: compositing/layer-creation/fixed-position-absolute-descendant.html

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

2012-10-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: When uiSourceCode content has diverged from VM script, call frames should be shown in temporary script based uiSourceCodes.
        https://bugs.webkit.org/show_bug.cgi?id=98385

        Reviewed by Pavel Feldman.

        When javaScriptSource diverges from VM, ResourceScriptMapping now switches debugging
        to temporary VM scripts based uiSourceCode with isDivergedReplacement property set.
        Added hasDivergedFromVM and isDivergingFromVM properties to JavaScriptSource.
        JavaScriptSourceFrame and ScriptSnippetsModel are updated to process breakpoint changes correctly.

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.restoreBreakpoints):
        (WebInspector.BreakpointManager.prototype._uiSourceCodeRemoved):
        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource.prototype.workingCopyCommitted):
        (WebInspector.JavaScriptSource.prototype.workingCopyChanged):
        (WebInspector.JavaScriptSource.prototype.fireHasDivergedFromVMChanged):
        * inspector/front-end/JavaScriptSourceFrame.js:
        (WebInspector.JavaScriptSourceFrame.prototype.commitEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._hasDivergedFromVM):
        (WebInspector.JavaScriptSourceFrame.prototype.onTextChanged):
        (WebInspector.JavaScriptSourceFrame.prototype._getBreakpointDecorations):
        (WebInspector.JavaScriptSourceFrame.prototype._muteBreakpointsWhileEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._didEditContent):
        (WebInspector.JavaScriptSourceFrame.prototype._restoreBreakpointsAfterEditing):
        (WebInspector.JavaScriptSourceFrame.prototype._addBreakpointDecoration):
        * inspector/front-end/ResourceScriptMapping.js:
        (WebInspector.ResourceScriptMapping.prototype.rawLocationToUILocation):
        (WebInspector.ResourceScriptMapping.prototype._hasDivergedFromVMChanged):
        (WebInspector.ResourceScriptMapping.prototype._bindUISourceCodeToScripts):
        (WebInspector.ResourceScriptMapping.prototype._getOrCreateTemporaryUISourceCode):
        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        (WebInspector.ScriptSnippetModel.prototype._restoreBreakpoints):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):
        * inspector/front-end/UISourceCode.js:
        (WebInspector.UISourceCode.prototype.formatted):

2012-10-04  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: Scripts panel should not automatically switch to snippet evaluation when previously evaluated snippet is edited.
        https://bugs.webkit.org/show_bug.cgi?id=98402

        Reviewed by Pavel Feldman.

        Scripts panel does not automatically switch to snippet evaluation when
        one edits previously evaluated snippet.

        * inspector/front-end/ScriptSnippetModel.js:
        (WebInspector.ScriptSnippetModel.prototype._createUISourceCodeForScript):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._revealExecutionLine):

2012-10-04  Balazs Kelemen  <kbalazs@webkit.org>

        Don't allow to disable compositing in forced compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=98048

        Reviewed by Jocelyn Turcotte.

        Make forced compositing mode imply accelerated compositing. This will
        avoid unexpected situations for platforms that don't want to support
        the non-accelerated rendering path.

        Covered by existing tests.

        * WebCore.exp.in: Export Settings::setAcceleratedCompositingEnabled
        because it has been deinlined.
        * page/Settings.cpp:
        (WebCore::Settings::setAcceleratedCompositingEnabled):
        (WebCore::Settings::setForceCompositingMode):
        (WebCore):
        * page/Settings.h:
        (Settings):
        (WebCore::Settings::forceCompositingMode): Make it const as a side fix.

2012-10-04  Harald Alvestrand  <hta@google.com>

        Change RTCPeerConnection GetStats to use Date timestamp format
        https://bugs.webkit.org/show_bug.cgi?id=98263

        Reviewed by Yury Semikhatsky.

        Tested by extension to RTCPeerConnection-stats test.

        * Modules/mediastream/RTCStatsElement.cpp:
        (WebCore::RTCStatsElement::create):
        (WebCore::RTCStatsElement::RTCStatsElement):
        * Modules/mediastream/RTCStatsElement.h: long -> double
        (RTCStatsElement):
        (WebCore::RTCStatsElement::timestamp):
        * Modules/mediastream/RTCStatsElement.idl: long -> Date
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::addElement):
        * Modules/mediastream/RTCStatsReport.h:
        (RTCStatsReport):
        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::addElement):
        * Modules/mediastream/RTCStatsResponse.h:
        (RTCStatsResponse):
        * platform/chromium/support/WebRTCStatsResponse.cpp:
        (WebKit::WebRTCStatsResponse::addElement):
        * platform/mediastream/RTCStatsResponseBase.h:
        (RTCStatsResponseBase):

2012-10-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r130377.
        http://trac.webkit.org/changeset/130377
        https://bugs.webkit.org/show_bug.cgi?id=98392

        Chromium Win compilation is broken (Requested by yurys on
        #webkit).

        * Modules/mediastream/RTCStatsElement.cpp:
        (WebCore::RTCStatsElement::create):
        (WebCore::RTCStatsElement::RTCStatsElement):
        * Modules/mediastream/RTCStatsElement.h:
        (RTCStatsElement):
        (WebCore::RTCStatsElement::timestamp):
        * Modules/mediastream/RTCStatsElement.idl:
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::addElement):
        * Modules/mediastream/RTCStatsReport.h:
        (RTCStatsReport):
        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::addElement):
        * Modules/mediastream/RTCStatsResponse.h:
        (RTCStatsResponse):
        * platform/chromium/support/WebRTCStatsResponse.cpp:
        (WebKit::WebRTCStatsResponse::addElement):
        * platform/mediastream/RTCStatsResponseBase.h:
        (RTCStatsResponseBase):

2012-10-04  Harald Alvestrand  <hta@google.com>

        Change RTCPeerConnection GetStats to use Date timestamp format
        https://bugs.webkit.org/show_bug.cgi?id=98263

        Reviewed by Adam Barth.

        Tested by extension to RTCPeerConnection-stats test.

        * Modules/mediastream/RTCStatsElement.cpp:
        (WebCore::RTCStatsElement::create):
        (WebCore::RTCStatsElement::RTCStatsElement):
        * Modules/mediastream/RTCStatsElement.h: long -> double
        (RTCStatsElement):
        (WebCore::RTCStatsElement::timestamp):
        * Modules/mediastream/RTCStatsElement.idl: long -> Date
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore::RTCStatsReport::addElement):
        * Modules/mediastream/RTCStatsReport.h:
        (RTCStatsReport):
        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::addElement):
        * Modules/mediastream/RTCStatsResponse.h:
        (RTCStatsResponse):
        * platform/chromium/support/WebRTCStatsResponse.cpp:
        (WebKit::WebRTCStatsResponse::addElement):
        * platform/mediastream/RTCStatsResponseBase.h:
        (RTCStatsResponseBase):

2012-10-05  Kent Tamura  <tkent@chromium.org>

        [Chromium] Enable the multiple fields UI for input[type=date]
        https://bugs.webkit.org/show_bug.cgi?id=98351

        Reviewed by Hajime Morita.

        Touch files related to ENABLE_INPUT_TYPE_DATE_LEGACY_UI to avoid build
        issues.

        No new tests. Many tests will be landed shortly.

        * html/DateInputType.cpp:
        * html/DateInputType.h:

2012-10-04  Kent Tamura  <tkent@chromium.org>

        Add code for input[type=date] with the multiple fields UI
        https://bugs.webkit.org/show_bug.cgi?id=98340

        Reviewed by Hajime Morita.

        The new code is available if !ENABLE(INPUT_TYPE_DATE_LEGACY_UI). At this
        moment, there are no platforms enabling the new code. We're going to
        enable it soon on desktop Chromium, and add tests. Then we're going to
        remove the code for ENABLE(INPUT_TYPE_DATE_LEGACY_UI).

        ENABLE(INPUT_TYPE_DATE_LEGACY_UI) means the current UI; input[type=date]
        is represetnted as a kind of text field, and it has code to invoke a
        calendar picker.
        ENABLE(CALENDAR_PICKER) was used wrongly. It meant calendar picker
        support + text field UI of input[type=date]. Now it means only calendar
        picker support.

        * html/DateInputType.h:
        (WebCore): If ENABLE(INPUT_MULTIPLE_FIELDS_UI) &&
        !ENABLE(INPUT_TYPE_DATE_LEGACY_UI), change the base class to the class
        for multiple fields UI.
        (DateInputType): Wrap the code for text fields behavior and calendar
        picker UI with ENABLE(INPUT_TYPE_DATE_LEGACY_UI). Add functions for
        ENABLE(INPUT_MULTIPLE_FIELDS_UI)
        * html/DateInputType.cpp:
        (WebCore::DateInputType::DateInputType):
        Change the flag name; CALENDAR_PICKER -> INPUT_TYPE_DATE_LEGACY_UI
        (WebCore): ditto.
        (WebCore::DateInputType::formatDateTimeFieldsState):
        A callback for multiple fields UI. This constructs a string value from
        each of values of multiple fields.
        Note that we don't need to do +1 to month().
        (WebCore::DateInputType::setupLayoutParameters):
        A callback for multiple fields UI. Passes information to build UI.

        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        Add m_pickerIndicatorIsAlwaysVisible member, wrap some members with flags.
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType):
        Initialize m_pickerIndicatorIsAlwaysVisible.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        If a type supports calendar picker, we should always show the picker
        indicator. We introduce m_pickerIndicatorIsAlwaysVisible flag, and ask
        RenderTheme for support status of each of types.
        Add a local variable 'document' to avoid multiple element()->document().
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updatePickerIndicatorVisibility):
        - If m_pickerIndicatorIsAlwaysVisible, don't hide the picker indicator element.
        - Wrap the code with appropriate flags.

        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::supportsCalendarPicker): Added.
        * rendering/RenderThemeChromiumMac.h: Override supportsCalendarPicker.
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::supportsCalendarPicker):
        Added. Delegate to RenderThemeChromiumCommon.
        * rendering/RenderThemeChromiumSkia.h: Override supportsCalendarPicker.
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::supportsCalendarPicker):
        Added. Delegate to RenderThemeChromiumCommon.
        * rendering/RenderThemeChromiumCommon.h:
        (RenderThemeChromiumCommon): Declare supportsCalendarPicker.
        * rendering/RenderThemeChromiumCommon.cpp:
        (WebCore::RenderThemeChromiumCommon::supportsCalendarPicker):
        Returns true if the type is "date."

        * html/DateTimeFieldsState.h:
        (DateTimeFieldsState): Add a comment for the m_month field.

2012-10-04  Kent Tamura  <tkent@chromium.org>

        DateTimeYearFieldElement should respect min/max values specified by page authors
        https://bugs.webkit.org/show_bug.cgi?id=98227

        Reviewed by Hajime Morita.

        Before this patch, we always set 1 to the minimum limit and 275760 to
        the maximum limit for a year field, and a user can specify any year
        regardless of min/max attributes. Such wide range is unnecessary for
        normal applications and we should provide a way to limit the range.

        Test: fast/forms/month-multiple-fields/month-multiple-fields-keyboard-events.html

        * html/shadow/DateTimeFieldElements.h:
        To add four constructor arguments, introduce Parameters struct.
        Actually, we add the followings;
         - minimum year in UI
         - maximum year in UI
         - min attribute is specified
         - max attribute is specified
        (Parameters):
        (WebCore::DateTimeYearFieldElement::Parameters::Parameters):
        (DateTimeYearFieldElement):
        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore::DateTimeYearFieldElement::DateTimeYearFieldElement): ditto.
        (WebCore::DateTimeYearFieldElement::create): ditto.
        (WebCore::DateTimeYearFieldElement::clampValueForHardLimits):
        Override DateTimeNumericFieldElement::clampValueForHardLimits.
        By this, we allow to set out-of-range year values.
        (WebCore::currentFullYear): A helper to get the current year.
        (WebCore::DateTimeYearFieldElement::defaultValueForStepDown):
        If the field has no value and step down operation occurs,
         - the field has the current year if the max attribute is not specified.
         - the field has the maximum value otherwise.
        (WebCore::DateTimeYearFieldElement::defaultValueForStepUp): Similar change.

        * html/shadow/DateTimeNumericFieldElement.h:
        (DateTimeNumericFieldElement): Declare clampValueForHardLimits.
        * html/shadow/DateTimeNumericFieldElement.cpp:
        (WebCore::DateTimeNumericFieldElement::clampValueForHardLimits):
        (WebCore::DateTimeNumericFieldElement::setValueAsInteger):
        Call clampValueForHardLimits instead of clampValue in order to
        distinguish limits for UI and limits for internal value update.

        * html/shadow/DateTimeEditElement.h:
        (LayoutParameters): Add minimumYear and maximumYear members.
        (WebCore::DateTimeEditElement::LayoutParameters::LayoutParameters):
        Initialize minimumYear and maximumYear.
        (WebCore::DateTimeEditElement::LayoutParameters::undefinedYear):
        Represents 'undefined' value for minimumYear and maximumYear.
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditBuilder::visitField):
        Preparas DateTimeYearField::Parameters and pass it to the DateTimeYearField factory.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::fullYear):
        A helper to get a year value from an attribute value string.
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType): Add fullYear().

        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setupLayoutParameters):
        Set LayoutParameters::minimumYear and maximumYear.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::setupLayoutParameters): ditto.
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::setupLayoutParameters): ditto.
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::setupLayoutParameters): ditto.

2012-10-03  Adam Barth  <abarth@webkit.org>

        Unreviewed. Fix parse error in vcproj file.

        * WebCore.vcproj/WebCore.vcproj:

2012-10-03  Keishi Hattori  <keishi@webkit.org>

        Implement localizeValue for TimeInputType
        https://bugs.webkit.org/show_bug.cgi?id=98237

        Reviewed by Kent Tamura.

        We want to localize time values for the suggestion picker.
        DateTimeStringBuilder parses a format and creates a formatted string.

        Added chromium unit test LocaleMacTest.formatTime

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::shouldHaveSecondField): Moved from LayoutParameters because we want to use it inside localizeValue.
        (WebCore):
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setupLayoutParameters):
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::setupLayoutParameters):
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::localizeValue):
        (WebCore):
        (WebCore::TimeInputType::setupLayoutParameters):
        * html/TimeInputType.h:
        (TimeInputType):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore):
        * html/shadow/DateTimeEditElement.h:
        (WebCore::DateTimeEditElement::LayoutParameters::LayoutParameters):
        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::formatDateTime): Calls Localizer::formatDateTime if the date component is not a date.
        * platform/text/LocaleICU.h:
        (LocaleICU):
        * platform/text/LocaleWin.cpp:
        (WebCore::LocaleWin::formatDateTime): Calls Localizer::formatDateTime if the date component is not a date.
        * platform/text/LocaleWin.h:
        (LocaleWin):
        * platform/text/LocaleNone.cpp:
        (LocaleNone):
        (WebCore::LocaleNone::formatDateTime):
        * platform/text/Localizer.cpp:
        (DateTimeStringBuilder):
        (WebCore):
        (WebCore::DateTimeStringBuilder::DateTimeStringBuilder): Takes a
        Localizer pointer. This is used inside the Localizer so the Localizer
        will out live the DateTimeStringBuilder.
        (WebCore::DateTimeStringBuilder::build): Builds a localized string for the given format.
        (WebCore::DateTimeStringBuilder::zeroPadString):
        (WebCore::DateTimeStringBuilder::appendNumber): Appends a number with left zero padding to match width.
        (WebCore::DateTimeStringBuilder::visitField):
        (WebCore::DateTimeStringBuilder::visitLiteral):
        (WebCore::DateTimeStringBuilder::toString): Returns the localized string.
        (WebCore::Localizer::formatDateTime):
        * platform/text/Localizer.h:
        * platform/text/mac/LocaleMac.h:
        (LocaleMac):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::formatDateTime): Calls Localizer::formatDateTime if the date component is not a date.

2012-10-03  Douglas Stockwell  <dstockwell@chromium.org>

        Chromium needs support for border radius clipping
        https://bugs.webkit.org/show_bug.cgi?id=69866

        Reviewed by Stephen White.

        Changes to make this suitably efficient have already landed upstream in skia:
        http://code.google.com/p/skia/source/detail?r=2924

        Covered by existing tests.

        * rendering/RenderLayer.cpp:

2012-10-03  Benjamin Poulain  <bpoulain@apple.com>

        Simplify attribute access in Element::computeInheritedLanguage
        https://bugs.webkit.org/show_bug.cgi?id=98327

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        By using Element::fastGetAttribute(), we check for the existence of attributeData twice
        and do a bunch of useless operation on AtomicString.

        By using ElementAttributeData directly, we can cut it to the two important branch.

2012-10-03  Kangil Han  <kangil.han@samsung.com>

        Fix unused parameter compile warnings.
        https://bugs.webkit.org/show_bug.cgi?id=98243

        Reviewed by Alexey Proskuryakov.

        Fixed unused parameter compile warning by removing parameter names and adding UNUSED_PARAM usage.

        * plugins/PluginDebug.cpp:
        (WebCore::prettyNameForNPPVariable):
        * plugins/npapi.cpp:
        (NPN_MemFlush):
        (NPN_RequestRead):
        (NPN_GetJavaPeer):

2012-10-03  Adam Barth  <abarth@webkit.org>

        Measure the usage of WebSQLDatabase
        https://bugs.webkit.org/show_bug.cgi?id=98330

        Reviewed by Ojan Vafai.

        WebKit is the only engine that implements WebSQLDatabase. This patch
        causes us to measure its usage so we can see how quickly web sites move
        to IndexedDB.

        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * page/FeatureObserver.h:

2012-10-03  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        [soup] WebKit crashes when doing a http request
        https://bugs.webkit.org/show_bug.cgi?id=98055

        Reviewed by Martin Robinson.

        On i386, (d->m_firstRequest.timeoutInterval() * 1000) results in 0 if
        timeoutInterval() is INT_MAX. So, set default timeout to 0 to avoid
        calling soup_add_timeout with a 0 value.

        Also, if resource handle is deleted before "request-started" signal is
        emitted, soupMessage handle points to a deleted object, and a crash
        occurs. So, reset soupMessage handle data in
        cleanupSoupRequestOperation so it won't happen anymore.

        Lastly, if timeout occurs before request is completed, handle is
        deleted, and crash occurs in sendRequestCallback due to an early
        destroyed handle. To avoid that, call handle->cancel in
        requestTimeoutCallback. There is no need to call
        cleanupSoupRequestOperation anymore since handle->cancel will trigger
        sendRequestCallback, and as handle is deleted,
        cleanupSoupRequestOperation will be called automatically.

        No new tests yet, tests will be added with the patch in bug 74802.

        * platform/network/ResourceRequestBase.cpp:
        (WebCore):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::ResourceHandle::platformSetDefersLoading):
        (WebCore::requestTimeoutCallback):

2012-10-03  Adam Barth  <abarth@webkit.org>

        Remove support for ENABLE(LEGACY_WEBKIT_BLOB_BUILDER)
        https://bugs.webkit.org/show_bug.cgi?id=98301

        Reviewed by Eric Seidel.

        According to anonymous usage statistics, the APIs guarded by
        ENABLE(LEGACY_WEBKIT_BLOB_BUILDER) are used on approximately 0.006% of
        web pages. Given that this feature is only enabled in GTK and Chromium,
        it seems likely that we should remove it.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.features.am:
        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/WebKitBlobBuilder.idl: Removed.
        * page/DOMWindow.idl:

2012-10-03  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=98313
        ScrollingStateNode should keep a Vector of children instead of child 
        pointers

        Reviewed by Simon Fraser.

        This patch re-names ScrollingStateNode::cloneNode() to 
        ScrollingStateNode::cloneAndResetNode(). The new function resets the 
        change properties of the current node after cloning it, and it also 
        takes care of cloning children, which the old function did not do.

        m_firstChild and m_nextSibling are gone. Use the m_children Vector 
        instead.
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::cloneAndResetChildNodes):
        (WebCore::ScrollingStateNode::appendChild):
        * page/scrolling/ScrollingStateNode.h:
        (ScrollingStateNode):
        (WebCore::ScrollingStateNode::parent):
        (WebCore::ScrollingStateNode::setParent):

        Reset the change properties and clone children in cloneAndResetNode()
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::cloneAndResetNode):
        * page/scrolling/ScrollingStateScrollingNode.h:

        Yay, this function can be vastly simplified now that we don't have 
        those messy child and sibling pointers.
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::commit):

2012-10-03  Ojan Vafai  <ojan@chromium.org>

        Replace uses of -webkit-box-sizing with box-sizing
        https://bugs.webkit.org/show_bug.cgi?id=98312

        Reviewed by Tony Chang.

        No need to use the prefixed version when the unprefixed works the same.
        No new tests since there's no change in behavior..

        * css/html.css:

2012-10-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Don't do full commit for empty transactions
        https://bugs.webkit.org/show_bug.cgi?id=89239

        Reviewed by Tony Chang.

        Don't bother creating a leveldb write batch if there's nothing in the transaction
        to commit. Note that a read-only transaction may still have index cleanup so may
        not be an empty transaction.

        This cuts the Lookup2 benchmark in http://reyesr.github.com/html5-storage-benchmark/
        from 70s to 2s.

        Covered by existing tests, e.g. storage/indexeddb/transaction-basics.html

        * platform/leveldb/LevelDBTransaction.cpp:
        (WebCore::LevelDBTransaction::commit):

2012-10-03  Adam Klein  <adamk@chromium.org>

        Remove bogus FIXME from Document.idl
        https://bugs.webkit.org/show_bug.cgi?id=98302

        Reviewed by Adam Barth.

        The FIXME claimed that document.body throwing an exception was not
        specced, but in fact it is:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#dom-document-body

        * dom/Document.idl:

2012-10-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Memory leak when deleting object stores with indexes
        https://bugs.webkit.org/show_bug.cgi?id=98292

        Reviewed by Tony Chang.

        Reference cycles between IDBObjectStore and IDBIndex instances are explicitly
        broken when the transaction completes (and the spec allows traversal to fail).
        Deleted stores need to have the reference cycle broken too.

        Caught by running valgrind over: storage/indexeddb/keypath-basics.html

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStoreDeleted): Add store to set.
        (WebCore::IDBTransaction::dispatchEvent): Notify stores in set.
        * Modules/indexeddb/IDBTransaction.h: Add set of deleted stores.

2012-10-03  Adam Barth  <abarth@webkit.org>

        CSSNamespace.h is empty and should be deleted
        https://bugs.webkit.org/show_bug.cgi?id=98304

        Reviewed by Eric Seidel.

        There's no reason to have this file in the repository.

        * GNUmakefile.list.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSNamespace.h: Removed.

2012-10-03  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        Build failure with css filters enabled and accelerated compositing disabled
        https://bugs.webkit.org/show_bug.cgi?id=95908

        Reviewed by Tony Chang.

        Do not try to setBackingNeedsRepaint when building without accelerated
        compositing.

        Also, allow painting with filter (paintsWithFilters returns true if
        renderer has filter) when accelerated compositing is not enabled.

        No functional change, so no new tests.

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

2012-10-03  Emil A Eklund  <eae@chromium.org>

        Round image sizes when zooming
        https://bugs.webkit.org/show_bug.cgi?id=98205

        Reviewed by Eric Seidel.

        We currently floor image sizes when zooming which can result in
        images being rendered at one pixel less than the actual size.
        This is especially likely to happen for very large images.

        Test: fast/sub-pixel/zoomed-image-tiles.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):

2012-10-03  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [WK2] PageViewportController.cpp is supposed to be a generic WebKit2 file but only works with Qt port.
        https://bugs.webkit.org/show_bug.cgi?id=98186

        Reviewed by Noam Rosenthal.

        Remove the implicit conversion from WebCore::FloatSize to QSize.

        * platform/graphics/FloatSize.h:
        (FloatSize):

2012-10-03  Levi Weintraub  <leviw@chromium.org>

        [Sub-pixel layout] incorrect rendering when painting sub-layers as their own root
        https://bugs.webkit.org/show_bug.cgi?id=97484

        Reviewed by Eric Seidel.

        When in compositing mode, layer painting can be triggered through the backing store. When this
        happens, a non-top-level RenderLayer is called to paint as its own root. Normally, we attempt to preserve
        the proper sub-pixel accumulation through layers to their children, but since we're not
        starting with the top-level layer, we haven't properly accumulated one, and convertToLayerCoords,
        another source of correctly getting the sub-pixel offset for a layer, also avoids crawling
        past the listed root layer.

        When painting a root layer, we're aligned to the surface we're painting to, so we round our
        offset to avoid moving objects around.

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

2012-10-03  Jeff Timanus  <twiz@chromium.org>

        [chromium] Expose settings value to conditionally enable pinch-zoom scaling in the Chromium compositor.  The
        flag defaults to disabled, so this change should be a no-op for scaling/scrolling behaviour.
        https://bugs.webkit.org/show_bug.cgi?id=93292

        Reviewed by James Robinson.

        Tests:  Existing page-scale layout tests.

        * page/Frame.cpp:
        (WebCore::Frame::frameScaleFactor):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setApplyPageScaleFactorInCompositor):
        (WebCore::Settings::applyPageScaleFactorInCompositor):
        (Settings):

2012-10-03  Stephen Chenney  <schenney@chromium.org>

        Font data is purged while fonts are still using it
        https://bugs.webkit.org/show_bug.cgi?id=93640

        Reviewed by Eric Seidel.

        Move the handling of custom font pruning from Document to FontFallbackList.
        The previous inplementation allowed fonts to be removed before all their
        clients were done. This change moves handling of custom font purging to the
        FontFallbackList class, which is the shared object that is only removed
        when all clients of a font are done with it. This fixes a crash in Angry
        Birds due to a seamless iframe and some failing tests in fast/frames/seamless.

        The specific element that causes problems is:
        <iframe id="ingame_frame0" name="ingame_frame0" frameborder="0" seamless="true"
          src="http://chrome.angrybirds.com/ingame_graphic.html"
          onload="this.style.opacity = 1; parent.adLoaded();" scrolling="no"
          style="opacity: 1; -webkit-transition: opacity 1s ease-in-out 0s;
          position: absolute; border: 0px; width: 312px; height: 320px; z-index:
          300; overflow: hidden; visibility: visible;"></iframe>
        The source document uses the same font as the embedding document.

        Tests: fast/frames/seamless/seamless-custom-font-pruning-crash.html
               fast/frames/seamless/seamless-nested-crash.html

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Remove code to register the font with the document.
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData): Remove code to register the font with the document.
        * dom/Document.cpp:
        (WebCore::Document::~Document): Remove code that records and purges custom fonts.
        (WebCore):
        (WebCore::Document::reportMemoryUsage): Remove reference to non-existent objects.
        * dom/Document.h:
        (WebCore):
        (Document): Remove method declarations for custom font handling.
        * platform/graphics/FontFallbackList.h:
        (FontFallbackList): Moved some code around and made non-copyable.
        (WebCore::FontFallbackList::setGlyphPageZero): Moved.
        (WebCore::FontFallbackList::setGlyphPages): Moved.
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::pruneFontData): Removed unnecessary null check.
        * platform/graphics/SegmentedFontData.cpp:
        (WebCore::SegmentedFontData::~SegmentedFontData): Added code to prune the Glyph pages when this is deleted.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData): Added code to prune the Glyph pages when this is deleted.

2012-10-03  Adam Barth  <abarth@webkit.org>

        Crash when calling document.open during unload
        https://bugs.webkit.org/show_bug.cgi?id=98287

        Reviewed by Nate Chapin.

        Calling document.open results in us nulling out m_documentLoader. This
        code doesn't properly handle that case and crashes.

        Test: fast/parser/document-open-in-unload.html

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

2012-10-03  Benjamin Poulain  <bpoulain@apple.com>

        Element::computeInheritedLanguage: evaluate the while() condition after fetching the string
        https://bugs.webkit.org/show_bug.cgi?id=98220

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        The condition is never false on the first execution. Move the condition to the
        end of the loop for fun and profit.

2012-10-03  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: Add SpeechRecognition.interimResults attribute
        https://bugs.webkit.org/show_bug.cgi?id=98279

        Reviewed by Adam Barth.

        Add the interimResults attribute and pass it to the embedder. It was
        added to the spec draft in
        http://dvcs.w3.org/hg/speech-api/rev/d25fea0d029c

        Tested in fast/speech/scripted/basics.html

        * Modules/speech/SpeechRecognition.cpp:
        (WebCore::SpeechRecognition::start):
        (WebCore::SpeechRecognition::SpeechRecognition):
        * Modules/speech/SpeechRecognition.h:
        (WebCore::SpeechRecognition::interimResults):
        (WebCore::SpeechRecognition::setInterimResults):
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionClient.h:
        (SpeechRecognitionClient):
        * Modules/speech/SpeechRecognitionController.h:
        (WebCore::SpeechRecognitionController::start):

2012-10-03  Hans Wennborg  <hans@chromium.org>

        Speech JavaScript API: Remove resultdeleted event
        https://bugs.webkit.org/show_bug.cgi?id=98272

        Reviewed by Adam Barth.

        Remove the resultdeleted event. This was never used, and was removed
        from the spec draft in
        http://dvcs.w3.org/hg/speech-api/rev/f9d53ab8b449

        The fast/speech/scripted/basics.html test is updated to reflect this.

        * Modules/speech/SpeechRecognition.cpp:
        * Modules/speech/SpeechRecognition.h:
        (SpeechRecognition):
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionEvent.cpp:
        * Modules/speech/SpeechRecognitionEvent.h:
        (SpeechRecognitionEvent):
        * dom/EventNames.h:
        (WebCore):

2012-09-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        Delayed structure sweep can leak structures without bound
        https://bugs.webkit.org/show_bug.cgi?id=96546

        Reviewed by Geoffrey Garen.

        This patch gets rid of the separate Structure allocator in the MarkedSpace and adds two new destructor-only
        allocators. We now have separate allocators for our three types of objects: those objects with no destructors,
        those objects with destructors and with immortal structures, and those objects with destructors that don't have 
        immortal structures. All of the objects of the third type (destructors without immortal structures) now 
        inherit from a new class named JSDestructibleObject (which in turn is a subclass of JSNonFinalObject), which stores 
        the ClassInfo for these classes at a fixed offset for safe retrieval during sweeping/destruction.

        No new tests.

        * ForwardingHeaders/runtime/JSDestructableObject.h: Added.
        * bindings/js/JSDOMWrapper.h: Inherits from JSDestructibleObject.
        (JSDOMWrapper):
        (WebCore::JSDOMWrapper::JSDOMWrapper):
        * bindings/scripts/CodeGeneratorJS.pm: Add finalizers to anything that inherits from JSGlobalObject,
        e.g. JSDOMWindow and JSWorkerContexts. For those classes we also need to define needsDestruction as true.
        (GenerateHeader):
        * bridge/objc/objc_runtime.h: Inherit from JSDestructibleObject.
        (ObjcFallbackObjectImp):
        * bridge/objc/objc_runtime.mm:
        (Bindings):
        (JSC::Bindings::ObjcFallbackObjectImp::ObjcFallbackObjectImp):
        * bridge/runtime_array.cpp: Use a finalizer so that JSArray isn't forced to inherit from JSDestructibleObject.
        (JSC):
        (JSC::RuntimeArray::destroy):
        * bridge/runtime_array.h:
        (JSC::RuntimeArray::create):
        (JSC):
        * bridge/runtime_object.cpp: Inherit from JSDestructibleObject.
        (Bindings):
        (JSC::Bindings::RuntimeObject::RuntimeObject):
        * bridge/runtime_object.h:
        (RuntimeObject):

2012-10-02  Anders Carlsson  <andersca@apple.com>

        Change most GraphicsLayer::create calls to use the version that takes a GraphicsLayerFactory
        https://bugs.webkit.org/show_bug.cgi?id=98217

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createGraphicsLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):
        (WebCore::RenderLayerCompositor::ensureRootLayer):

2012-10-03  Joshua Bell  <jsbell@chromium.org>

        IndexedDB: Optimize encodeString/decodeString
        https://bugs.webkit.org/show_bug.cgi?id=97794

        Reviewed by Tony Chang.

        Optimize string encoding/decoding, which showed up as a CPU hot spot during profiling.
        The backing store uses big-endian ordering of 16-bit code unit strings, so a memcopy
        isn't sufficient, but the code used StringBuilder::append() character-by-character
        and custom byte-swapping which was slow.

        Ran a test w/ DumpRenderTree (to avoid multiprocess overhead) taking a 10k character string
        and putting it 20k times and getting it 20k times. On my test box, mean time before the
        patch was 8.2s, mean time after the patch was 4.6s.

        Tested by Chromium's webkit_unit_tests --gtest_filter='IDBLevelDBCodingTest.*String*'

        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeString):
        (WebCore::IDBLevelDBCoding::decodeString):

2012-10-03  Keishi Hattori  <keishi@webkit.org>

        Implement DataList UI for input type time on chromium
        https://bugs.webkit.org/show_bug.cgi?id=98240

        Reviewed by Kent Tamura.

        This adds datalist UI for input type time. We add the picker indicator to
        BaseMultipleFieldsDateAndTimeInputType. We enclose the dateTimeEdit element
        and picker indicator inside a new div element so we can position the picker
        indicator in the same place as input type=date.

        Tests: platform/chromium/fast/forms/time/time-suggestion-picker-appearance-rtl.html
               platform/chromium/fast/forms/time/time-suggestion-picker-appearance-with-scroll-bar.html
               platform/chromium/fast/forms/time/time-suggestion-picker-appearance.html
               platform/chromium/fast/forms/time/time-suggestion-picker-key-operations.html
               platform/chromium/fast/forms/time/time-suggestion-picker-mouse-operations.html

        * css/html.css:
        (input::-webkit-date-and-time-container):
        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree): Creates a picker indicator.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::handleKeydownEvent): Open the picker on Alt+Down.
        (WebCore):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::listAttributeTargetChanged): Updates picker visibility.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updatePickerIndicatorVisibility): In the future, DateInputType can override
        this so the picker indicator is always visible.
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::hidePickerIndicator):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::showPickerIndicator):
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (WebCore):
        (BaseMultipleFieldsDateAndTimeInputType):
        * html/shadow/DateTimeFieldElement.cpp:
        (WebCore::DateTimeFieldElement::defaultKeyboardEventHandler): Ignore Alt+down because it should trigger the picker to open.
        * rendering/RenderThemeChromiumCommon.cpp:
        (WebCore::RenderThemeChromiumCommon::supportsDataListUI): Add time to the list.

2012-10-03  Andreas Kling  <kling@webkit.org>

        Give CSSValueList backing vector an inline capacity.
        <http://webkit.org/b/98266>
        <rdar://problem/12421425>

        Reviewed by Anders Carlsson.

        Set an inline capacity of 4 on the CSSValue vector backing CSSValueList. This avoids an extra heap allocation
        in the common case, and reduces total memory use across the board, since the majority of CSSValueLists have
        at least 1 item, and the Vector will bump from 0 to 16 capacity on the first append.

        394kB progression on Membuster3.

        * css/CSSValueList.h:
        (CSSValueList):

2012-10-03  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: NMI: instrument NativeImageSkia.
        https://bugs.webkit.org/show_bug.cgi?id=96277

        Reviewed by Yury Semikhatsky.

        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::reportMemoryUsage):
        (WebCore::reportMemoryUsage):

2012-10-03  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: remember the last dock option so that user could toggle between dock to bottom and right
        https://bugs.webkit.org/show_bug.cgi?id=98255

        Reviewed by Vsevolod Vlasov.

        - Introduced DockController.js that covers the dock mechanics
        - Removed dock orientation from the settings
        - Storing the last dock option to present it as default
        - Simplified the multi-option status bar button

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/compile-front-end.py:
        * inspector/front-end/DockController.js: Added.
        (WebInspector.DockController):
        (WebInspector.DockController.prototype.get element):
        (WebInspector.DockController.prototype.setDocked.set if):
        (WebInspector.DockController.prototype.setDocked):
        (WebInspector.DockController.prototype.setDockingUnavailable):
        (WebInspector.DockController.prototype._updateUI.get states):
        (WebInspector.DockController.prototype._updateUI):
        (WebInspector.DockController.prototype._decorateButtonForTargetState):
        (WebInspector.DockController.prototype._createDockOptions):
        (WebInspector.DockController.prototype._toggleDockState):
        (WebInspector.DockController.prototype.isCompactMode):
        (WebInspector.DockController.prototype.setCompactMode):
        * inspector/front-end/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setAttachedWindow):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.requestAttachWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.requestDetachWindow):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SettingsScreen.js:
        (WebInspector.GenericSettingsTab):
        * inspector/front-end/StatusBarButton.js:
        (WebInspector.StatusBarButton):
        * inspector/front-end/Toolbar.js:
        (WebInspector.Toolbar):
        (WebInspector.Toolbar.prototype.setCompactMode):
        (WebInspector.Toolbar.prototype._toolbarDragStart):
        (WebInspector.Toolbar.prototype._toolbarDrag):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/externs.js:
        (WebInspector.toggleSearchingForNode):
        * inspector/front-end/inspector.css:
        (body.undocked.platform-mac-snowleopard #toolbar):
        (body.undocked.platform-mac-snowleopard #toolbar-dropdown):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createGlobalStatusBarItems):
        (windowLoaded):
        (WebInspector.setDockingUnavailable):
        * inspector/front-end/inspectorCommon.css:
        (body.dock-to-right:not(.undocked)):
        (body.dock-to-right.inactive:not(.undocked)):

2012-10-03  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: UISourceCode commitWorkingCopy should not fail when original script had syntax error.
        https://bugs.webkit.org/show_bug.cgi?id=97272

        Reviewed by Pavel Feldman.

        This patch is based on patch by John J. Barton.

        * inspector/front-end/JavaScriptSource.js:
        (WebInspector.JavaScriptSource.prototype.workingCopyCommitted): added rawLocation null check.

2012-10-03  Alexander Pavlov  <apavlov@chromium.org>

        Web Inspector: After "Edit as HTML", any click outside box should stop editing
        https://bugs.webkit.org/show_bug.cgi?id=98258

        Reviewed by Vsevolod Vlasov.

        Make the DOM tree OL span the entire height of its container in the Elements panel to catch mouse events.

        * inspector/front-end/elementsPanel.css:
        (#elements-content > ol):

2012-10-03  Dongwoo Joshua Im  <dw.im@samsung.com>

        [EFL] Skeleton code of File system API.
        https://bugs.webkit.org/show_bug.cgi?id=91187

        Reviewed by Gyuyoung Kim.

        Add skeleton code of File System API on EFL port.
        Implementation patches will be created later.

        No new tests because this is just skeleton code.

        * CMakeLists.txt: Add new files which created by other patches in Modules/filesystem/ directory.
        * PlatformEfl.cmake: Add AsyncFileSystemEfl.cpp.
        * platform/AsyncFileSystem.cpp:
        (WebCore):
        * platform/efl/AsyncFileSystemEfl.cpp: Added.
        * platform/efl/AsyncFileSystemEfl.h: Added.

2012-10-03  Andreas Kling  <kling@webkit.org>

        Shrink ElementRareData by moving bool flags to NodeRareData.
        <http://webkit.org/b/98225>

        Reviewed by Antti Koivisto.

        Move all bool flags from ElementRareData to the bitfield in its base class NodeRareData.
        This shrinks ElementRareData by 8 bytes (on 64-bit) and saves a whopping 58kB on Membuster3.
        Also removed some double raredata hash lookups.

        * dom/Element.cpp:
        (WebCore::Element::detach):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::ensureShadow):
        (WebCore::Element::setStyleAffectedByEmpty):
        (WebCore::Element::styleAffectedByEmpty):
        (WebCore::Element::setIsInCanvasSubtree):
        (WebCore::Element::isInCanvasSubtree):
        (WebCore::Element::containsFullScreenElement):
        (WebCore::Element::setContainsFullScreenElement):
        * dom/ElementRareData.h:
        (ElementRareData):
        (WebCore::ElementRareData::ElementRareData):
        * dom/NodeRareData.h:
        (WebCore::NodeRareData::styleAffectedByEmpty):
        (WebCore::NodeRareData::setStyleAffectedByEmpty):
        (WebCore::NodeRareData::isInCanvasSubtree):
        (WebCore::NodeRareData::setIsInCanvasSubtree):
        (NodeRareData):
        (WebCore::NodeRareData::containsFullScreenElement):
        (WebCore::NodeRareData::setContainsFullScreenElement):

2012-10-03  Jussi Kukkonen  <jussi.kukkonen@intel.com>

        getComputedStyle perspective-origin is based on the wrong bounding box
        https://bugs.webkit.org/show_bug.cgi?id=98027

        Reviewed by Simon Fraser.

        perspective-origin for ComputedStyleDeclaration is currently calculated using the
        wrong bounding box (sizingBox() which ends up as the contentbox).

        Start using borderbox for ComputedStyleDeclaration perspective-origin, similar to
        what transform-origin already does.

        Test: fast/css/getComputedStyle/getComputedStyle-origin-percentage.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2012-10-03  Patrick Gansterer  <paroga@webkit.org>

        Build fix for WinCE after r130160.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataAndPageForCharacter):

2012-10-03  Tommy Widenflycht  <tommyw@google.com>

        MediaStream API: RTCPeerConnection should send down its handler via the FrameLoaderClient directly after creation.
        https://bugs.webkit.org/show_bug.cgi?id=98149

        Reviewed by Adam Barth.

        The chromium implementation needs to know which Frame created a PeerConnection so
        that the right housekeeping can take place correctly.

        Not testable in DRT, but have verified the change manually and with our pyautotests.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::RTCPeerConnection):
        * loader/FrameLoaderClient.h:
        (WebCore):
        (FrameLoaderClient):
        (WebCore::FrameLoaderClient::dispatchWillStartUsingPeerConnectionHandler):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.cpp:
        (WebCore::RTCPeerConnectionHandlerChromium::toWebRTCPeerConnectionHandler):
        (WebCore):
        (WebCore::RTCPeerConnectionHandlerChromium::RTCPeerConnectionHandlerChromium):
        (WebCore::RTCPeerConnectionHandlerChromium::initialize):
        * platform/mediastream/chromium/RTCPeerConnectionHandlerChromium.h:
        (RTCPeerConnectionHandlerChromium):

2012-10-03  Eugene Klyuchnikov  <eustas.bug@gmail.com>

        Web Inspector: Profiles: taking heap snapshot causes error message in console.
        https://bugs.webkit.org/show_bug.cgi?id=97890

        Reviewed by Yury Semikhatsky.

        Actual problem is that proxy loader is closed twice.

        "_snapshotReceived" should never try to close receiver,
        because it is a callback fired by close.

        Also minor glitches fixed:
         - taking snapshot shows "Loading..." status first,
        and then "Saving xxx%";
         - after all chunks are sent "Parsing" status is set and
        then is replaced with "Saving 100%";
         - removed dead code in proxy;
         - proxy was ignoring callback parameter;
         - "Loading %d\%" is not localized.

        * English.lproj/localizedStrings.js: Added missing "Loading %d%" string.
        * inspector/front-end/HeapSnapshotProxy.js: Removed dead code.
        (WebInspector.HeapSnapshotLoaderProxy):
        (WebInspector.HeapSnapshotLoaderProxy.prototype.write): Make this method
        interface-conformant.
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapProfileHeader): Fixed update-status and
        finish-transfer logic.

2012-10-03  Jochen Eisinger  <jochen@chromium.org>

        Make sure that user gestures can't be consumed twice
        https://bugs.webkit.org/show_bug.cgi?id=97483

        Reviewed by Adam Barth.

        Instead of a simple counter, use a ref counted token to track how many
        user gestures happened and where consumed. When creating a timer that
        is supposed to forward the user gesture, take a reference to this token
        and reinstantiate the UserGestureIndicator with that token when the
        timer is triggered.

        Tests: platform/chromium/fast/events/popup-forwarded-gesture-blocked.html
               platform/chromium/fast/events/popup-forwarded-gesture.html

        * dom/UserGestureIndicator.cpp:
        (WebCore):
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::~UserGestureIndicator):
        (WebCore::UserGestureIndicator::processingUserGesture):
        (WebCore::UserGestureIndicator::consumeUserGesture):
        (WebCore::UserGestureIndicator::currentToken):
        * dom/UserGestureIndicator.h:
        (Token):
        (WebCore::UserGestureIndicator::Token::~Token):
        (UserGestureIndicator):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::fired):
        * page/DOMTimer.h:
        (DOMTimer):

2012-10-03  Dominic Mazzoni  <dmazzoni@google.com>

        AX: Heap-use-after-free when deleting a ContainerNode with an AX object
        https://bugs.webkit.org/show_bug.cgi?id=98073

        Reviewed by Hajime Morita.

        Calls axObjectCache()->remove(this) in ~ContainerNode so that the AX tree
        doesn't try to access the container node while walking up the parent chain
        from one of the container node's children.

        Test: accessibility/container-node-delete-causes-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::~ContainerNode):
        * dom/Node.cpp:
        (WebCore::Node::~Node):
        * dom/Node.h:
        (WebCore::Node::document):
        (WebCore::Node::documentInternal):

2012-10-03  Vsevolod Vlasov  <vsevik@chromium.org>

        Web Inspector: SourceURL should be taken from debugger agent when possible.
        https://bugs.webkit.org/show_bug.cgi?id=98239

        Reviewed by Yury Semikhatsky.

        Removed a check that sourceURL coming from js engine is the same as the one parsed by debugger agent.
        Alwys use the one from debugger agent now.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didParseSource):

2012-10-03  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed. Touch FrameView.cpp file for fixing mac bot compilation.

        * page/FrameView.cpp:
        (WebCore):

2012-10-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Web Inspector: "Load profile..." context menu item has to be shown only for left column with the list of profiles.
        https://bugs.webkit.org/show_bug.cgi?id=98163

        Reviewed by Yury Semikhatsky.

        The text was changed to "Load Heap Snapshot..."
        Also I changed "Save profile..." to "Save Heap Snapshot..." because other profiles don't support Save/Load operations yet.
        The Load context menu item will appear only when the user clicked in sidebar the tree empty space or a profile.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype._handleContextMenuEvent):
        (WebInspector.ProfileSidebarTreeElement.prototype.handleContextMenuEvent):

2012-10-03  Harald Alvestrand  <hta@google.com>

        Add data passing to the GetStats interface of RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=98003

        Reviewed by Adam Barth.

        Added an RTCStatsResponseBase interface to platform, and let the
        RTCStatsRequestImpl class produce an implementation of it that's returned
        to WebCore.

        Tested by extension of the RTCPeerConnection-stats.html test.

        * Modules/mediastream/RTCStatsElement.cpp:
        (WebCore::RTCStatsElement::addStatistic):
        (WebCore):
        * Modules/mediastream/RTCStatsElement.h:
        (RTCStatsElement):
        * Modules/mediastream/RTCStatsReport.cpp:
        (WebCore):
        (WebCore::RTCStatsReport::addElement):
        (WebCore::RTCStatsReport::addStatistic):
        * Modules/mediastream/RTCStatsReport.h:
        (RTCStatsReport):
        * Modules/mediastream/RTCStatsRequestImpl.cpp:
        (WebCore::RTCStatsRequestImpl::createResponse):
        (WebCore):
        (WebCore::RTCStatsRequestImpl::requestSucceeded):
        * Modules/mediastream/RTCStatsRequestImpl.h:
        (RTCStatsRequestImpl):
        * Modules/mediastream/RTCStatsResponse.cpp:
        (WebCore::RTCStatsResponse::create):
        (WebCore::RTCStatsResponse::addReport):
        (WebCore):
        (WebCore::RTCStatsResponse::addElement):
        (WebCore::RTCStatsResponse::addStatistic):
        * Modules/mediastream/RTCStatsResponse.h:
        (RTCStatsResponse):
        * WebCore.gypi:
        * platform/chromium/support/WebRTCStatsRequest.cpp:
        (WebKit::WebRTCStatsRequest::response):
        (WebKit):
        (WebKit::WebRTCStatsRequest::requestSucceeded):
        * platform/chromium/support/WebRTCStatsResponse.cpp: Added.
        (WebKit):
        (WebKit::WebRTCStatsResponse::WebRTCStatsResponse):
        (WebKit::WebRTCStatsResponse::assign):
        (WebKit::WebRTCStatsResponse::reset):
        (WebKit::WebRTCStatsResponse::operator WTF::PassRefPtr<WebCore::RTCStatsResponseBase>):
        (WebKit::WebRTCStatsResponse::addReport):
        (WebKit::WebRTCStatsResponse::addElement):
        (WebKit::WebRTCStatsResponse::addStatistic):
        * platform/mediastream/RTCStatsRequest.h:
        (WebCore):
        (RTCStatsRequest):
        * platform/mediastream/RTCStatsResponseBase.h: Added.
        (WebCore):
        (RTCStatsResponseBase):
        (WebCore::RTCStatsResponseBase::~RTCStatsResponseBase):

2012-10-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add API to get the web view that initiated a custom URI request to WebKit2 GTK+
        https://bugs.webkit.org/show_bug.cgi?id=97895

        Reviewed by Martin Robinson.

        * platform/network/NetworkingContext.h:
        (NetworkingContext): Add initiatingPageID().
        * platform/network/ResourceHandle.h:
        (ResourceHandle): Add static method
        getSoupRequestInitiaingPageID().
        * platform/network/ResourceHandleInternal.h:
        (ResourceHandleInternal): Add initiatingPageID().
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::initiatingPageID): Get the
        initiating page ID of the resource handle networking context.
        (WebCore::setSoupRequestInitiaingPageID): Helper function to
        attach a page ID to a SoupRequest.
        (WebCore::startHTTPRequest): Call setSoupRequestInitiaingPageID()
        to attch the initiating page ID to the SoupRequest.
        (WebCore::startNonHTTPRequest): Ditto.
        (WebCore::ResourceHandle::getSoupRequestInitiaingPageID): Static
        method to get the page ID attached to a SoupRequest.

2012-10-03  Kent Tamura  <tkent@chromium.org>

        Introduce DateComponents::minimumYear and maximumYear
        https://bugs.webkit.org/show_bug.cgi?id=98230

        Reviewed by Kentaro Hara.

        Share same difinitions in DateComponents.cpp and DateTimeFieldElements.cpp.

        No new tests. This doesn't change any bahevior.

        * platform/DateComponents.h:
        (WebCore::DateComponents::minimumYear): Moved from DateComponents.cpp.
        (WebCore::DateComponents::maximumYear): ditto.
        * platform/DateComponents.cpp:
        (WebCore): Move out static minimumYear and maximumYear.
        (WebCore::DateComponents::parseYear): Use DateCompnents::minimumYear and/or maximumYear.
        (WebCore::withinHTMLDateLimits): ditto.
        (WebCore::DateComponents::parseWeek): ditto.
        (WebCore::DateComponents::setMonthsSinceEpoch): ditto.
        (WebCore::DateComponents::setMillisecondsSinceEpochForWeek): ditto.

        * html/shadow/DateTimeFieldElements.cpp:
        (WebCore): Remove minimumYear and maximumYear.
        (WebCore::DateTimeYearFieldElement::DateTimeYearFieldElement):
        Use DateComponents::minimumYear and maximumYear.


2012-10-02  Arko Saha  <arko@motorola.com>

        Microdata: itemprop names must not override builtin properties.
        https://bugs.webkit.org/show_bug.cgi?id=98025

        Reviewed by Kentaro Hara.

        We should look in the prototype for functions before assuming it as
        an item's name. Return false if the prototype of the object has a
        property (function) with propertyName.
        Named properties Spec: http://dev.w3.org/2006/webapi/WebIDL/#idl-named-properties
        Named property visibility algorithm:
        http://dev.w3.org/2006/webapi/WebIDL/#indexed-and-named-properties
        ...
        7. If the result of calling the [[HasProperty]] internal method on
        prototype with property name P is true, then return false.
        ...
        Also [OverrideBuiltins] is not declared for any of the properties,
        hence no overriding is allowed in this case.

        Test: fast/dom/MicroData/itemprop-names-override-builtin-properties.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (GenerateGetOwnPropertyDescriptorBody):

2012-10-02  Keishi Hattori  <keishi@webkit.org>

        REGRESSION (r129738): Suggestion picker label is placed in the wrong location
        https://bugs.webkit.org/show_bug.cgi?id=98094

        Reviewed by Kent Tamura.

        We needed to reverse padding-left/right when rtl.

        No new tests. Covered by date-suggestion-picker-appearance.html.

        * Resources/pagepopups/suggestionPicker.css:
        (.suggestion-list-entry .label):
        (.rtl .suggestion-list-entry .label):

2012-10-02  Yury Semikhatsky  <yurys@chromium.org>

        Provide memory instrumentation for HashCountedSet
        https://bugs.webkit.org/show_bug.cgi?id=98138

        Reviewed by Pavel Feldman.

        Replaced addHashCountedSet calls with addMember that now automatically
        detects HashCountedSet and calls appropriate routine.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::reportBaseClassMemoryUsage):
        * loader/cache/CachedResource.cpp:

2012-10-02  Nandor Huszka  <hnandor@inf.u-szeged.hu>

        Buildfix after r130235.

        Reviewed by Csaba Osztrogonác.

        systemAllowsMultisamplingOnATICards was deleted from GraphicsContext3D,
        but function body remained in GraphicsContext3DOpenGLES. Delete method body.

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:

2012-10-02  Kent Tamura  <tkent@chromium.org>

        Fix assertion failures on Chromium Debug bots for datetime/datetime-local input types.

        * html/shadow/DateTimeFieldElements.cpp:
        If a placeholder stirng is empty, use a sequence of "-".
        (WebCore::DateTimeDayFieldElement::create):
        (WebCore::DateTimeMonthFieldElement::create):
        (WebCore::DateTimeYearFieldElement::create):

2012-10-02  MORITA Hajime  <morrita@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=98134
        [Refactoring] StyleResolver::matchScopedAuthorRules() could be simpler.

        Reviewed by Dimitri Glazkov.

        matchScopedAuthorRules() did have some optimization which only
        makes sense for heavily nested shadow tree. However, we don't see
        such type of usage of Shadow DOM and this looks premature
        optimization. This change unified its triple for loop into one,
        which makes the code much simpler.

        No new tests. Covered by existing tests.

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

2012-10-02  Kent Tamura  <tkent@chromium.org>

        Introduce Localizer::dateTimeFormatWithSecond and dateTimeFormatWithoutSecond
        https://bugs.webkit.org/show_bug.cgi?id=98229

        Reviewed by Kentaro Hara.

        Unify identical code in DateTimeInputType and DateTimeLocalInputType as
        Localizer member functions.
        They still have some common code. We'll address it later.

        No new tests. This doesn't change any behavior.

        * platform/text/Localizer.h:
        (Localizer): Add dateTimeFormatWithSecond and dateTimeFormatWithoutSecond.
        * platform/text/Localizer.cpp:
        (WebCore::Localizer::dateTimeFormatWithSecond):
        Implemented. Just concatenating dateFormat, a space, and timeFormat.
        (WebCore::Localizer::dateTimeFormatWithoutSecond):
        Implemented. Just concatenating dateFormat, a space, and shortTimeFormat.

        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setupLayoutParameters):
        Use dateTimeFormatWithSecond and dateTimeFormatWithoutSecond.
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::setupLayoutParameters): ditto.

2012-10-03  Kent Tamura  <tkent@chromium.org>

        Refactoring: DateTimeEditBuilder had better hold LayoutParameters
        https://bugs.webkit.org/show_bug.cgi?id=98228

        Reviewed by Kentaro Hara.

        Stop copying multiple members of LayoutParameters in DateTimeEditBuilder
        constructor. This change improves code size and runtime cost.

        No new tests. This doesn't change user-visible behavior.

        * html/shadow/DateTimeEditElement.cpp:
        (DateTimeEditBuilder): Add a comment about lifetime of objects.
        (WebCore::DateTimeEditBuilder::stepRange):
        Added. A helper to access m_parameters.stepRange.
        (WebCore::DateTimeEditBuilder::DateTimeEditBuilder):
        Remove m_stepRange, m_localizer, m_placeholderFor* members.
        Add m_parameters.
        (WebCore::DateTimeEditBuilder::needMillisecondField):
        Use stepRange() instead of m_stepRange.
        (WebCore::DateTimeEditBuilder::visitField):
        Use m_parameters.placeholderFor*.
        (WebCore::DateTimeEditBuilder::shouldMillisecondFieldReadOnly):
        Use stepRange() instead of m_stepRange.
        (WebCore::DateTimeEditBuilder::shouldMinuteFieldReadOnly): ditto.
        (WebCore::DateTimeEditBuilder::shouldSecondFieldReadOnly): ditto.

2012-10-02  Kent Tamura  <tkent@chromium.org>

        Implement LocaleICU::dateFormat
        https://bugs.webkit.org/show_bug.cgi?id=98118

        Reviewed by Hajime Morita.

        http://trac.webkit.org/changeset/130127 introduced
        Localizer::dateFormat, and this is its implementation for LocaleICU
        classs. The code is going to be used when
        ENABLE_INPUT_MULTIPLE_FIELDS_UI is enabled.

        No new tests. The function is not used yet.

        * platform/text/LocaleICU.cpp:
        (WebCore::LocaleICU::dateFormat):
        Implemented. Note that m_shortDateFormat is a UDateFormat object, which
        knows various format information.
        * platform/text/LocaleICU.h:
        (LocaleICU): Add m_dateFormat to cache the format string.

2012-10-02  Kent Tamura  <tkent@chromium.org>

        [Mac][Chromium-Mac] Implement LocaleMac::dateFormat
        https://bugs.webkit.org/show_bug.cgi?id=98116

        Reviewed by Hajime Morita.

        http://trac.webkit.org/changeset/130127 introduced
        Localizer::dateFormat, and this is its implementation for LocaleICU
        classs. The code is going to be used when
        ENABLE_INPUT_MULTIPLE_FIELDS_UI is enabled.

        No new tests. The function is not used yet.

        * platform/text/mac/LocaleMac.h:
        (LocaleMac): Declare m_dateFormat.
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::dateFormat): Implemented.

2012-10-02  Kent Tamura  <tkent@chromium.org>

        [Chromium-Win] Implement LocaleWin::dateFormat
        https://bugs.webkit.org/show_bug.cgi?id=98117

        Reviewed by Kentaro Hara.

        http://trac.webkit.org/changeset/130127 introduced
        Localizer::dateFormat, and this is its implementation for LocaleICU
        classs. The code is going to be used when
        ENABLE_INPUT_MULTIPLE_FIELDS_UI is enabled.

        Tests: Added a new test to WebKit/chromium/tests/LocaleWinTest.cpp.

        * platform/text/LocaleWin.cpp:
        (WebCore::parseDateFormat):
        Fix a continuous apostrophes parsing bug; "abc''''def" produced "abc'''def"
        (WebCore::appendAsLDMLLiteral):
        A helper function to make a literal string for LDML.
        (WebCore::convertWindowsDateFormatToLDML):
        Creates an LDML format from a parsed date format tokens.
        (WebCore::LocaleWin::dateFormat):
        Implemented. This uses convertWindowsDateFormatToLDML.
        (WebCore::LocaleWin::dateFormat):
        Added for testing. The source windows format is specified as a function
        argument.
        * platform/text/LocaleWin.h:
        (LocaleWin): Declare m_dateFormat and dateFormat().

2012-10-02  Ian Vollick  <vollick@chromium.org>

        [chromium] Fix spelling of isNVIDIA override in Extensions3DChromium
        https://bugs.webkit.org/show_bug.cgi?id=98219

        Reviewed by Dean Jackson.

        The override in Extensions3dChromium should have been spelled isNVIDIA, not isNVidia.

        No new tests. No change in functionality.

        * platform/graphics/chromium/Extensions3DChromium.h:
        (WebCore::Extensions3DChromium::isNVIDIA):

2012-10-02  Anders Carlsson  <andersca@apple.com>

        Try to fix the Snow Leopard build.

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:

2012-10-02  Joshua Bell  <jsbell@chromium.org>

        Add htons/htonl definitions and implementations
        https://bugs.webkit.org/show_bug.cgi?id=98054

        Reviewed by Darin Adler.

        Update users of htons and friends to use new wtf/ByteOrder.h header.

        No new tests - just refactoring.

        * platform/graphics/WOFFFileFormat.cpp:
        * platform/graphics/chromium/VDMXParser.cpp:

== Rolled over to ChangeLog-2012-10-02 ==
