2014-02-07  Gavin Barraclough  <barraclough@apple.com>

        Remove isInitialState flag from Page::setViewState
        https://bugs.webkit.org/show_bug.cgi?id=128428

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
            - removed isInitialState.
        * page/Page.cpp:
        (WebCore::Page::setViewState):
            - removed isInitialState.
        (WebCore::Page::setIsVisible):
            - removed isInitialState.
        (WebCore::Page::setIsVisibleInternal):
            - removed isInitialState.
        * page/Page.h:
            - removed isInitialState.

2014-02-07  Simon Fraser  <simon.fraser@apple.com>

        Encode requestedScrollPosition on ScrollingStateScrollingNodes to send to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=128416

        Reviewed by Tim Horton.
        
        Change requestedScrollPosition() to be a FloatPoint, and export
        ScrollingStateScrollingNode::setRequestedScrollPosition(WebCore::FloatPoint const&, bool)
        for WK2.

        * WebCore.exp.in:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        * page/scrolling/ScrollingStateScrollingNode.h:

2014-02-07  Beth Dakin  <bdakin@apple.com>

        Should get rid of TileController's CoverageForSlowScrolling mode
        https://bugs.webkit.org/show_bug.cgi?id=128339

        Reviewed by Simon Fraser.

        This patch gets rid of CoverageForSlowScrolling in the TileController. It also 
        makes sure that margin tiles are properly invalidated on pages with slow repaint 
        objects that cause slow scrolling. 

        When we invalidate because of slow scrolling, don’t clip the update rect to the 
        layer bounds.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsSlowPath):

        Call new RenderObject paint function repaintSlowRepaintObject() instead of the 
        more-generic repaint().
        (WebCore::FrameView::repaintSlowRepaintObjects):

        Remove CoverageForSlowScrolling.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):

        Handle repainting a slow repaint object. Don’t clip when we shouldn’t, use the 
        RenderView’s backgroundRect as a repaintRect when this is the root background 
        since that will take the extended background rect into consideration.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintSlowRepaintObject):
        * rendering/RenderObject.h:

2014-02-06  Filip Pizlo  <fpizlo@apple.com>

        More FTL build scaffolding
        https://bugs.webkit.org/show_bug.cgi?id=128330

        Reviewed by Geoffrey Garen.

        The FTL already has tests.

        * Configurations/FeatureDefines.xcconfig:

2014-02-07  Alexey Proskuryakov  <ap@apple.com>

        Remove some unused functions from SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=128407

        Reviewed by Anders Carlsson.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::undefinedValue):
        (WebCore::SerializedScriptValue::nullValue):
        * bindings/js/SerializedScriptValue.h:

2014-02-07  Brady Eidson  <beidson@apple.com>

        IDB: Some Mozilla cursor mutation tests fail
        <rdar://problem/16011680> and https://bugs.webkit.org/show_bug.cgi?id=128374

        Reviewed by Sam Weinig.

        Tested by:
        storage/indexeddb/mozilla/cursor-mutation-objectstore-only.html
        storage/indexeddb/mozilla/cursor-mutation.html

        The previous comment about LevelDB was wrong.
        Apparently calling onSuccess() with a null SharedBuffer means the cursor reached the end.
        Update to distinguish between an error and reaching the end:
        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
 
        Add a new IDBKey type - Maximum - To be used in comparisons between keys.
        This will allow the DatabaseProcess to operate on the range of all keys:
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::compare):
        * Modules/indexeddb/IDBKey.h:

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        (WebCore::IDBKeyData::encode):
        (WebCore::IDBKeyData::decode):
        (WebCore::IDBKeyData::compare):
        (WebCore::IDBKeyData::loggingString):
        * Modules/indexeddb/IDBKeyData.h:
        (WebCore::IDBKeyData::minimum):
        (WebCore::IDBKeyData::maximum):

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::idbKeyToJSValue):

        Remove an unused callback:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBRequest.h:

2014-02-07  Roger Fong  <roger_fong@apple.com>

        CGContextGetUserSpaceToDeviceSpaceTransform returns the wrong value on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=128395.
        
        Rubberstamped by Zalan Bujtas.

        The call essentially returns 0 and causes an assertion failure when running many layout tests.

        * platform/graphics/cg/GraphicsContextCG.cpp: Don't make the call on Windows. We default to 1.
        (WebCore::GraphicsContext::platformInit):

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

        iOS build fix.

        * platform/PlatformKeyboardEvent.h: Fixed a typo.

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

        Stop using PLATFORM(MAC) in WebCore/platform except where it means “OS X but not iOS”
        https://bugs.webkit.org/show_bug.cgi?id=128404

        Reviewed by Anders Carlsson.

        * Configurations/WebCore.xcconfig: Removed KeyEventMac.mm from
        EXCLUDED_SOURCE_FILE_NAMES_iphoneos, because that file contains !PLATFORM(IOS) guards.
        Removed WheelEventMac.mm from the same definition, because that file no longer exists.
        * platform/ContentFilter.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/ContextMenu.h: Ditto.
        * platform/ContextMenuItem.h: Ditto.
        * platform/Cursor.cpp: Ditto.
        * platform/Cursor.h: Ditto.
        * platform/DragData.cpp: Ditto.
        * platform/DragImage.cpp: Ditto.
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale): Changed PLATFORM(MAC) to USE(CF) && !PLATFORM(WIN).
        * platform/LocalizedStrings.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::contextMenuItemTagSearchWeb):
        * platform/LocalizedStrings.h: Ditto.
        * platform/MIMETypeRegistry.cpp: Ditto.
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/PasteboardStrategy.h: Ditto.
        * platform/PlatformKeyboardEvent.h: Ditto.
        * platform/PlatformMenuDescription.h: Ditto.
        * platform/PlatformSpeechSynthesizer.h: Ditto.
        * platform/PlatformWheelEvent.h: Ditto.
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):
        * platform/SchemeRegistry.cpp: Ditto.
        (WebCore::localURLSchemes):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::SchemeRegistry::shouldCacheResponsesFromURLSchemeIndefinitely):
        * platform/ScrollAnimator.cpp: Ditto.
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollAnimator.h: Ditto.
        * platform/ScrollView.cpp: Ditto.
        * platform/ScrollView.h: Ditto.
        * platform/ScrollbarThemeComposite.h: Ditto.
        * platform/SharedBuffer.h: Changed PLATFORM(MAC) to USE(FOUNDATION) around NSData-related
        code.
        * platform/URL.h: Changed PLATFORM(MAC) to USE(FOUNDATION) around NSURL-related code.
        * platform/Widget.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/Widget.h: Ditto.
        * platform/audio/AudioSession.cpp: Changed !PLATFORM(MAC) && !PLATFORM(IOS) to
        !PLATFORM(COCOA).
        * platform/audio/HRTFElevation.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/audio/MediaSessionManager.cpp: Ditto.
        * platform/audio/mac/AudioSessionMac.cpp: Updated comment.
        * platform/audio/mac/MediaSessionManagerMac.cpp: Removed PLATFORM(MAC) from Cocoa-only file.
        * platform/cf/SharedBufferCF.cpp: Changed !PLATFORM(MAC) to !USE(FOUNDATION) and updated
        comment.
        * platform/cf/URLCF.cpp: Changed !PLATFORM(MAC) to !USE(FOUNDATION).
        * platform/graphics/BitmapImage.h: Changed one instance of PLATFORM(MAC) to
        USE(CG) || USE(APPKIT), and another to PLATFORM(COCOA).
        * platform/graphics/DisplayRefreshMonitor.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        * platform/graphics/DisplayRefreshMonitor.h: Ditto.
        * platform/graphics/FloatPoint.h: Collapsed nested #ifs into a single #if.
        * platform/graphics/FloatRect.h: Ditto.
        * platform/graphics/FloatSize.h: Ditto.
        * platform/graphics/Font.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/graphics/Font.h: Ditto.
        * platform/graphics/FontCache.cpp: Ditto.
        (WebCore::FontCache::getFontData):
        * platform/graphics/FontCache.h: Ditto. Also removed redundant friend class declaration.
        * platform/graphics/FontGlyphs.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::FontGlyphs::glyphDataAndPageForCharacter):
        * platform/graphics/GlyphPage.h: Ditto.
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/Image.h: Changed PLATFORM(MAC) to USE(APPKIT) around use of NSImage.
        Changed another PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/graphics/IntRect.h: Collapsed nested #ifs into a single #if.
        * platform/graphics/IntSize.h: Ditto.
        * platform/graphics/MediaPlayer.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/SimpleFontData.cpp: Ditto.
        (WebCore::SimpleFontData::nonSyntheticItalicFontData):
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        * platform/graphics/SimpleFontData.h: Ditto.
        * platform/graphics/TiledBacking.h: Ditto.
        * platform/graphics/ca/GraphicsLayerCA.cpp: Ditto.
        (WebCore::GraphicsLayerCA::filtersCanBeComposited):
        (WebCore::GraphicsLayerCA::createPlatformCALayer):
        * platform/graphics/ca/LayerFlushScheduler.h: Ditto.
        * platform/graphics/ca/PlatformCAAnimation.h: Ditto.
        * platform/graphics/ca/PlatformCAFilters.h: Ditto.
        * platform/graphics/ca/PlatformCALayer.h: Ditto.
        * platform/graphics/cg/BitmapImageCG.cpp: Ditto.
        * platform/graphics/cg/GraphicsContextCG.cpp: Ditto.
        (WebCore::GraphicsContext::setAllowsFontSmoothing):
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h: Ditto.
        * platform/graphics/cg/ImageBufferCG.cpp: Ditto.
        * platform/graphics/cg/ImageBufferDataCG.h: Ditto.
        * platform/graphics/cg/ImageCG.cpp: Ditto.
        * platform/graphics/cg/ImageSourceCG.cpp: Ditto.
        (WebCore::ImageSource::setData):
        * platform/graphics/cg/ImageSourceCG.h: Ditto.
        * platform/graphics/cg/PathCG.cpp: Ditto.
        (WebCore::Path::platformAddPathForRoundedRect):
        * platform/graphics/cg/PatternCG.cpp: Ditto.
        * platform/graphics/gpu/DrawingBuffer.h: Ditto.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView): Removed PLATFORM(MAC) guards, since
        this file is only used on Mac and iOS.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): Changed the GL_EXT_draw_buffers check to
        match the implementation.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Changed PLATFORM(MAC) to
        PLATFORM(COCOA).
        * platform/mac/KeyEventMac.mm: Added !PLATFORM(IOS).
        * platform/mac/PlatformEventFactoryMac.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/mac/WebCoreSystemInterface.h: Ditto. Removed redundant check for PLATFORM(MAC).
        * platform/mac/WebCoreSystemInterface.mm: Removed redundant check for PLATFORM(MAC).
        * platform/network/Credential.h: Changed PLATFORM(IOS) || PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/network/NetworkStateNotifier.h: Changed PLATFORM(MAC) to PLATFORM(COCOA).
        * platform/network/NetworkStorageSession.h: Ditto.
        * platform/network/NetworkingContext.h: Ditto.
        * platform/network/ProtectionSpace.cpp: Ditto.
        (WebCore::ProtectionSpace::receivesCredentialSecurely):
        * platform/network/ResourceHandle.cpp: Ditto.
        (WebCore::ResourceHandle::clearAuthentication):
        (WebCore::ResourceHandle::shouldContentSniffURL):
        * platform/network/ResourceHandle.h: Ditto.
        * platform/network/ResourceHandleClient.cpp: Ditto.
        * platform/network/ResourceHandleClient.h: Ditto.
        * platform/network/ResourceHandleInternal.h: Ditto.
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/ResourceRequestBase.cpp: Ditto.
        * platform/network/cf/AuthenticationCF.h: Ditto.
        * platform/network/cf/CookieStorageCFNet.cpp: Ditto.
        * platform/network/cf/CredentialStorageCFNet.cpp: Ditto.
        * platform/network/cf/FormDataStreamCFNet.cpp: Ditto.
        * platform/network/cf/NetworkStorageSessionCFNet.cpp: Ditto.
        (WebCore::NetworkStorageSession::switchToNewTestingSession):
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession):
        * platform/network/cf/ResourceError.h: Ditto.
        * platform/network/cf/ResourceHandleCFNet.cpp: Ditto.
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        * platform/network/cf/ResourceRequest.h: Ditto.
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp: Ditto.
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cf/ResourceResponse.h: Ditto.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        * platform/network/mac/ResourceResponseMac.mm: Ditto.
        * platform/posix/FileSystemPOSIX.cpp: Changed PLATFORM(MAC) to OS(DARWIN) &&
        !PLATFORM(EFL) && !PLATFORM(GTK).
        * platform/text/TextBoundaries.cpp: Changed PLATFORM(MAC) to PLATFORM(COCOA).

2014-02-07  Ryosuke Niwa  <rniwa@webkit.org>

        Revert r154384 and r154674 as they broke selection rect computations for text with ligatures.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::drawEmphasisMarks):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::getGlyphsAndAdvancesForSimpleText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advanceInternal):
        (WebCore::WidthIterator::advanceOneCharacter):
        * platform/graphics/WidthIterator.h:

2014-02-07  Benjamin Poulain  <bpoulain@apple.com>

        [WK2] Add support for text document viewport configuration
        https://bugs.webkit.org/show_bug.cgi?id=128359

        Reviewed by Simon Fraser.

        Define a set of ViewportParameters suitable for displaying text documents.
        Add a documents class for text document to differentiate them from other type of documents.

        * WebCore.exp.in:
        * dom/Document.h:
        (WebCore::Document::isTextDocument):
        * html/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * page/ViewportConfiguration.cpp:
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::webpageParameters):
        (WebCore::ViewportConfiguration::plainTextParameters):
        * page/ViewportConfiguration.h:

2014-02-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        FloatingObject::unsafeClone should not copy m_originatingLine
        https://bugs.webkit.org/show_bug.cgi?id=128381

        Reviewed by Andreas Kling.

        Copying the originatingLine allows to break the invariant that the
        floating object must only contain lines that are owned by the renderer
        it is attached to.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObject::unsafeClone):

2014-02-07  Brendan Long  <b.long@cablelabs.com>

        Update TextTrack API to current spec
        https://bugs.webkit.org/show_bug.cgi?id=122218

        Refactoring VTTCue out of TextTrackCue.

        Reviewed by Eric Carlson.

        Test: media/track/track-vttcue.html

        * CMakeLists.txt: Add VTTCue and rename RenderTextTrackCue to RenderVTTCue.
        * DerivedSources.cpp: Same.
        * DerivedSources.make: Same.
        * GNUmakefile.list.am: Same.
        * PlatformGTK.cmake:  Same.
        * WebCore.vcxproj/WebCore.vcxproj: Same.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * bindings/js/JSTextTrackCueCustom.cpp:
        (WebCore::toJS): Use VTTCue DOM wrapper for VTTCue and its subclasses.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues): Convert to VTTCue as needed.
        (WebCore::HTMLMediaElement::textTrackRemoveCue): Same.
        * html/HTMLMediaElement.h: Only print cue.text in debug output if the cue type has a .text attribute
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Convert to VTTCue as needed, and fix TextTrackCueBox to VTTCueBox.
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired): Convert to VTTCue as needed.
        * html/track/InbandGenericTextTrack.cpp:
        (WebCore::InbandGenericTextTrack::addGenericCue): Use refactored VTTCue attributes.
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed): Use VTTCue's constructor instead of deprecated TextTrackCue constructor.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::setMode): Convert to VTTCue as needed.
        (WebCore::TextTrack::hasCue): Make this function only accept VTTCues, since it's only used for them anyway, and convert existing cues to VTTCues as needed.
        * html/track/TextTrack.h: Same as hasCue above.
        * html/track/TextTrackCue.cpp: Refactor a lot of code out. Everything that was removed went to VTTCue.cpp.
        (WebCore::TextTrackCue::create): For backwards compatibility, just call VTTCue::create().
        (WebCore::TextTrackCue::TextTrackCue): Refactor a lot of code out.
        (WebCore::TextTrackCue::~TextTrackCue): Same.
        (WebCore::TextTrackCue::didChange): Same.
        (WebCore::TextTrackCue::setIsActive): Same.
        * html/track/TextTrackCue.h: Same.
        * html/track/TextTrackCue.idl: Remove VTTCue attributes and add custom toJS function.
        * html/track/TextTrackCueGeneric.cpp: Use VTTCue instead of TextTrackCue.
        * html/track/TextTrackCueGeneric.h: Same.
        * html/track/VTTCue.cpp: Copied from Source/WebCore/html/track/TextTrackCue.cpp.
        * html/track/VTTCue.h: Copied from Source/WebCore/html/track/TextTrackCue.h.
        * html/track/VTTCue.idl: Copied from Source/WebCore/html/track/TextTrackCue.idl.
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewCues): Use VTTCue instead of TextTrackCue.
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride): Use VTTCueBox instead of TextTrackCueBox.
        * rendering/RenderVTTCue.cpp: Renamed from Source/WebCore/rendering/RenderTextTrackCue.cpp. Changed to use VTTCue instead of TextTrackCue.
        * rendering/RenderVTTCue.h: Renamed from Source/WebCore/rendering/RenderTextTrackCue.h. Changed to use VTTCue instead of TextTrackCue.
        * rendering/RenderingAllInOne.cpp: Rename RenderTextTrackCue to RenderVTTCue.

2014-02-07  Gavin Barraclough  <barraclough@apple.com>

        Should report user input to PageThrottler
        https://bugs.webkit.org/show_bug.cgi?id=128398

        Reviewed by Tim Horton.

        Make sure we wake from AppNap if there is user interaction.

        * page/PageThrottler.h:
        (WebCore::PageThrottler::didReceiveUserInput):
        (WebCore::PageThrottler::pluginDidEvaluate):
            - added, these call reportInterestingEvent()

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

        Unreviewed build fix for 32-bit iOS.

        Use magic ? values to allow the exported symbol to be different on 32- and 64-bit builds.

        * WebCore.exp.in:

2014-02-07  Anders Carlsson  <andersca@apple.com>

        Convert ProgressTracker to std::chrono
        https://bugs.webkit.org/show_bug.cgi?id=128377

        Reviewed by Andreas Kling.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::reset):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:

2014-02-07  Alexey Proskuryakov  <ap@apple.com>

        32-bit build fix.

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute):

2014-02-07  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Unprefix the -webkit-background-blend-mode property

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

        Reviewed by Dean Jackson.

        This patch consist of unprefixing the -webkit-background-blend-mode.
        The property now changes to background-blend-mode.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseFillProperty):
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):

2014-02-07  Samuel White  <samuel_white@apple.com>

        AX: Find and select text with respect to insertion point using accessibility API.
        https://bugs.webkit.org/show_bug.cgi?id=128026

        Reviewed by Chris Fleizach.

        Added facilities to support semi-ambiguous text selection through the accessibility API. All
        requests are handled with respect to the current selection. The requests are disambiguated in
        WebCore using passed parameters such as: SelectStringAfterSelection , ..Before.., ..ClosestTo...,
        etc. Callers can also supply an array of strings to select and the closest that matches the
        disambiguation criteria will be used.

        Test: platform/mac/accessibility/select-text.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::rangeClosestToRange):
        (WebCore::AccessibilityObject::rangeOfStringClosestToRangeInDirection):
        (WebCore::AccessibilityObject::selectionRange):
        (WebCore::AccessibilityObject::selectText):
        (WebCore::AccessibilityObject::frame):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySelectTextCriteria::AccessibilitySelectTextCriteria):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySelectTextCriteriaForCriteriaParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        * dom/Position.cpp:
        (WebCore::Position::positionCountBetweenPositions):
        * dom/Position.h:

2014-02-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        FloatingObject m_paginationStrut should be LayoutUnit
        https://bugs.webkit.org/show_bug.cgi?id=119808

        Reviewed by Andreas Kling.

        Make the paginationStrut in FloatingObject have the same type as all
        of the other paginationStruts in the code.

        * rendering/FloatingObjects.h:
        (WebCore::FloatingObject::paginationStrut):
        (WebCore::FloatingObject::setPaginationStrut):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):

2014-02-06  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/create-index-with-integer-keys.html fails
        <rdar://problem/16002857> and https://bugs.webkit.org/show_bug.cgi?id=128316

        Reviewed by Geoff Garen.

        Tested by storage/indexeddb/create-index-with-integer-keys.html (and probably some others)

        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::update): Update createIDBKeyFromScriptValueAndKeyPath usage.
        (WebCore::IDBCursor::setValueReady): Update createIDBKeyFromScriptValueAndKeyPath usage.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::put): Update usage of binding utilities.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Update createIDBKeyFromScriptValueAndKeyPath usage.

        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::internalCreateIDBKeyFromScriptValueAndKeyPath):
        (WebCore::createIDBKeyFromScriptValueAndKeyPath): Changed to take an ExecState*.
        (WebCore::deserializeIDBValueBuffer): Added new version that starts with ExecState* and Vector<uint8_t>
          instead of RequestState and SharedBuffer.
        (WebCore::generateIndexKeysForValue): Moved from IDBObjectStore.cpp and changed to take an ExecState*
        * bindings/js/IDBBindingUtilities.h:

        Added new blob fetcher that works with uint8_t buffers:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::getColumnBlobAsVector):
        * platform/sql/SQLiteStatement.h:

        * WebCore.exp.in:

2014-02-07  Frédéric Wang  <fred.wang@free.fr>

        childShouldCreateRenderer should return false for the mspace element
        https://bugs.webkit.org/show_bug.cgi?id=128325

        Reviewed by Chris Fleizach.

        The mspace element can not have children so this makes its
        childShouldCreateRenderer always return false.

        Test: mathml/presentation/mspace-children.html

        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::childShouldCreateRenderer):

2014-02-07  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Rename grid-definition-{columns|rows} to match the new syntax
        https://bugs.webkit.org/show_bug.cgi?id=127989

        Reviewed by Andreas Kling.

        In the latest WD, grid-definition-{columns|rows} were renamed to grid-template-{columns|rows}.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

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

        CTTE: DocumentThreadableLoader always has a Document.
        <https://webkit.org/b/128364>

        DocumentThreadableLoader always has an "owner" Document, so store
        that as a reference instead of a pointer. Removed some unnecessary
        assertions exposed by this change.

        Reviewed by Antti Koivisto.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously):
        (WebCore::DocumentThreadableLoader::create):
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFinishLoading):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        (WebCore::DocumentThreadableLoader::loadRequest):
        (WebCore::DocumentThreadableLoader::securityOrigin):
        * loader/DocumentThreadableLoader.h:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoader::create):
        (WebCore::ThreadableLoader::loadResourceSynchronously):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):

2014-02-07  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Vector-effect updates require a re-layout
        https://bugs.webkit.org/show_bug.cgi?id=127553

        Reviewed by Andreas Kling.

        As noted in the stale SVGRenderStyle::diff() comment, now that layout() observes vector-effect
        we need to trigger a re-layout on attribute changes.

        Merged from Blink: https://src.chromium.org/viewvc/blink?revision=152570&view=revision

        Tests: svg/custom/non-scaling-stroke-update-expected.svg
               svg/custom/non-scaling-stroke-update.svg

        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):

2014-02-07  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Renaming isTableElement() to isRenderedTable() as per the FIXME comment
        https://bugs.webkit.org/show_bug.cgi?id=127769

        Reviewed by Andreas Kling.

        Rename method and use IsTable() instead of local type checking.

        * dom/Position.cpp:
        (WebCore::Position::parentAnchoredEquivalent):
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        (WebCore::CompositeEditCommand::moveParagraphWithClones):
        * editing/FrameSelection.cpp:
        (WebCore::caretRendersInsideNode):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * editing/htmlediting.cpp:
        (WebCore::firstInSpecialElement):
        (WebCore::lastInSpecialElement):
        (WebCore::isRenderedTable):
        * editing/htmlediting.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::localCaretRect):

2014-02-06  Brady Eidson  <beidson@apple.com>

        IDB: Remove the entirely unnecessary "Value Key" concept
        https://bugs.webkit.org/show_bug.cgi?id=128360

        Reviewed by Dan Bernstein.

        No new tests (No change in behavior)

        All cursor operations were set up to pass a value key parameter around, but it was:
        1 - Entirely unused
        2 - The same thing that the primary key is supposed to be

        * Modules/indexeddb/IDBCallbacks.h:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::updateCursorData):
        (WebCore::IDBCursorBackend::clear):
        * Modules/indexeddb/IDBCursorBackend.h:

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

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBRequest.h:

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

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

2014-02-06  Jeremy Jones  <jeremyj@apple.com>

        Add support for AVKit fullscreen to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=128143

        Reviewed by Simon Fraser.

        Rename overloaded functions to prevent ambiguous template parameter
        compile error in generated code.

        Rename overloaded exitFullscreen to exitFullscreenWithCompletionHandler.
        Rename overloaded enterFullscreen to enterFullscreenWithCompletionHandler.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h:
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::enterFullscreenWithCompletionHandler):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreenWithCompletionHandler):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        * platform/ios/WebVideoFullscreenModelMediaElement.h:

2014-02-06  Jeffrey Pfau  <jpfau@apple.com>

        loadSubframe can return null in SubframeLoader::loadOrRedirectSubframe
        https://bugs.webkit.org/show_bug.cgi?id=128344

        Reviewed by Ryosuke Niwa.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe):

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

        Use child iterator in HTMLDetailsElement::findMainSummary().
        <https://webkit.org/b/128335>

        Reviewed by Antti Koivisto.

        * html/HTMLDetailsElement.h:
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::findMainSummary):

2014-02-06  Antti Koivisto  <antti@apple.com>

        Add missing &.

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::shouldDirtyAllStyle):

2014-02-06  Antti Koivisto  <antti@apple.com>

        Check selectors exactly when invalidating style
        https://bugs.webkit.org/show_bug.cgi?id=128321

        Reviewed by Andreas Kling.
        
        Selectors are now really fast to match with the JIT. Take advantage of this by invalidating
        the document style exactly when a new stylesheet arrives (instead of using heuristics).
        
        This reduces need for large style recalculations in some common cases.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::clearMatchedRules):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::hasMatchedRules):
        * css/RuleSet.h:
        (WebCore::RuleSet::hasShadowPseudoElementRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::matchRecursively):
        * css/SelectorChecker.h:
        
            Add new mode where all pseudo elements match so we can invalidate their element.

        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::shouldDirtyAllStyle):
        (WebCore::StyleInvalidationAnalysis::StyleInvalidationAnalysis):
        (WebCore::invalidateStyleRecursively):
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        
            Switch to real selector checker.

        * css/StyleInvalidationAnalysis.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::MatchedProperties::~MatchedProperties):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::mediaQueryEvaluator):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):

2014-02-06  Gavin Barraclough  <barraclough@apple.com>

        Remove ChildProcess::m_activeTasks
        https://bugs.webkit.org/show_bug.cgi?id=128342

        Reviewed by Anders Carlson.

        Currently we funnel a number of different user activities
        to a single UserActivity object, which requires a call down
        from WebCore to WebKit2. Split these out so we can track
        them separately.

        * page/ChromeClient.h:
            - removed [inc|dec]rementActivePageCount
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - incrementActivePageCount -> beginActivity
        (WebCore::PageThrottler::~PageThrottler):
            - decrementActivePageCount -> endActivity
        (WebCore::PageThrottler::throttlePage):
            - decrementActivePageCount -> endActivity
        (WebCore::PageThrottler::unthrottlePage):
            - incrementActivePageCount -> beginActivity
        * page/PageThrottler.h:
            - Added m_pageActivity.

2014-02-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163558.
        http://trac.webkit.org/changeset/163558
        https://bugs.webkit.org/show_bug.cgi?id=128350

        Breaks scrolling on certain websites (Requested by bfulgham on
        #webkit).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * page/WheelEventDeltaTracker.h:

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

        AX: Crash in WebCore::AXObjectCache::computedObjectAttributeCache
        https://bugs.webkit.org/show_bug.cgi?id=128310

        Reviewed by Alexey Proskuryakov.

        Be more careful about using axObjectCache() directly since it can return null.
        I audited the usage cases of this method and ensured the ptr was not null in cases
        where I thought we might get hit by this.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::parentObject):
        (WebCore::AccessibilityNodeObject::menuForMenuButton):
        (WebCore::AccessibilityNodeObject::menuButtonForMenu):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::firstAccessibleObjectFromNode):
        (WebCore::AccessibilityObject::findMatchingObjects):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        (WebCore::AccessibilityObject::axObjectCache):
        (WebCore::AccessibilityObject::notifyIfIgnoredValueChanged):
        (WebCore::AccessibilityObject::accessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::anchorElement):
        (WebCore::AccessibilityRenderObject::isTabItemSelected):
        (WebCore::AccessibilityRenderObject::accessibilityParentForImageMap):
        (WebCore::AccessibilityRenderObject::nodeIsTextControl):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):
        (WebCore::AccessibilityRenderObject::observableObject):
        (WebCore::AccessibilityRenderObject::textChanged):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        (WebCore::AccessibilityScrollView::webAreaObject):
        (WebCore::AccessibilityScrollView::parentObject):
        (WebCore::AccessibilityScrollView::parentObjectIfExists):

2014-02-06  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Rounded Insets Let Content Overlap Shape
        https://bugs.webkit.org/show_bug.cgi?id=127852

        Reviewed by Bem Jones-Bey.

        Using LengthSize to FloatSize conversion from LengthSize.h lead to miscalculated
        inset border radius, when the border radius was defined by percentages. This patch
        fixes the behavior and removes the incorrect conversion.

        Test: fast/shapes/shape-outside-floats/shape-outside-rounded-inset.html

        * css/LengthFunctions.cpp:
        (WebCore::floatSizeForLengthSize): Add new helper function for LengthSize to FloatSize conversion.
        * css/LengthFunctions.h:
        * platform/LengthSize.h: Remove floatSize conversion.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Use new helper function to calculate the right with for the inset border radius.

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Regenerate JSTestObj now that ScriptArguments moved. Generator knows what to do.

        Rubber-stamped by Zalan Bujtas.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack):

2014-02-04  Jeffrey Pfau  <jpfau@apple.com>

        Make adoption agency use the task queue
        https://bugs.webkit.org/show_bug.cgi?id=109445

        Reviewed by Ryosuke Niwa.

        Tests: fast/parser/adoption-agency-crash-01.html
               fast/parser/adoption-agency-crash-02.html
               fast/parser/adoption-agency-crash-03.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::insert):
        (WebCore::executeInsertTask):
        (WebCore::executeReparentTask):
        (WebCore::executeInsertAlreadyParsedChildTask):
        (WebCore::executeTakeAllChildrenTask):
        (WebCore::executeTask):
        (WebCore::HTMLConstructionSite::attachLater):
        (WebCore::HTMLConstructionSite::executeQueuedTasks):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::reparent):
        (WebCore::HTMLConstructionSite::insertAlreadyParsedChild):
        (WebCore::HTMLConstructionSite::takeAllChildren):
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSiteTask::HTMLConstructionSiteTask):
        (WebCore::HTMLConstructionSiteTask::oldParent):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2014-02-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap::writeBarrier shouldn't be static
        https://bugs.webkit.org/show_bug.cgi?id=127807

        Reviewed by Geoffrey Garen.

        Currently it looks up the Heap in which to fire the write barrier by using 
        the cell passed to it. Almost every call site already has a reference to the 
        VM or the Heap itself. It seems wasteful to look it up all over again.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2014-02-06  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed, fix build error on 64bit debug build

        Apply static_cast<long long> to int64_t variable when '%lli' is used.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::setActive):

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Console support to JSContext Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127941

        Reviewed by Geoffrey Garen.

          - Move InspectorConsoleAgent and dependencies to JavaScriptCore
            and into the Inspector namespace.
          - Update Console Message enum types to enum classes and update
            all users to the new, simpler names.
          - Since we are updating addConsoleMessage callsites anyways, add
            ASCIILiteral where appropriate.
          - Add WebConsoleAgent base of Page/Worker ConsoleAgent to implement
            what could not be pushed into JavaScriptCore.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/ConsoleMessage.h: Added.
        * ForwardingHeaders/inspector/ConsoleTypes.h: Added.
        * ForwardingHeaders/inspector/IdentifiersFactory.h: Added.
        * ForwardingHeaders/inspector/ScriptArguments.h: Added.
        * ForwardingHeaders/inspector/ScriptCallFrame.h: Added.
        * ForwardingHeaders/inspector/ScriptCallStack.h: Added.
        * ForwardingHeaders/inspector/ScriptCallStackFactory.h: Added.
        * ForwardingHeaders/inspector/agents/InspectorConsoleAgent.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        Add / remove files from builds.

        * inspector/WebConsoleAgent.h:
        * inspector/WebConsoleAgent.cpp: Added.
        (WebCore::WebConsoleAgent::WebConsoleAgent):
        (WebCore::WebConsoleAgent::setMonitoringXHREnabled):
        (WebCore::WebConsoleAgent::frameWindowDiscarded):
        (WebCore::WebConsoleAgent::didFinishXHRLoading):
        (WebCore::WebConsoleAgent::didReceiveResponse):
        (WebCore::WebConsoleAgent::didFailLoading):
        (WebCore::WebConsoleAgent::addInspectedHeapObject):
        Implement what could not be pushed down into JavaScriptCore.

        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::webConsoleAgent):
        (WebCore::InstrumentingAgents::setWebConsoleAgent):
        Hold a WebConsoleAgent instead of InspectorConsoleAgent.

        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/quota/DOMWindowQuota.cpp:
        (WebCore::DOMWindowQuota::webkitStorageInfo):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::setPanningModel):
        * Modules/webdatabase/DatabaseBase.cpp:
        (WebCore::DatabaseBase::logErrorMessage):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::logErrorMessage):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        (WebCore::WebSocket::send):
        (WebCore::WebSocket::close):
        (WebCore::WebSocket::setBinaryType):
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::fail):
        (WebCore::WebSocketChannel::didFailSocketStream):
        * Modules/websockets/WebSocketHandshake.cpp:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSAudioContextCustom.cpp:
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSDOMBinding.cpp:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::canExecuteScripts):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateCallWith):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::logError):
        * css/MediaList.cpp:
        (WebCore::addResolutionWarningMessageToConsole):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::executeScript):
        (WebCore::ScriptElement::notifyFinished):
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptExecutionContext.h:
        * dom/ViewportArguments.cpp:
        (WebCore::viewportErrorMessageLevel):
        (WebCore::reportViewportWarning):
        * fileapi/Blob.cpp:
        * fileapi/WebKitBlobBuilder.cpp:
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::getImageData):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        * html/parser/XSSAuditorDelegate.cpp:
        (WebCore::XSSAuditorDelegate::didBlockScript):
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorConsoleAgent.h: Removed.
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::consoleCount):
        (WebCore::InspectorInstrumentation::stopConsoleTiming):
        (WebCore::InspectorInstrumentation::consoleTimeStamp):
        (WebCore::InspectorInstrumentation::addProfile):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameWindowDiscardedImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseImpl):
        (WebCore::InspectorInstrumentation::didFailLoadingImpl):
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::isConsoleAssertMessage):
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::consoleCountImpl):
        (WebCore::InspectorInstrumentation::startConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::stopConsoleTimingImpl):
        (WebCore::InspectorInstrumentation::consoleAgentEnabled):
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::clearMessages):
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::breakpointActionLog):
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::WebConsoleAgent::~WebConsoleAgent):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        (WebCore::WorkerConsoleAgent::addInspectedNode):
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::breakpointActionLog):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::reportLocalLoadFailed):
        (WebCore::FrameLoader::handleBeforeUnloadEvent):
        (WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions):
        (WebCore::createWindow):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::notifyFinished):
        * loader/MixedContentChecker.cpp:
        (WebCore::MixedContentChecker::logWarning):
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::corsPolicyPreventedLoad):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::abort):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * page/ChromeClient.h:
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::debug):
        (WebCore::Console::error):
        (WebCore::Console::log):
        (WebCore::Console::warn):
        (WebCore::Console::dir):
        (WebCore::Console::dirxml):
        (WebCore::Console::table):
        (WebCore::Console::clear):
        (WebCore::Console::trace):
        (WebCore::Console::assertCondition):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::groupEnd):
        * page/Console.h:
        * page/ConsoleTypes.h: Removed.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::reportViolation):
        (WebCore::ContentSecurityPolicy::logToConsole):
        * page/DOMSecurityPolicy.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessage):
        (WebCore::DOMWindow::dispatchMessageEventWithOriginCheck):
        (WebCore::DOMWindow::close):
        (WebCore::DOMWindow::printErrorMessage):
        * page/DOMWindow.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::didReceiveResponse):
        (WebCore::EventSource::didFailAccessControlCheck):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printMessageSourceAndLevelPrefix):
        (WebCore::PageConsole::addMessage):
        * page/PageConsole.h:
        * page/PointerLockController.cpp:
        (WebCore::PointerLockController::requestPointerLock):
        * platform/CrossThreadCopier.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::checkShapeImageOrigin):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::reportMessage):
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * testing/Internals.cpp:
        (WebCore::Internals::consoleMessageArgumentCounts):
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::SharedWorkerGlobalScope::logExceptionToConsole):
        * workers/SharedWorkerGlobalScope.h:
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::addMessageToWorkerConsole):
        * workers/WorkerGlobalScope.h:
        * workers/WorkerMessagingProxy.cpp:
        * workers/WorkerReportingProxy.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::logConsoleError):
        (WebCore::XMLHttpRequest::send):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Convert a parameter to PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=128327

        Reviewed by Timothy Hatcher.

        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addProfile):
        * inspector/InspectorInstrumentation.h:

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

        Push DOM attributes into the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=127969

        Reviewed by Mark Lam.

        This patch does the actual work of moving dom attributes up the
        prototype chain. There are still a few class and edge cases
        where we can't do this without impacting existing behaviour,
        but they can be fixed separately in later patches.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticPropertySlotEntryWithoutCaching):
        (WebCore::getStaticPropertySlotEntryWithoutCaching<JSDOMWrapper>):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (HasComplexGetOwnProperty):
        (ConstructorShouldBeOnInstance):
        (AttributeShouldBeOnInstance):
        (InstanceAttributeCount):
        (PrototypeAttributeCount):
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateAttributesHashTable):
        (GenerateImplementation):

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

        Remove display:run-in support.
        <https://webkit.org/b/127874>
        <rdar://problem/15926949>

        Remove support for the "run-in" display type. Blink recently removed
        this and Gecko never supported in the first place.

        Rubber-stamped by Anders Carlsson.

        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::equivalentBlockDisplay):
        (WebCore::doesNotInheritTextDecoration):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::canMergeContiguousAnonymousBlocks):
        (WebCore::RenderBlock::renderName):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::shouldCheckLines):
        (WebCore::getHeightForLineCount):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        (WebCore::RenderElement::destroyLeftoverChildren):
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateFromStyle):
        (WebCore::RenderInline::renderName):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderListBox.cpp:
        * rendering/RenderListBox.h:
        * rendering/RenderMenuList.cpp:
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.cpp:
        * rendering/RenderProgress.h:
        * rendering/RenderSlider.cpp:
        * rendering/RenderSlider.h:
        * rendering/RenderTextControl.cpp:
        * rendering/RenderTextControl.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        * rendering/style/RenderStyleConstants.h:

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

        Remove leftover cruft from scoped stylesheet implementation.
        <https://webkit.org/b/128139>

        Kill some pointless non-null checks that were left behind by the
        removed <style scoped> code. Also pruned outdated comments and
        FIXME's about such scopes.

        Reviewed by Antti Koivisto.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::checkRegionStyle):

2014-02-05  Brent Fulgham  <bfulgham@apple.com>

        Wheel events don't latch to inner scrollable elements 
        https://bugs.webkit.org/show_bug.cgi?id=128225

        Reviewed by Beth Dakin.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent): Identify the case
        where we have hit the end of a scroll, and treat that as a
        valid 'handled' case. If the scroll event is just starting,
        treat end-of-scroll as unhandled so the parent element can
        handle things.
        * page/WheelEventDeltaTracker.h:
        (WebCore::WheelEventDeltaTracker::isFirstWheelEvent): Added.

2014-02-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163542.
        http://trac.webkit.org/changeset/163542
        https://bugs.webkit.org/show_bug.cgi?id=128324

        Caused many assertion failures (Requested by ap on #webkit).

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2014-02-06  Frédéric Wang  <fred.wang@free.fr>

        Do not draw multi-characters <mi> in italic.
        https://bugs.webkit.org/show_bug.cgi?id=44208

        Reviewed by Chris Fleizach.

        This test prevents multi-char <mi> to be drawn in italic and prepare
        further improvements to MathML token and mfenced elements (bugs 124838
        and bug 99620).

        Test: mathml/presentation/tokenElements-dynamic.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/mathml.css:
        (mi, mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle, menclose):
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::didAttachRenderers):
        (WebCore::MathMLTextElement::childrenChanged):
        (WebCore::MathMLTextElement::createElementRenderer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderMathMLToken):
        * rendering/mathml/RenderMathMLToken.cpp: Added.
        (WebCore::RenderMathMLToken::RenderMathMLToken):
        (WebCore::RenderMathMLToken::addChild):
        (WebCore::RenderMathMLToken::createWrapperIfNeeded):
        (WebCore::RenderMathMLToken::updateTokenContent):
        (WebCore::RenderMathMLToken::updateStyle):
        (WebCore::RenderMathMLToken::styleDidChange):
        (WebCore::RenderMathMLToken::updateFromElement):
        * rendering/mathml/RenderMathMLToken.h: Added.
        (WebCore::RenderMathMLToken::element):
        (WebCore::RenderMathMLToken>):

2014-02-06  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Simplify BasicShapeInset creation
        https://bugs.webkit.org/show_bug.cgi?id=128314

        Reviewed by David Hyatt.

        Introduce convertToLengthSize helper function in order to simplify and make BasicShapeInset more readable.

        No new tests, no behavior change.

        * css/BasicShapeFunctions.cpp:
        (WebCore::convertToLengthSize):
        (WebCore::basicShapeForValue):

2014-02-06  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):

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

        [CSS Grid Layout] getComputedStyle() is wrong for grid-definition-{columns|rows}
        https://bugs.webkit.org/show_bug.cgi?id=127033

        Reviewed by Andreas Kling.

        Tests: fast/css-grid-layout/non-grid-columns-rows-get-set-multiple.html
               fast/css-grid-layout/non-grid-columns-rows-get-set.html
               fast/css-grid-layout/non-grid-element-repeat-get-set.html
               fast/css-grid-layout/non-named-grid-line-get-set.html

        According to the specs getComputedStyle() should return the used
        values instead of the resolved values for compatibility with early
        implementations. This means that grid-definition-{columns|rows}
        are now layout dependent as we need to compute the used values for
        grid track sizes.

        Updated the outcome of existing tests and added a bunch of new
        ones that check the behavior of the different properties outside
        grid containers.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::specifiedValueForGridTrackSize):
        (WebCore::valueForGridTrackList):
        (WebCore::isLayoutDependent):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength):
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength):
        (WebCore::RenderGrid::computeUsedBreadthOfSpecifiedLength):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
        (WebCore::RenderGrid::gridTrackSize):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        (WebCore::RenderGrid::growGrid):
        (WebCore::RenderGrid::autoPlacementMajorAxisDirection):
        (WebCore::RenderGrid::autoPlacementMinorAxisDirection):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::resolveGridPositionsFromAutoPlacementPosition):
        (WebCore::RenderGrid::resolveGridPositionsFromStyle):
        (WebCore::RenderGrid::gridAreaBreadthForChild):
        (WebCore::RenderGrid::populateGridPositions):
        (WebCore::RenderGrid::findChildLogicalPosition):
        * rendering/RenderGrid.h:

2014-02-06  Anders Carlsson  <andersca@apple.com>

        Modernize CrossOriginPreflightResultCache
        https://bugs.webkit.org/show_bug.cgi?id=128309

        Reviewed by Antti Koivisto.

        Use std::chrono::steady_clock instead of currentTime() for determining when
        cache items expire, Use std::unique_ptr instead of OwnPtr, use NeverDestroyed,
        get rid of unnecessary container typedefs now that we have auto. Finally,
        de-indent the entire class declaration.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::CrossOriginPreflightResultCache):
        (WebCore::parseAccessControlMaxAge):
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest):
        (WebCore::CrossOriginPreflightResultCache::shared):
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/CrossOriginPreflightResultCache.h:
        (WebCore::CrossOriginPreflightResultCacheItem::CrossOriginPreflightResultCacheItem):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveResponse):

2014-02-06  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Menclose with no notation attribute does not display anything.
        https://bugs.webkit.org/show_bug.cgi?id=127889

        Reviewed by Chris Fleizach.

        Menclose with no notation attribute should behave same as menclose with
        notation attribute with value as longdiv. By default the division
        symbol should be displayed. For empty and invalid notation attribute
        nothing should be displayed.

        Tests: mathml/presentation/menclose-notation-default-longdiv.html
               mathml/presentation/menclose-notation-invalid-empty.html

        * mathml/MathMLMencloseElement.h:
        * rendering/mathml/RenderMathMLMenclose.cpp:
        (WebCore::RenderMathMLMenclose::computePreferredLogicalWidths):
        (WebCore::RenderMathMLMenclose::paint):
        Added style for menclose with no notation attribute and handled this
        condition in paint also where for longdiv we are explicitly drawing
        the division symbol.

2014-02-05  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap::writeBarrier shouldn't be static
        https://bugs.webkit.org/show_bug.cgi?id=127807

        Reviewed by Geoffrey Garen.

        Currently it looks up the Heap in which to fire the write barrier by using 
        the cell passed to it. Almost every call site already has a reference to the 
        VM or the Heap itself. It seems wasteful to look it up all over again.

        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::JSEventListener):
        * bindings/js/JSEventListener.h:
        (WebCore::JSEventListener::jsFunction):

2014-02-06  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/mozilla/clear.html fails
        <rdar://problem/15997155> and https://bugs.webkit.org/show_bug.cgi?id=128282

        Reviewed by David Kilzer.

        Covered by storage/indexeddb/mozilla/clear.html (and probably others)

        Update the value deserializer to take into account whether or not there was an IDBKey:
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::deserializeIDBValueBuffer):
        * bindings/js/IDBBindingUtilities.h:

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Call the new form of deserializeIDBValueBuffer.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::clearObjectStore): Update logging.

        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::setActive): Update logging.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit): Fix ASSERTs to reflect multi-process worlds.

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

        Re-enable simple line layout on non-Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=123338

        Reviewed by Anders Carlsson.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2014-02-06  Koop Mast <kwm@FreeBSD.org>

        Use system default compiler instead of gcc, as final fall through.
        https://bugs.webkit.org/show_bug.cgi?id=126773

        Reviewed by Alexey Proskuryakov.

        * dom/make_names.pl:

2014-02-06  Eric Carlson  <eric.carlson@apple.com>

        No need to enterFullscreen() when already in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=128276

        Reviewed by Jer Noble.

        No new tests, this is just cleanup.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Don't call enterFullscreen() if already there.
        (WebCore::HTMLMediaElement::enterFullscreen): Return early if m_isFullscreen is already true.

2014-02-06  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Null dereference applying animation with CSS regions
        https://bugs.webkit.org/show_bug.cgi?id=128218

        Reviewed by Andrei Bucur.

        The first issue (the null dereference) was caused by the checkForZoomChange method
        not guarding against a null parentStyle parameter, as the checkForGenericFamilyChange 
        method does, which in the crashing scenario is called just before the faulty
        checkForZoomChange method.
        The second issue was an assert which was caused by the fact that detaching is performed
        in a certain situation if the element has a renderer or if it's inside a named flow.
        However, when reattaching and asserting the element has no renderer, the 
        "inside named flow" condition was no longer considered.

        Test: fast/regions/animation-element-in-region-flowed-to-other-thread.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::checkForZoomChange):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachChildren):

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

        Create a HTMLUnknownElement when using createElement('image')
        https://bugs.webkit.org/show_bug.cgi?id=125896

        Reviewed by Antti Koivisto.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/fd8a7b65f3300fb9245db24d5ed240c80b7f76ad

        * html/HTMLTagNames.in:

2014-02-06  Youenn Fablet  <youennf@gmail.com>

        [XHR] Ensure response return null when error flag is set for blob and arraybuffer
        https://bugs.webkit.org/show_bug.cgi?id=127050

        Reviewed by Alexey Proskuryakov.

        Added a check in JSXMLHttpRequest::response to ensure response return null when error flag is set for blob and arraybuffer
        This check also applies to document and json response types (no change in behavior for those types but code path change)
        Added assertions in the related XMLHttpRequest blob and array buffer getters
        Minor code clean-up.
        The test cases check all four response types in case of timeout and abort

        Tests: http/tests/xmlhttprequest/onabort-response-getters.html
               http/tests/xmlhttprequest/ontimeout-response-getters.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::response):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didCacheResponseJSON):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::responseBlob):
        (WebCore::XMLHttpRequest::responseArrayBuffer):

2014-02-05  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

2014-02-05  Simon Fraser  <simon.fraser@apple.com>

        Transfer the non-fast-scrollable region to the UI process for iOS
        https://bugs.webkit.org/show_bug.cgi?id=128293

        Reviewed by Benjamin Poulain.

        Two main changes to support sending the non-fast scrollable region
        to the UI process for iOS:
        
        1. Add ScrollingCoordinator::frameViewNonFastScrollableRegionChanged(),
        which is called when we've updated the touch event region (this can happen
        independenly of layout). When called we just scheduled a scrolling tree
        commit with the new region.
        
        2. Avoid thinking that we have a new root node with every remote scrolling
        transaction. This was a side-effect of reconstructing the scrolling state
        tree in the UI process, and caused us to try to grab a nonFastScrollableRegion
        from a node which never had one set.

        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::setHasNewRootStateNode):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::isPointInNonFastScrollableRegion):
        * page/scrolling/ScrollingTree.h:

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

        [iOS] Synchronize the WKContentView and UIScrollView updates with the tiles being commited
        https://bugs.webkit.org/show_bug.cgi?id=127886

        Reviewed by Simon Fraser.

        The updates of the views on the UIProcess side was completely disconnected
        from the tiles updates from the DrawingArea. There is a non-negligible time
        between the size/scale update and the new tiles coming, which causes
        visual glitches.

        There are three main cases where the tiles and content would be out of sync
        with the UIViews:
        -When loading a new page with different content width of a different viewport.
        -When a page changes its viewport.
        -When the viewport-constrainted viewport size changes.

        To fix the issue, WKView is modified to maintain the old state of WKContentView
        and UIScrollView until the new tiles are available.

        Geometry/scale update are split in two phases:
        1) A source (the page or the user) changes parameters of the geometry. The WebProcess updates
           its layout accordingly.
           At this point, the UIViews are unchanged and are left with the old parameters.
        2) Eventually, new tiles come and commitLayerTree() is called on the drawing area proxy.
           At that point, WKContentView and its UIScrollView are updated to match the committed
           size and scale for the page.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ViewportConfiguration.cpp: Added.
        (WebCore::constraintsAreAllRelative):
        (WebCore::ViewportConfiguration::ViewportConfiguration):
        (WebCore::ViewportConfiguration::setDefaultConfiguration):
        (WebCore::ViewportConfiguration::setContentsSize):
        (WebCore::ViewportConfiguration::setMinimumLayoutSize):
        (WebCore::ViewportConfiguration::setViewportArguments):
        (WebCore::ViewportConfiguration::layoutSize):
        (WebCore::ViewportConfiguration::initialScale):
        (WebCore::ViewportConfiguration::minimumScale):
        (WebCore::ViewportConfiguration::maximumScale):
        (WebCore::ViewportConfiguration::allowsUserScaling):
        (WebCore::viewportArgumentValueIsValid):
        (WebCore::applyViewportArgument):
        (WebCore::ViewportConfiguration::updateConfiguration):
        (WebCore::ViewportConfiguration::layoutWidth):
        (WebCore::ViewportConfiguration::layoutHeight):
        * page/ViewportConfiguration.h: Added.
        (WebCore::ViewportConfigurationConfiguration::ViewportConfigurationConfiguration):
        (WebCore::ViewportConfiguration::defaultConfiguration):
        (WebCore::ViewportConfiguration::contentsSize):
        (WebCore::ViewportConfiguration::minimumLayoutSize):
        (WebCore::ViewportConfiguration::viewportArguments):

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

        SelectorCodeGenerator::generateElementHasTagName should match the local name before the namespace
        https://bugs.webkit.org/show_bug.cgi?id=128167

        Reviewed by Sam Weinig.

        The local name is a stricter filter than the namespace, it should always run first.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):

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

        Add HTMLNames::classAttr as a regular name in SVGElement::isAnimatableAttribute
        https://bugs.webkit.org/show_bug.cgi?id=128166

        Reviewed by Sam Weinig.

        For historical reasons, classAttr was treated separately. There is no reasons for that anymore.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::isAnimatableAttribute):

2014-02-05  Simon Fraser  <simon.fraser@apple.com>

        Support encoding and decoding of Regions
        https://bugs.webkit.org/show_bug.cgi?id=128284

        Reviewed by Anders Carlsson.

        Region changes to make it encodable:
        
        Make Region::Span public and give it a default constructor.
        Allow getting and setting of Shape internals, and a way to update
        the Region bounds after changing the shape. Also add a way to test
        for valid spans and segments.

        * platform/graphics/Region.cpp:
        (WebCore::Region::Shape::isValid):
        (WebCore::Region::updateBoundsFromShape):
        * platform/graphics/Region.h:
        (WebCore::Region::isValid):
        (WebCore::Region::Span::Span):
        (WebCore::Region::shapeSegments):
        (WebCore::Region::shapeSpans):
        (WebCore::Region::setShapeSegments):
        (WebCore::Region::setShapeSpans):
        (WebCore::Region::Shape::segments):
        (WebCore::Region::Shape::spans):
        (WebCore::Region::Shape::setSegments):
        (WebCore::Region::Shape::setSpans):

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

        Rebaseline the bindings tests after Oliver's hackery.

        * bindings/scripts/test/JS/:

2014-02-05  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][GTK] Share plugin's implementation between EFL and Gtk ports.
        https://bugs.webkit.org/show_bug.cgi?id=70592

        Reviewed by Gyuyoung Kim.

        Merge common logics of PluginViewGtk.cpp and PluginViewEfl.cpp to PluginViewX11.cpp.
        So, this patch improves the windowless plugin support for the EFL port.

        * GNUmakefile.am: Add include path for gtk2xtbin.h header file.
        * GNUmakefile.list.am: Added PluginViewX11.cpp into source lists.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * plugins/PluginView.h: Added getRootWindow and getPluginDisply which implement platform specific code.
        * plugins/efl/PluginViewEfl.cpp:
        (WebCore::PluginView::getRootWindow):
        (WebCore::PluginView::platformGetValueStatic): Turn on NPNVSupportsWindowless support.
        (WebCore::PluginView::getPluginDisplay):
        (WebCore::PluginView::platformStart):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::getRootWindow):
        (WebCore::setXButtonEventSpecificFields):
        (WebCore::setXMotionEventSpecificFields):
        (WebCore::setXCrossingEventSpecificFields):
        (WebCore::PluginView::getPluginDisplay):
        (WebCore::PluginView::platformStart):
        * plugins/x11/PluginViewX11.cpp: Moved common logics from PluginViewGtk.cpp
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::handleFocusInEvent):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::handleFocusOutEvent):
        (WebCore::PluginView::initXEvent):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::setParent):
        (WebCore::PluginView::setNPWindowRect):
        (WebCore::PluginView::setNPWindowIfNeeded):

2014-02-05  Anders Carlsson  <andersca@apple.com>

        Fix a warning.

        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter):
        Remove an unnecessary comparison.

2014-02-05  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the !ENABLE(PAGE_VISIBILITY_API) build
        https://bugs.webkit.org/show_bug.cgi?id=127907

        Reviewed by Brent Fulgham.

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

2014-02-05  Oliver Hunt  <oliver@apple.com>

        Change custom getter signature to make the base reference an object pointer
        https://bugs.webkit.org/show_bug.cgi?id=128279

        Reviewed by Geoffrey Garen.

        Update everything to the new calling convention.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

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

        Buffer incoming data in ContentFilter when using NEFilterSource
        https://bugs.webkit.org/show_bug.cgi?id=127979

        Reviewed by Sam Weinig.

        WebFilterEvaluator buffers incoming data and returns it to us as
        replacement data if the load is allowed. NEFilterSource doesn't do
        this, so we need to do our own buffering.

        * platform/ContentFilter.h: Forward-declared NSMutableData and added
        m_originalData.
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter): Constructed m_originalData
        with an initial capacity (if we know the expected content size).
        (WebCore::ContentFilter::addData): Buffered incoming data if we are
        using NEFilterSource.
        (WebCore::ContentFilter::finishedAddingData):
        (WebCore::ContentFilter::getReplacementData): Returned m_originalData
        if the load wasn't blocked.

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

        Remove ENABLE(DIRECTORY_UPLOAD).
        <https://webkit.org/b/128275>

        This is a non-standard Chrome extension that none of the WebKit
        ports have even been building.

        Rubber-stamped by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:
        * fileapi/File.cpp:
        * fileapi/File.h:
        * fileapi/File.idl:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        (WebCore::FileInputType::createFileList):
        (WebCore::FileInputType::receiveDroppedFiles):
        * html/FileInputType.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLInputElement.idl:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/FileChooser.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):

2014-02-05  Brady Eidson  <beidson@apple.com>

        IDB: storage/indexeddb/mozilla/autoincrement-indexes.html fails
        https://bugs.webkit.org/show_bug.cgi?id=128257

        Reviewed by Sam Weinig.

        Tests: storage/indexeddb/mozilla/autoincrement-indexes.html

        Add some IDBKeyData utility methods for WK2 to use:
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::setArrayValue):
        (WebCore::IDBKeyData::setStringValue):
        (WebCore::IDBKeyData::setDateValue):
        (WebCore::IDBKeyData::setNumberValue):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

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

        Turn on ENABLE(8BIT_TEXTRUN) for everyone.
        <https://webkit.org/b/128273>

        Reviewed by Anders Carlsson.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::subRun):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderBlock.h:

2014-02-05  Enrica Casucci  <enrica@apple.com>

        WK2: Caret, selections and autocorrection bubbles are incorrectly positioned when inside an iframe.
        https://bugs.webkit.org/show_bug.cgi?id=128264
        <rdar://problem/15986954>

        Reviewed by Simon Fraser.

        Adding new exported function.

        * WebCore.exp.in:

2014-02-05  Antti Koivisto  <antti@apple.com>

        ElementRuleCollector should not use StyleResolver::State
        https://bugs.webkit.org/show_bug.cgi?id=128247

        Reviewed by Andreas Kling.
        
        Make ElementRuleCollector more reusable.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRules):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):
        (WebCore::ElementRuleCollector::matchAuthorRules):
        (WebCore::ElementRuleCollector::matchUARules):
        (WebCore::ElementRuleCollector::ruleMatches):
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::ElementRuleCollector::matchAllRules):
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        
            Pass the objects that are actually needed rather than the entire State.

2014-02-05  Brent Fulgham  <bfulgham@apple.com>

        [Mac] Correct copy/paste error in scrolling code.
        https://bugs.webkit.org/show_bug.cgi?id=128258

        Reviewed by Anders Carlsson.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::pinnedInDirection): Use
        'setWidth' when dealing with width metrics.

2014-02-05  Yuki Sekiguchi  <yuki.sekiguchi@access-company.com>

        Ruby base oddly justify its text when the text is ideograph and it contains <br> on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=106417

        Reviewed by David Hyatt.

        Ruby base always justify even if a line have hard break.
        Even if next leaf child is line break, InlineTextBox allow trailing expansion.
        This make <br> expanded, and there is odd space at the end of the line.

        Test: fast/text/ruby-justification-br.html

        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::expansionBehavior):
         - If next leaf child is line break, we should forbid trailing expansion.

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

        FrameLoader::stateMachine() should return a reference.
        <https://webkit.org/b/128263>

        There is always a FrameLoaderStateMatchine, so return it by
        reference since it can never be null.

        Reviewed by Anders Carlsson.

        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::finishedLoading):
        (WebCore::DocumentLoader::commitData):
        (WebCore::DocumentLoader::maybeLoadEmpty):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::prepareForHistoryNavigation):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::stateMachine):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::saveDocumentState):
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::storeResourceTimingInitiatorInformation):
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/FrameView.cpp:
        (WebCore::FrameView::qualifiesAsVisuallyNonEmpty):

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

        Move characterAt index checks from InlineIterator to RenderText
        https://bugs.webkit.org/show_bug.cgi?id=128224

        Reviewed by Simon Fraser.

        Move characterAt index checks from InlineIterator to RenderText
        so that all RenderText calls are covered. Few safe instances are
        now covered with uncheckedCharacterAt.

        Merged from Blink:
        http://src.chromium.org/viewvc/blink?view=revision&revision=150830

        Test: fast/text/character-at-crash.html

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::characterAt):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderText.h:
        (WebCore::RenderText::operator[]):
        (WebCore::RenderText::uncheckedCharacterAt):
        (WebCore::RenderText::characterAt):

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

        Remove leftover seamless iframe logic from containerForRepaint().
        <https://webkit.org/b/128235>

        The parent-flow-thread-in-different-document case is no longer
        relevant after <iframe seamless> was removed.

        Reviewed by David Hyatt.

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

2014-02-05  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Dynamically created element with image valued shape-outside doesn't update automatically
        https://bugs.webkit.org/show_bug.cgi?id=128187

        Reviewed by Dean Jackson.

        Corrected the way shape-outside handles the completion of an image load. Move
        the shape-outside imageChanged() logic from RenderBlock to RenderBox and call
        markShapeOutsideDependentsForLayout() instead of parent()->setNeedsLayoutAndPrefWidthsRecalc().
        The latter did not deal with descendants of the shape element's siblings correctly and it
        failed when the shape element was inserted dynamically. The markShapeOutsideDependentsForLayout()
        method can't be called during layout, so the imageChanged() code checks for that. The only
        scenario where imageChanged() can be called during layout (that I've discovered so far anyway)
        is when an SVG Image is renderered  with drawImage(). The Shape::createRasterShape() does this,
        and the corresponding imageChanged() notification can be safely ignored.

        Test: fast/shapes/shape-outside-floats/shape-outside-insert-svg-shape.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::imageChanged):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::imageChanged):

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

        CTTE: ImageLoader is always owned by an Element.
        <https://webkit.org/b/128254>

        - Codify this by making the constructor take Element& or better.
        - Make element() return Element&.
        - Marked HTMLImageLoader and SVGImageLoader final.
        - Made the ImageLoader constructor protected.

        Reviewed by Sam Weinig.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::HTMLImageLoader):
        (WebCore::HTMLImageLoader::dispatchLoadEvent):
        (WebCore::HTMLImageLoader::sourceURI):
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::imageLoader):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::startLoadingImage):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::ImageLoader):
        (WebCore::ImageLoader::~ImageLoader):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::notifyFinished):
        (WebCore::ImageLoader::renderImageResource):
        (WebCore::ImageLoader::updatedHasPendingEvent):
        (WebCore::ImageLoader::timerFired):
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        (WebCore::ImageLoader::dispatchPendingLoadEvent):
        (WebCore::ImageLoader::dispatchPendingErrorEvent):
        * loader/ImageLoader.h:
        (WebCore::ImageLoader::element):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::SVGImageLoader):
        (WebCore::SVGImageLoader::~SVGImageLoader):
        (WebCore::SVGImageLoader::dispatchLoadEvent):
        (WebCore::SVGImageLoader::sourceURI):
        * svg/SVGImageLoader.h:

2014-02-05  Sergio Correia  <sergio.correia@openbossa.org>

        SVG preserveAspectRatio=none is not honored.
        https://bugs.webkit.org/show_bug.cgi?id=111402

        Reviewed by Andreas Kling.

        Previously, preserveAspectRatio=none had no effect on SVG images. This change fixes this so
        we follow the special handling of preserveAspectRatio on images as defined in the spec:
        http://www.w3.org/TR/SVG/single-page.html, 7.8 The ‘preserveAspectRatio’ attribute.

        Images that depend on a container size (such as SVG images) require a call to
        setContainerSizeForRenderer(...) to set this size. By passing the image's intrinsic size
        as the container size, the non-uniform scaling defined in the spec will be achieved.

        Merged from Blink: https://chromiumcodereview.appspot.com/14964004

        Test: svg/custom/image-with-preserveAspectRatio-none.html

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::updateImageViewport):

2014-02-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Simplify CSSBasicShapeInset::cssText
        https://bugs.webkit.org/show_bug.cgi?id=127841

        Reviewed by David Hyatt.

        I introduced the updateCornerRadiusWidthAndHeight helper function, which makes the code of cssText method clearer.

        No new tests, no behavior change.

        * css/CSSBasicShapes.cpp:
        (WebCore::updateCornerRadiusWidthAndHeight): Add helper function.
        (WebCore::CSSBasicShapeInset::cssText):

2014-02-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Simplify BasicShapeInset::path
        https://bugs.webkit.org/show_bug.cgi?id=127920

        Reviewed by David Hyatt.

        I introduced a new static helper function called floatSizeForLengthSize
        in order to simplify BasicShapeInset::path method.

        No new tests, no behavior change.

        * rendering/style/BasicShapes.cpp:
        (WebCore::floatSizeForLengthSize): New helper function.
        (WebCore::BasicShapeInset::path):

2014-02-05  Wojciech Bielawski  <w.bielawski@samsung.com>

        XMLHttpRequest performs too many copies for ArrayBuffer results
        https://bugs.webkit.org/show_bug.cgi?id=117458

        Reviewed by Alexey Proskuryakov.

        Based on blink change: https://chromium.googlesource.com/chromium/blink/+/bed266aa5a43f7c080c87e527bd35e2b80ecc7b7

        Add SharedBuffer::createArrayBuffer() and use it to create XMLHttpRequest's response in ArrayBuffer
        This cuts
            - two memsets (in ArrayBuffer::create and SharedBuffer::m_buffer::resize)
            - one copy (SharedBuffer::m_buffer to ArrayBufferContents::m_data)
            - one allocation (SharedBuffer::m_buffer)

        No new tests. WebKit desn't provide test mechanism similar to blink's one.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createArrayBuffer):
        * platform/SharedBuffer.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseArrayBuffer):

2014-02-05  Csaba Osztrogonác  <ossy@webkit.org>

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

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * UseJSC.cmake:
        * WebCore.exp.in:
        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::supportsPath):
        (WebCore::AccessibilityRenderObject::elementPath):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::remoteSVGRootElement):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper isSVGGroupElement]):
        * bindings/gobject/GNUmakefile.am:
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSElementCustom.cpp:
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::createWrapperInline):
        * bindings/js/JSSVGElementInstanceCustom.cpp:
        * bindings/js/JSSVGLengthCustom.cpp:
        * bindings/js/JSSVGPathSegCustom.cpp:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCursorImageValue.cpp:
        (WebCore::resourceReferencedByCursorElement):
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        (WebCore::CSSCursorImageValue::removeReferencedElement):
        * css/CSSCursorImageValue.h:
        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        * css/CSSFontSelector.cpp:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseClipPath):
        (WebCore::CSSParser::parseShadow):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::realLex):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::isAcceptableCSSStyleSheetParent):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        (WebCore::CSSValue::isSubtypeExposedToCSSOM):
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyDisplay::isValidDisplayValue):
        (WebCore::ApplyPropertyClipPath::applyValue):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAllRules):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        * css/SVGCSSParser.cpp:
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getPropertyValue):
        * css/StylePropertyShorthand.cpp:
        (WebCore::markerShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::sharingCandidateHasIdenticalStyleAffectingAttributes):
        (WebCore::StyleResolver::canShareStyleWithElement):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingResources):
        * css/StyleResolver.h:
        * dom/DOMExceptions.in:
        * dom/DOMImplementation.cpp:
        (WebCore::addString):
        (WebCore::isSupportedSVG11Feature):
        (WebCore::DOMImplementation::hasFeature):
        (WebCore::DOMImplementation::createDocument):
        * dom/Document.cpp:
        (WebCore::Document::commonTeardown):
        (WebCore::Document::createElement):
        (WebCore::Document::implicitClose):
        (WebCore::Document::hasSVGRootNode):
        * dom/Document.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::Element::~Element):
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::boundsInRootViewSpace):
        (WebCore::Element::getBoundingClientRect):
        (WebCore::Element::removedFrom):
        (WebCore::Element::childShouldCreateRenderer):
        (WebCore::Element::fastAttributeLookupAllowed):
        (WebCore::Element::clearHasPendingResources):
        * dom/Element.h:
        * dom/ElementData.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::ElementRareData):
        * dom/EventDispatcher.cpp:
        (WebCore::eventTargetRespectingTargetRules):
        * dom/EventListenerMap.cpp:
        * dom/EventListenerMap.h:
        * dom/EventNames.in:
        * dom/EventTargetFactory.in:
        * dom/QualifiedName.cpp:
        * dom/ScriptElement.cpp:
        (WebCore::toScriptElementIfPossible):
        * dom/Text.cpp:
        (WebCore::isSVGText):
        (WebCore::Text::createTextRenderer):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * html/HTMLAnchorElement.cpp:
        (WebCore::shouldProhibitLinks):
        * html/HTMLEmbedElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::getSVGDocument):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLIFrameElement.idl:
        * html/HTMLObjectElement.idl:
        * html/canvas/DOMPath.h:
        (WebCore::DOMPath::create):
        * html/canvas/DOMPath.idl:
        * html/parser/XSSAuditor.cpp:
        (WebCore::isSemicolonSeparatedAttribute):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):
        * loader/FrameLoader.cpp:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::didRemoveClient):
        (WebCore::CachedImage::imageForRenderer):
        (WebCore::CachedImage::setContainerSizeForRenderer):
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::createImage):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceClient.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedSVGDocument.cpp:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentClient.h:
        * loader/cache/CachedSVGDocumentReference.cpp:
        * loader/cache/CachedSVGDocumentReference.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::clear):
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseMoveEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::instanceAssociatedWithShadowTreeElement):
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * page/EventHandler.h:
        * page/Frame.cpp:
        (WebCore::Frame::setPageAndTextZoomFactors):
        * page/FrameView.cpp:
        (WebCore::FrameView::applyOverflowToViewport):
        (WebCore::FrameView::forceLayoutParentViewIfNeeded):
        (WebCore::FrameView::embeddedContentBox):
        (WebCore::FrameView::scrollToAnchor):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedNonImageMimeTypes):
        * platform/graphics/TextRun.cpp:
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::getOrCreateCachedSVGDocumentReference):
        * platform/graphics/filters/FilterOperation.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::getURLForImageElement):
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::buildReferenceFilter):
        * rendering/HitTestLocation.cpp:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        (WebCore::HitTestResult::isLiveLink):
        * rendering/InlineBox.h:
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::addChild):
        (WebCore::RenderElement::layerCreationAllowedForSubtree):
        (WebCore::RenderElement::styleDidChange):
        * rendering/RenderGeometryMap.cpp:
        (WebCore::canMapBetweenRenderers):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::embeddedContentBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isTransparent):
        (WebCore::RenderLayer::setupClipPath):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::~FilterInfo):
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::nextNodeInsideContentElement):
        * rendering/RenderObject.cpp:
        (WebCore::objectIsRelayoutBoundary):
        (WebCore::RenderObject::container):
        (WebCore::RenderObject::willBeRemovedFromTree):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::canContainFixedPositionObjects):
        (WebCore::RenderObject::preservesNewline):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):
        (WebCore::RenderStyle::inheritFrom):
        (WebCore::RenderStyle::copyNonInheritedFrom):
        (WebCore::RenderStyle::operator==):
        (WebCore::RenderStyle::inheritedNotEqual):
        (WebCore::RenderStyle::inheritedDataShared):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/SVGRenderStyleDefs.cpp:
        * rendering/style/SVGRenderStyleDefs.h:
        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.cpp:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.cpp:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.cpp:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.cpp:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.cpp:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.cpp:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.cpp:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.cpp:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResource.cpp:
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.cpp:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.cpp:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGMarkerData.h:
        * rendering/svg/SVGPathData.cpp:
        * rendering/svg/SVGPathData.h:
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGRenderingContext.cpp:
        * rendering/svg/SVGRenderingContext.h:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGResources.h:
        * rendering/svg/SVGResourcesCache.cpp:
        * rendering/svg/SVGResourcesCache.h:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        * rendering/svg/SVGResourcesCycleSolver.h:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGSubpathData.h:
        * rendering/svg/SVGTextChunk.cpp:
        * rendering/svg/SVGTextChunk.h:
        * rendering/svg/SVGTextChunkBuilder.cpp:
        * rendering/svg/SVGTextChunkBuilder.h:
        * rendering/svg/SVGTextFragment.h:
        * rendering/svg/SVGTextLayoutAttributes.cpp:
        * rendering/svg/SVGTextLayoutAttributes.h:
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp:
        * rendering/svg/SVGTextLayoutEngine.h:
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp:
        * rendering/svg/SVGTextLayoutEngineBaseline.h:
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        * rendering/svg/SVGTextLayoutEngineSpacing.h:
        * rendering/svg/SVGTextMetrics.cpp:
        * rendering/svg/SVGTextMetrics.h:
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        * rendering/svg/SVGTextMetricsBuilder.h:
        * rendering/svg/SVGTextQuery.cpp:
        * rendering/svg/SVGTextQuery.h:
        * svg/ColorDistance.cpp:
        * svg/ColorDistance.h:
        * svg/GradientAttributes.h:
        * svg/LinearGradientAttributes.h:
        * svg/PatternAttributes.h:
        * svg/RadialGradientAttributes.h:
        * svg/SVGAElement.cpp:
        * svg/SVGAElement.h:
        * svg/SVGAElement.idl:
        * svg/SVGAltGlyphDefElement.cpp:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphDefElement.idl:
        * svg/SVGAltGlyphElement.cpp:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphElement.idl:
        * svg/SVGAltGlyphItemElement.cpp:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAltGlyphItemElement.idl:
        * svg/SVGAngle.cpp:
        * svg/SVGAngle.h:
        * svg/SVGAngle.idl:
        * svg/SVGAnimateColorElement.cpp:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateColorElement.idl:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateElement.idl:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateMotionElement.idl:
        * svg/SVGAnimateTransformElement.cpp:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimateTransformElement.idl:
        * svg/SVGAnimatedAngle.cpp:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedAngle.idl:
        * svg/SVGAnimatedBoolean.cpp:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedBoolean.idl:
        * svg/SVGAnimatedColor.cpp:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.cpp:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedEnumeration.idl:
        * svg/SVGAnimatedInteger.cpp:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedInteger.idl:
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLength.idl:
        * svg/SVGAnimatedLengthList.cpp:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedLengthList.idl:
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumber.idl:
        * svg/SVGAnimatedNumberList.cpp:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberList.idl:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.cpp:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.cpp:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedPreserveAspectRatio.idl:
        * svg/SVGAnimatedRect.cpp:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedRect.idl:
        * svg/SVGAnimatedString.cpp:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedString.idl:
        * svg/SVGAnimatedTransformList.cpp:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimatedTransformList.idl:
        * svg/SVGAnimatedType.cpp:
        * svg/SVGAnimatedType.h:
        * svg/SVGAnimatedTypeAnimator.cpp:
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGAnimationElement.h:
        * svg/SVGAnimationElement.idl:
        * svg/SVGAnimatorFactory.h:
        * svg/SVGCircleElement.cpp:
        * svg/SVGCircleElement.h:
        * svg/SVGCircleElement.idl:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGClipPathElement.h:
        * svg/SVGClipPathElement.idl:
        * svg/SVGColor.cpp:
        * svg/SVGColor.h:
        * svg/SVGColor.idl:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGCursorElement.cpp:
        * svg/SVGCursorElement.h:
        * svg/SVGCursorElement.idl:
        * svg/SVGDefsElement.cpp:
        * svg/SVGDefsElement.h:
        * svg/SVGDefsElement.idl:
        * svg/SVGDescElement.cpp:
        * svg/SVGDescElement.h:
        * svg/SVGDescElement.idl:
        * svg/SVGDocument.cpp:
        * svg/SVGDocument.h:
        * svg/SVGDocument.idl:
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        * svg/SVGElement.idl:
        * svg/SVGElementInstance.cpp:
        * svg/SVGElementInstance.h:
        * svg/SVGElementInstance.idl:
        * svg/SVGElementInstanceList.cpp:
        * svg/SVGElementInstanceList.h:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGEllipseElement.cpp:
        * svg/SVGEllipseElement.h:
        * svg/SVGEllipseElement.idl:
        * svg/SVGException.cpp:
        * svg/SVGException.h:
        * svg/SVGException.idl:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGExternalResourcesRequired.idl:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFEComponentTransferElement.idl:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDiffuseLightingElement.idl:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEDistantLightElement.cpp:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDistantLightElement.idl:
        * svg/SVGFEDropShadowElement.cpp:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEFloodElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFloodElement.idl:
        * svg/SVGFEFuncAElement.cpp:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncAElement.idl:
        * svg/SVGFEFuncBElement.cpp:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncBElement.idl:
        * svg/SVGFEFuncGElement.cpp:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncGElement.idl:
        * svg/SVGFEFuncRElement.cpp:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEFuncRElement.idl:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEImageElement.idl:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeElement.idl:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMergeNodeElement.idl:
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEOffsetElement.idl:
        * svg/SVGFEPointLightElement.cpp:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFEPointLightElement.idl:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpecularLightingElement.idl:
        * svg/SVGFESpotLightElement.cpp:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFESpotLightElement.idl:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETileElement.idl:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterElement.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFilterPrimitiveStandardAttributes.idl:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFitToViewBox.h:
        * svg/SVGFitToViewBox.idl:
        * svg/SVGFontElement.idl:
        * svg/SVGFontFaceElement.idl:
        * svg/SVGFontFaceFormatElement.idl:
        * svg/SVGFontFaceNameElement.cpp:
        * svg/SVGFontFaceNameElement.idl:
        * svg/SVGFontFaceSrcElement.idl:
        * svg/SVGFontFaceUriElement.idl:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGForeignObjectElement.idl:
        * svg/SVGGElement.cpp:
        * svg/SVGGElement.h:
        * svg/SVGGElement.idl:
        * svg/SVGGlyphElement.idl:
        * svg/SVGGlyphRefElement.cpp:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGlyphRefElement.idl:
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGGradientElement.idl:
        * svg/SVGGraphicsElement.cpp:
        * svg/SVGGraphicsElement.h:
        * svg/SVGGraphicsElement.idl:
        * svg/SVGHKernElement.idl:
        * svg/SVGImageElement.cpp:
        * svg/SVGImageElement.h:
        * svg/SVGImageElement.idl:
        * svg/SVGImageLoader.cpp:
        * svg/SVGImageLoader.h:
        * svg/SVGLangSpace.cpp:
        * svg/SVGLangSpace.h:
        * svg/SVGLength.cpp:
        * svg/SVGLength.h:
        * svg/SVGLength.idl:
        * svg/SVGLengthContext.cpp:
        * svg/SVGLengthContext.h:
        * svg/SVGLengthList.cpp:
        * svg/SVGLengthList.h:
        * svg/SVGLengthList.idl:
        * svg/SVGLineElement.cpp:
        * svg/SVGLineElement.h:
        * svg/SVGLineElement.idl:
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGLinearGradientElement.idl:
        * svg/SVGLocatable.cpp:
        * svg/SVGLocatable.h:
        * svg/SVGMPathElement.cpp:
        * svg/SVGMPathElement.h:
        * svg/SVGMPathElement.idl:
        * svg/SVGMarkerElement.cpp:
        * svg/SVGMarkerElement.h:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        * svg/SVGMaskElement.idl:
        * svg/SVGMatrix.h:
        * svg/SVGMatrix.idl:
        * svg/SVGMetadataElement.cpp:
        * svg/SVGMetadataElement.h:
        * svg/SVGMetadataElement.idl:
        * svg/SVGMissingGlyphElement.idl:
        * svg/SVGNumber.idl:
        * svg/SVGNumberList.cpp:
        * svg/SVGNumberList.h:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.cpp:
        * svg/SVGPaint.h:
        * svg/SVGPaint.idl:
        * svg/SVGParserUtilities.cpp:
        * svg/SVGParserUtilities.h:
        * svg/SVGParsingError.h:
        * svg/SVGPathBlender.cpp:
        * svg/SVGPathBlender.h:
        * svg/SVGPathBuilder.cpp:
        * svg/SVGPathBuilder.h:
        * svg/SVGPathByteStream.h:
        * svg/SVGPathByteStreamBuilder.cpp:
        * svg/SVGPathByteStreamBuilder.h:
        * svg/SVGPathByteStreamSource.cpp:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathConsumer.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:
        * svg/SVGPathElement.idl:
        * svg/SVGPathParser.cpp:
        * svg/SVGPathParser.h:
        * svg/SVGPathSeg.h:
        * svg/SVGPathSeg.idl:
        * svg/SVGPathSegArc.h:
        * svg/SVGPathSegArcAbs.h:
        * svg/SVGPathSegArcAbs.idl:
        * svg/SVGPathSegArcRel.h:
        * svg/SVGPathSegArcRel.idl:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegClosePath.idl:
        * svg/SVGPathSegCurvetoCubic.h:
        * svg/SVGPathSegCurvetoCubicAbs.h:
        * svg/SVGPathSegCurvetoCubicAbs.idl:
        * svg/SVGPathSegCurvetoCubicRel.h:
        * svg/SVGPathSegCurvetoCubicRel.idl:
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.h:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl:
        * svg/SVGPathSegCurvetoCubicSmoothRel.h:
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl:
        * svg/SVGPathSegCurvetoQuadratic.h:
        * svg/SVGPathSegCurvetoQuadraticAbs.h:
        * svg/SVGPathSegCurvetoQuadraticAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticRel.h:
        * svg/SVGPathSegCurvetoQuadraticRel.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl:
        * svg/SVGPathSegLinetoAbs.h:
        * svg/SVGPathSegLinetoAbs.idl:
        * svg/SVGPathSegLinetoHorizontal.h:
        * svg/SVGPathSegLinetoHorizontalAbs.h:
        * svg/SVGPathSegLinetoHorizontalAbs.idl:
        * svg/SVGPathSegLinetoHorizontalRel.h:
        * svg/SVGPathSegLinetoHorizontalRel.idl:
        * svg/SVGPathSegLinetoRel.h:
        * svg/SVGPathSegLinetoRel.idl:
        * svg/SVGPathSegLinetoVertical.h:
        * svg/SVGPathSegLinetoVerticalAbs.h:
        * svg/SVGPathSegLinetoVerticalAbs.idl:
        * svg/SVGPathSegLinetoVerticalRel.h:
        * svg/SVGPathSegLinetoVerticalRel.idl:
        * svg/SVGPathSegList.cpp:
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegList.idl:
        * svg/SVGPathSegListBuilder.cpp:
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathSegListSource.cpp:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathSegMovetoAbs.h:
        * svg/SVGPathSegMovetoAbs.idl:
        * svg/SVGPathSegMovetoRel.h:
        * svg/SVGPathSegMovetoRel.idl:
        * svg/SVGPathSegWithContext.h:
        * svg/SVGPathSource.h:
        * svg/SVGPathStringBuilder.cpp:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPathStringSource.cpp:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathTraversalStateBuilder.cpp:
        * svg/SVGPathTraversalStateBuilder.h:
        * svg/SVGPathUtilities.cpp:
        * svg/SVGPathUtilities.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        * svg/SVGPatternElement.idl:
        * svg/SVGPoint.h:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.cpp:
        * svg/SVGPointList.h:
        * svg/SVGPointList.idl:
        * svg/SVGPolyElement.cpp:
        * svg/SVGPolyElement.h:
        * svg/SVGPolygonElement.cpp:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolygonElement.idl:
        * svg/SVGPolylineElement.cpp:
        * svg/SVGPolylineElement.h:
        * svg/SVGPolylineElement.idl:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGPreserveAspectRatio.idl:
        * svg/SVGRadialGradientElement.cpp:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRadialGradientElement.idl:
        * svg/SVGRect.h:
        * svg/SVGRect.idl:
        * svg/SVGRectElement.cpp:
        * svg/SVGRectElement.h:
        * svg/SVGRectElement.idl:
        * svg/SVGRenderingIntent.h:
        * svg/SVGRenderingIntent.idl:
        * svg/SVGSVGElement.cpp:
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:
        * svg/SVGScriptElement.idl:
        * svg/SVGSetElement.cpp:
        * svg/SVGSetElement.h:
        * svg/SVGSetElement.idl:
        * svg/SVGStopElement.cpp:
        * svg/SVGStopElement.h:
        * svg/SVGStopElement.idl:
        * svg/SVGStringList.cpp:
        * svg/SVGStringList.h:
        * svg/SVGStringList.idl:
        * svg/SVGStyleElement.cpp:
        * svg/SVGStyleElement.h:
        * svg/SVGStyleElement.idl:
        * svg/SVGSwitchElement.cpp:
        * svg/SVGSwitchElement.h:
        * svg/SVGSwitchElement.idl:
        * svg/SVGSymbolElement.cpp:
        * svg/SVGSymbolElement.h:
        * svg/SVGSymbolElement.idl:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTRefElement.idl:
        * svg/SVGTSpanElement.cpp:
        * svg/SVGTSpanElement.h:
        * svg/SVGTSpanElement.idl:
        * svg/SVGTests.cpp:
        * svg/SVGTests.h:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextElement.h:
        * svg/SVGTextElement.idl:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPathElement.idl:
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTextPositioningElement.idl:
        * svg/SVGTitleElement.cpp:
        * svg/SVGTitleElement.h:
        * svg/SVGTitleElement.idl:
        * svg/SVGTransform.cpp:
        * svg/SVGTransform.h:
        * svg/SVGTransform.idl:
        * svg/SVGTransformDistance.cpp:
        * svg/SVGTransformDistance.h:
        * svg/SVGTransformList.cpp:
        * svg/SVGTransformList.h:
        * svg/SVGTransformList.idl:
        * svg/SVGTransformable.cpp:
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.cpp:
        * svg/SVGURIReference.h:
        * svg/SVGURIReference.idl:
        * svg/SVGUnitTypes.h:
        * svg/SVGUnitTypes.idl:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/SVGUseElement.idl:
        * svg/SVGVKernElement.idl:
        * svg/SVGViewElement.cpp:
        * svg/SVGViewElement.h:
        * svg/SVGViewElement.idl:
        * svg/SVGViewSpec.cpp:
        * svg/SVGViewSpec.h:
        * svg/SVGViewSpec.idl:
        * svg/SVGZoomAndPan.cpp:
        * svg/SVGZoomAndPan.h:
        * svg/SVGZoomAndPan.idl:
        * svg/SVGZoomEvent.cpp:
        * svg/SVGZoomEvent.h:
        * svg/SVGZoomEvent.idl:
        * svg/animation/SMILTime.cpp:
        (WebCore::operator*):
        * svg/animation/SMILTime.h:
        * svg/animation/SMILTimeContainer.cpp:
        * svg/animation/SMILTimeContainer.h:
        * svg/animation/SVGSMILElement.cpp:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.cpp:
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/SVGImageChromeClient.h:
        * svg/graphics/SVGImageForContainer.cpp:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.cpp:
        * svg/graphics/filters/SVGFilter.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        * svg/graphics/filters/SVGFilterBuilder.h:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGAnimatedProperty.cpp:
        * svg/properties/SVGAnimatedProperty.h:
        * svg/properties/SVGAnimatedPropertyDescription.h:
        * svg/properties/SVGAnimatedPropertyMacros.h:
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        * svg/properties/SVGAttributeToPropertyMap.h:
        * svg/properties/SVGListProperty.h:
        * svg/properties/SVGListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        * svg/properties/SVGProperty.h:
        * svg/properties/SVGPropertyInfo.cpp:
        * svg/properties/SVGPropertyInfo.h:
        * svg/properties/SVGPropertyTearOff.h:
        * svg/properties/SVGPropertyTraits.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        * svg/properties/SVGStaticPropertyTearOff.h:
        * svg/properties/SVGStaticPropertyWithParentTearOff.h:
        * svg/properties/SVGTransformListPropertyTearOff.h:
        * svg/svgattrs.in:
        * svg/svgtags.in:
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):
        * xml/parser/XMLDocumentParser.cpp:

2014-02-05  Zan Dobersek  <zdobersek@igalia.com>

        Manage CalcExpressionNode and derived classes through std::unique_ptr instead of OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=128118

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for CalcExpressionNode and derived classes with std::unique_ptr.

        * css/CSSCalculationValue.cpp:
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (WebCore::CSSCalcBinaryOperation::toCalcValue):
        * css/CSSCalculationValue.h:
        * platform/CalculationValue.cpp:
        (WebCore::CalculationValue::create):
        * platform/CalculationValue.h:
        (WebCore::CalculationValue::CalculationValue):
        (WebCore::CalcExpressionBinaryOperation::CalcExpressionBinaryOperation):
        * platform/Length.cpp:
        (WebCore::Length::blendMixedTypes):
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCenterCoordinate::updateComputedLength):

2014-02-05  Zan Dobersek  <zdobersek@igalia.com>

        Remove CLASS_IF_GCC workarounds
        https://bugs.webkit.org/show_bug.cgi?id=128207

        Reviewed by Anders Carlsson.

        Remove the CLASS_IF_GCC macro that was defined to 'class' when using the GCC compiler.
        The macro was then used in class friendship declarations for templated classes to avoid
        corner-case compiler failures on both GCC pre-4.7 and MSVC pre-2013. The problematic
        versions of both compilers are no longer supported, so this macro is good to go.

        * bindings/generic/RuntimeEnabledFeatures.h:

2014-02-05  Ryuan Choi  <ryuan.choi@samsung.com>

        MediaPlayerPrivateGStreamerBase should have virtual destructor
        https://bugs.webkit.org/show_bug.cgi?id=128238

        Reviewed by Carlos Garcia Campos.

        MediaPlayerPrivateGStreamer inherit MediaPlayerPrivateGStreamerBase.
        So MediaPlayerPrivateGStreamerBase should have virtual destructor.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h: Made destructor as virtual.

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

        Remove <iframe seamless> support.
        <https://webkit.org/b/128213>

        Seamless iframes were behind a runtime flag that we never enabled,
        and the only other engine that implemented them (Blink) recently
        removed them. Since the feature is very invasive, let's take it
        out for now.

        Rubber-stamped by Antti Koivisto.

        * Configurations/FeatureDefines.xcconfig:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::populatePseudoTypeByNameMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * css/html.css:
        (iframe):
        * dom/Document.cpp:
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::SecurityContext):
        * dom/SecurityContext.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLIFrameElement.cpp:
        (WebCore::HTMLIFrameElement::HTMLIFrameElement):
        (WebCore::HTMLIFrameElement::isPresentationAttribute):
        (WebCore::HTMLIFrameElement::parseAttribute):
        * html/HTMLIFrameElement.h:
        * html/HTMLIFrameElement.idl:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::findFrameForNavigation):
        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::isInChildFrameWithFrameFlattening):
        * page/Location.cpp:
        (WebCore::Location::setLocation):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewport):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::shouldComputeSizeAsReplaced):
        (WebCore::RenderIFrame::isInlineBlockOrInlineTable):
        (WebCore::RenderIFrame::flattenFrame):
        (WebCore::RenderIFrame::layout):
        * rendering/RenderIFrame.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::initializeLayoutState):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveTree):

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

        [iOS][wk2] Make development builds of WebKit work on device
        https://bugs.webkit.org/show_bug.cgi?id=128230

        Reviewed by Anders Carlsson.

        * platform/RuntimeApplicationChecksIOS.mm:
        (WebCore::applicationIsWebProcess):
        Add WebContent.Development as an additional name for the WebContent process.

2014-02-04  Brady Eidson  <beidson@apple.com>

        IDB: indexeddb/mozilla/add-twice-failure.html fails
        <rdar://problem/15982569> and https://bugs.webkit.org/show_bug.cgi?id=128208

        Reviewed by Tim Horton.

        Covered specifically by indexeddb/mozilla/add-twice-failure.html and a handful of others.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onError): Improve logging.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::abort): Improve logging.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform): Don’t abort the transaction when an error occurred.

        * WebCore.exp.in:

2014-02-04  Yoav Weiss  <yoav@yoav.ws>

        Use srcset's pixel density to determine intrinsic size
        https://bugs.webkit.org/show_bug.cgi?id=123832

        Reviewed by Dean Jackson.

        The patch is a port of a similar Blink patch: https://codereview.chromium.org/25105004
        According to the spec "When an img element has a current pixel density that is not 1.0,
        the element's image data must be treated as if its resolution, in device pixels per CSS pixels,
        was the current pixel density."

        I've added that support using the following changes:
        - bestFitSourceForImageAttributes now returns the image candidate to HTMLImageElement.
        - HTMLImageElement passes the devicePixelRatio data to RenderImage, which stores it.
        - Bitmap images are scaled using the devicePixelRatio at RenderImageResource's intrinsicSize() and imageSize().
        - SVG images are scaled using the devicePixelRatio at RenderReplaced::computeAspectRatioInformationForRenderBox.
        - Canvas support added at CanvasRenderingContext2D::size.

        Tests: fast/hidpi/image-srcset-intrinsic-size.html
               fast/hidpi/image-srcset-png-canvas.html
               fast/hidpi/image-srcset-png.html
               fast/hidpi/image-srcset-relative-svg-canvas-2x.html
               fast/hidpi/image-srcset-relative-svg.html
               fast/hidpi/image-srcset-space-left-nomodifier.html
               fast/hidpi/image-srcset-svg-canvas-2x.html
               fast/hidpi/image-srcset-svg-canvas.html
               fast/hidpi/image-srcset-svg.html
               fast/hidpi/image-srcset-svg2.html

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::parseAttribute):
        (WebCore::HTMLImageElement::createRenderer):
        * html/HTMLImageElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::size):
        (WebCore::CanvasRenderingContext2D::drawImage):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::compareByScaleFactor):
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        (WebCore::bestFitSourceForImageAttributes):
        * html/parser/HTMLParserIdioms.h:
        (WebCore::ImageWithScale::ImageWithScale):
        (WebCore::ImageWithScale::imageURL):
        (WebCore::ImageWithScale::scaleFactor):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::setImageDevicePixelRatio):
        (WebCore::RenderImage::imageDevicePixelRatio):
        * rendering/RenderImageResource.cpp:
        (WebCore::RenderImageResource::imageSize):
        (WebCore::RenderImageResource::intrinsicSize):
        (WebCore::RenderImageResource::getImageSize):
        * rendering/RenderImageResource.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeAspectRatioInformationForRenderBox):

2014-02-04  Geoffrey Garen  <ggaren@apple.com>

        Rolled out <http://trac.webkit.org/changeset/163280>:

            Push DOM attributes into the prototype chain
            ​https://bugs.webkit.org/show_bug.cgi?id=127969

        It caused performance regressions, and broken websites on iOS.

        Reviewed by Geoffrey Garen.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticValueSlotEntryWithoutCaching):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        (WebCore::JSStorage::deleteProperty):
        (WebCore::JSStorage::putDelegate):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateAttributesHashTable):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::JSTestEventConstructor::getOwnPropertySlot):
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::JSTestGenerateIsReachable::getOwnPropertySlot):
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListener::getOwnPropertySlot):
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::JSTestNamedConstructor::getOwnPropertySlot):
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::JSTestNode::getOwnPropertySlot):
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::JSTestOverloadedConstructors::getOwnPropertySlot):
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterface::getOwnPropertySlot):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::JSTestTypedefsPrototype::getOwnPropertySlot):
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::JSattribute::getOwnPropertySlot):
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::JSreadonly::getOwnPropertySlot):
        (WebCore::jsreadonlyConstructor):
        * bindings/scripts/test/JS/JSreadonly.h:

2014-02-04  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto HMAC verification uses a non-constant-time memcmp
        https://bugs.webkit.org/show_bug.cgi?id=128198
        <rdar://problem/15976961>

        Reviewed by Oliver Hunt.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::CryptoAlgorithmHMAC::platformVerify):
        Use a constant time memcmp.

2014-02-04  Simon Fraser  <simon.fraser@apple.com>

        Add WK2 event handling path for iOS, and make Mac and iOS code more similar
        https://bugs.webkit.org/show_bug.cgi?id=128199

        Reviewed by Sam Weinig.

        EventHandlerIOS need some changes for WebKit2, where we have no native
        widget. Merge those changes from EventHandlerMac.
        
        Make a few drive-by changes to match EventHandlerMac behavior.
        
        Clean up EventHandlerMac, removing trailing whitespace and fixing
        the odd comment.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::EventHandler::passSubframeEventToSubframe):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseDown):
        (WebCore::EventHandler::mouseMoved):
        (WebCore::frameHasPlatformWidget):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWidgetMouseDownEventToWidget):
        (WebCore::EventHandler::passMouseDownEventToWidget):
        (WebCore::findViewInSubviews):
        (WebCore::EventHandler::eventLoopHandleMouseUp):
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::EventHandler::mouseMoved):

2014-02-04  Benjamin Poulain  <bpoulain@apple.com>

        [OSX] Limit progress bar's dimensions to ushort
        https://bugs.webkit.org/show_bug.cgi?id=128019

        Wordaround a crash in Quartz until <rdar://problem/15855086> is fixed.

        Reviewed by Sam Weinig.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::progressBarRectForBounds):

2014-02-04  Anders Carlsson  <andersca@apple.com>

        Rename StringImpl::getCharacters to StringImpl::characters
        https://bugs.webkit.org/show_bug.cgi?id=128205

        Reviewed by Antti Koivisto.

        Update for WTF changes.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createTextRuns):

2014-02-04  Anders Carlsson  <andersca@apple.com>

        Rename equalNonNull to equal and make it take const StringImpl& instead
        https://bugs.webkit.org/show_bug.cgi?id=128206

        Reviewed by Andreas Kling.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::threadSafeEqual):
        (WebCore::threadSafeMatch):

2014-02-04  Anders Carlsson  <andersca@apple.com>

        Rename String::getCharacters to String::characters
        https://bugs.webkit.org/show_bug.cgi?id=128196

        Reviewed by Andreas Kling.

        Update for WTF::String changes.

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

2014-02-04  Eric Carlson  <eric.carlson@apple.com>

        Fix Release build after r163390.

        * platform/audio/MediaSession.cpp: Add "#if !LOG_DISABLED" around logging-only function.

2014-02-04  Eric Carlson  <eric.carlson@apple.com>

        Refine MediaSession interruptions
        https://bugs.webkit.org/show_bug.cgi?id=128125

        Reviewed by Jer Noble.

        Test: media/video-background-playback.html

        * WebCore.exp.in: Export applicationWillEnterForeground and applicationWillEnterBackground for
            Internals.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::play): Ask the media session if playback is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::pause): Ask the media session if pausing is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::mediaType): Return media type based on media characteristics once
            the information is available.
        (WebCore::HTMLMediaElement::resumePlayback): New.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): New, use for logging only.
        (WebCore::HTMLMediaSession::addBehaviorRestriction): Log  restriction changes.
        (WebCore::HTMLMediaSession::removeBehaviorRestriction): Ditto.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::stateName): New, used for logging.
        (WebCore::MediaSession::MediaSession): Don't cache client media type because it can change.
        (WebCore::MediaSession::setState): Log state changes.
        (WebCore::MediaSession::beginInterruption): Remember the current state in case we want to use it
            to restore state when the interruption ends.
        (WebCore::MediaSession::endInterruption): Resume playback if appropriate.
        (WebCore::MediaSession::clientWillBeginPlayback): Track the client's playback state.
        (WebCore::MediaSession::clientWillPausePlayback): Ditto.
        (WebCore::MediaSession::mediaType): Ask client for state.
        * platform/audio/MediaSession.h:

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): m_interruptions -> m_interrupted.
        (WebCore::MediaSessionManager::beginInterruption): Don't assume interruptions are always balanced.
        (WebCore::MediaSessionManager::endInterruption): Ditto.
        (WebCore::MediaSessionManager::addSession): 
        (WebCore::MediaSessionManager::applicationWillEnterBackground): Interrupt client if it is not
            allowed to play in the background.
        (WebCore::MediaSessionManager::applicationWillEnterForeground): End client interruption if it
            was stopped by an interruption.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS): Clear the helper callback.
        (WebCore::MediaSessionManageriOS::resetRestrictions): Mark video as not allowed to play
            while the application is in the background. Register for application suspend/resume
            notifications.
        (-[WebMediaSessionHelper clearCallback]): Set _callback to nil.
        (-[WebMediaSessionHelper applicationWillEnterForeground:]): New, notify client of application 
            state change.
        (-[WebMediaSessionHelper applicationWillResignActive:]): Ditto.

        * platform/audio/mac/AudioDestinationMac.h: Add resumePlayback.

        * testing/Internals.cpp:
        (WebCore::Internals::applicationWillEnterForeground): New, simulate application context switch.
        (WebCore::Internals::applicationWillEnterBackground): Ditto.
        (WebCore::Internals::setMediaSessionRestrictions): Add "BackgroundPlaybackNotPermitted" restriction.
        * testing/Internals.h:
        * testing/Internals.idl:

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

        Remove CPP bindings generator.
        <https://webkit.org/b/128189>

        Scrub out some leftover Blackberry gunk.

        Reviewed by Anders Carlsson.

        * Modules/webdatabase/SQLResultSet.idl:
        * bindings/cpp/WebDOMCString.cpp: Removed.
        * bindings/cpp/WebDOMCString.h: Removed.
        * bindings/cpp/WebDOMDOMWindowCustom.cpp: Removed.
        * bindings/cpp/WebDOMEventListenerCustom.cpp: Removed.
        * bindings/cpp/WebDOMEventTarget.cpp: Removed.
        * bindings/cpp/WebDOMEventTarget.h: Removed.
        * bindings/cpp/WebDOMHTMLCollectionCustom.cpp: Removed.
        * bindings/cpp/WebDOMHTMLDocumentCustom.cpp: Removed.
        * bindings/cpp/WebDOMHTMLOptionsCollectionCustom.cpp: Removed.
        * bindings/cpp/WebDOMNodeCustom.cpp: Removed.
        * bindings/cpp/WebDOMNodeFilterCustom.cpp: Removed.
        * bindings/cpp/WebDOMObject.h: Removed.
        * bindings/cpp/WebDOMString.cpp: Removed.
        * bindings/cpp/WebDOMString.h: Removed.
        * bindings/cpp/WebExceptionHandler.cpp: Removed.
        * bindings/cpp/WebExceptionHandler.h: Removed.
        * bindings/cpp/WebNativeEventListener.cpp: Removed.
        * bindings/cpp/WebNativeEventListener.h: Removed.
        * bindings/cpp/WebNativeNodeFilterCondition.cpp: Removed.
        * bindings/cpp/WebNativeNodeFilterCondition.h: Removed.
        * bindings/scripts/CodeGeneratorCPP.pm: Removed.
        * bindings/scripts/test/CPP/CPPTestSupplemental.cpp: Removed.
        * bindings/scripts/test/CPP/CPPTestSupplemental.h: Removed.
        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMFloat64Array.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCallback.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestException.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestException.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestImplements.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestImplements.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNode.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestNode.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSupplemental.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestSupplemental.h: Removed.
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.h: Removed.
        * bindings/scripts/test/CPP/WebDOMattribute.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMattribute.h: Removed.
        * bindings/scripts/test/CPP/WebDOMreadonly.cpp: Removed.
        * bindings/scripts/test/CPP/WebDOMreadonly.h: Removed.
        * css/StyleSheet.idl:
        * dom/CustomEvent.idl:
        * dom/Document.idl:
        * dom/Event.idl:
        * dom/Node.idl:
        * dom/PopStateEvent.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLInputElement.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * page/DOMWindow.idl:
        * page/Location.idl:
        * workers/DedicatedWorkerGlobalScope.idl:

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

        iOS build fix.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-03  Zan Dobersek  <zdobersek@igalia.com>

        Manage MediaQuery and MediaQueryExp classes through std::unique_ptr instead of OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=128117

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for the MediaQuery and MediaQueryExp classes with std::unique_ptr.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseMediaQuery):
        * css/CSSParser.h:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::parse):
        (WebCore::MediaQuerySet::add):
        (WebCore::MediaQuerySet::remove):
        (WebCore::MediaQuerySet::addMediaQuery):
        (WebCore::MediaList::item):
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaList.h:
        (WebCore::MediaQuerySet::queryVector):
        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::MediaQuery):
        * css/MediaQuery.h:
        (WebCore::MediaQuery::expressions):
        (WebCore::MediaQuery::copy):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::MediaQueryExp):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::copy):

2014-02-04  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove SVG_DOM_OBJC_BINDINGS after r161638.
        https://bugs.webkit.org/show_bug.cgi?id=128182

        Reviewed by Andreas Kling.

        Removed ENABLE(SVG_DOM_OBJC_BINDINGS).

        No tests required.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode boundingBoxes]):
        (-[DOMNode absoluteQuads]):

2014-02-04  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r159609): Images are corrupted when hovering over buttons @ github.com
        https://bugs.webkit.org/show_bug.cgi?id=127729

        Reviewed by Antti Koivisto.

        When clipping a rect, the RenderLayer would not properly save the context when
        the clipping rect is the same as the paint rect and the clipping rect
        has radius.

        Test: fast/regions/repaint/hover-border-radius.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clipToRect):
        (WebCore::RenderLayer::restoreClip):

2014-02-04  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Remove workaround for GCC 4.6
        https://bugs.webkit.org/show_bug.cgi?id=128176

        Reviewed by Csaba Osztrogonác.

        Since r162126, WebKit requires at least 4.7.

        * CMakeLists.txt:

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

        Manage RuleSet and RuleData classes through std::unique_ptr instead of OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=128116

        Reviewed by Darin Adler.

        Replace uses of OwnPtr for the RuleSet and RuleData classes with std::unique_ptr.

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::loadFullDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::loadSimpleDefaultStyle):
        (WebCore::CSSDefaultStyleSheets::viewSourceStyle):
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::initUserStyle):
        (WebCore::makeRuleSet):
        (WebCore::DocumentRuleSets::resetAuthorStyle):
        * css/DocumentRuleSets.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRegionRule):
        * css/RuleSet.h:
        (WebCore::RuleSet::RuleSetSelectorPair::RuleSetSelectorPair):

2014-02-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r163376.
        http://trac.webkit.org/changeset/163376
        https://bugs.webkit.org/show_bug.cgi?id=128184

        Unexpected test failures. (Requested by eric_carlson on
        #webkit).

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::addBehaviorRestriction):
        (WebCore::HTMLMediaSession::removeBehaviorRestriction):
        (WebCore::HTMLMediaSession::clientWillBeginPlayback):
        * html/HTMLMediaSession.h:
        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::beginInterruption):
        (WebCore::MediaSession::endInterruption):
        * platform/audio/MediaSession.h:
        (WebCore::MediaSession::mediaType):
        (WebCore::MediaSession::setState):
        (WebCore::MediaSessionClient::beginInterruption):
        (WebCore::MediaSessionClient::endInterruption):
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::beginInterruption):
        (WebCore::MediaSessionManager::endInterruption):
        (WebCore::MediaSessionManager::addSession):
        * platform/audio/MediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.h:
        (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS):
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        (-[WebMediaSessionHelper initWithCallback:]):
        * platform/audio/mac/AudioDestinationMac.h:
        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-02-04  Eric Carlson  <eric.carlson@apple.com>

        Refine MediaSession interruptions
        https://bugs.webkit.org/show_bug.cgi?id=128125

        Reviewed by Jer Noble.

        Test: media/video-background-playback.html

        * WebCore.exp.in: Export applicationWillEnterForeground and applicationWillEnterBackground for
            Internals.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::play): Ask the media session if playback is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::pause): Ask the media session if pausing is allowed instead of check
            to see if it is interrupted directly.
        (WebCore::HTMLMediaElement::mediaType): Return media type based on media characteristics once
            the information is available.
        (WebCore::HTMLMediaElement::resumePlayback): New.
        * html/HTMLMediaElement.h:

        * html/HTMLMediaSession.cpp:
        (WebCore::restrictionName): New, use for logging only.
        (WebCore::HTMLMediaSession::addBehaviorRestriction): Log  restriction changes.
        (WebCore::HTMLMediaSession::removeBehaviorRestriction): Ditto.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.cpp:
        (WebCore::stateName): New, used for logging.
        (WebCore::MediaSession::MediaSession): Don't cache client media type because it can change.
        (WebCore::MediaSession::setState): Log state changes.
        (WebCore::MediaSession::beginInterruption): Remember the current state in case we want to use it
            to restore state when the interruption ends.
        (WebCore::MediaSession::endInterruption): Resume playback if appropriate.
        (WebCore::MediaSession::clientWillBeginPlayback): Track the client's playback state.
        (WebCore::MediaSession::clientWillPausePlayback): Ditto.
        (WebCore::MediaSession::mediaType): Ask client for state.
        * platform/audio/MediaSession.h:

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): m_interruptions -> m_interrupted.
        (WebCore::MediaSessionManager::beginInterruption): Don't assume interruptions are always balanced.
        (WebCore::MediaSessionManager::endInterruption): Ditto.
        (WebCore::MediaSessionManager::addSession): 
        (WebCore::MediaSessionManager::applicationWillEnterBackground): Interrupt client if it is not
            allowed to play in the background.
        (WebCore::MediaSessionManager::applicationWillEnterForeground): End client interruption if it
            was stopped by an interruption.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::~MediaSessionManageriOS): Clear the helper callback.
        (WebCore::MediaSessionManageriOS::resetRestrictions): Mark video as not allowed to play
            while the application is in the background. Register for application suspend/resume
            notifications.
        (-[WebMediaSessionHelper clearCallback]): Set _callback to nil.
        (-[WebMediaSessionHelper applicationWillEnterForeground:]): New, notify client of application 
            state change.
        (-[WebMediaSessionHelper applicationWillResignActive:]): Ditto.

        * platform/audio/mac/AudioDestinationMac.h: Add resumePlayback.

        * testing/Internals.cpp:
        (WebCore::Internals::applicationWillEnterForeground): New, simulate application context switch.
        (WebCore::Internals::applicationWillEnterBackground): Ditto.
        (WebCore::Internals::setMediaSessionRestrictions): Add "BackgroundPlaybackNotPermitted" restriction.
        * testing/Internals.h:
        * testing/Internals.idl:

2014-02-04  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix Assert SHOULD NEVER BE REACHED in RenderLayer::enclosingElement()
        https://bugs.webkit.org/show_bug.cgi?id=123329

        Reviewed by Mihnea Ovidenie.

        The flowthread doesn't have an enclosing element, so when hitting the layer of the
        flowthread (e.g. the descent area of the RootInlineBox for the image flowed alone
        inside the flow thread) we're letting the hit testing continue so it will hit the region.

        Tests: fast/regions/assert-hit-test-image.html
               fast/regions/auto-size/region-same-height-as-div-with-inline-child.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestContents):

2014-02-04  Mihnea Ovidenie  <mihnea@adobe.com>

        ASSERTION FAILED: !object || (object->isRenderBlock())
        https://bugs.webkit.org/show_bug.cgi?id=127687

        Reviewed by Ryosuke Niwa.

        Currently, when computing the visible position for a point inside a region,
        we transform the point into flow thread coordinates and delegate the processing
        to the first child of the flow thread which we incorrectly assume is a block.
        However, we can specify flow-into also on inline elements which leads to the
        assertion.

        Instead of delegating the processing to the first child when the flow thread
        has children, delegate the computation of the visible position to the
        flow thread and avoid any assumption about the nature of the flow thread
        first child. If the flow thread does not have any children that should be
        rendered by the region, let the region behave like an ordinary element
        with no children.

        Tests: fast/regions/selection/position-for-point-inline-content-node.html
               fast/regions/selection/selection-ended-in-empty-region.html

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::positionForPoint):

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

        Remove stray vestige from ::-webkit-distributed selector.
        <https://webkit.org/b/128154>

        Reviewed by Anders Carlsson.

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

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

        Remove the CSS @host rule.
        <https://webkit.org/b/128146>

        The @host rule is no longer part of the spec, and besides this code
        was behind ENABLE(SHADOW_DOM) so nobody was building it.

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSAllInOne.cpp:
        * css/CSSGrammar.y.in:
        * css/CSSHostRule.cpp: Removed.
        * css/CSSHostRule.h: Removed.
        * css/CSSHostRule.idl: Removed.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::detectDashToken):
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collect):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * inspector/InspectorStyleSheet.cpp:
        (flattenSourceData):
        (WebCore::asCSSRuleList):

2014-02-03  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Do not query the scaling factor when the graphics context is invalid.
        https://bugs.webkit.org/show_bug.cgi?id=128131

        Reviewed by Simon Fraser.

        No existing context to test it.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-03  Hunseop Jeong  <hs85.jeong@samsung.com>

        [Cairo] GraphicsContext::m_pixelSnappingFactor is uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=128102

        Reviewed by Csaba Osztrogonác.

        Initalize m_pixelSnappingFactor to 1

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::GraphicsContext): Initialized pixelSnappingFactor to 1 and 
        fixed the coding style violation.

2014-02-03  Brian Burg  <bburg@apple.com>

        Web Replay: upstream base input classes and the input cursor interface
        https://bugs.webkit.org/show_bug.cgi?id=128110

        Reviewed by Joseph Pecoraro.

        Add EventLoopInput, a base class for replay inputs that are handled
        as if they begin a new run loop. For example, navigations, user input,
        network callbacks, and asynchronous timers are modeled by inputs which
        derive from this base class.

        Add the ability to set an InputCursor instance on a Document. This
        is the means for connecting a replay recording to a document context.

        Add forwarding headers for some fundamental replay classes.

        No new tests; no new functionality is exposed.

        * ForwardingHeaders/replay/EmptyInputCursor.h: Added.
        * ForwardingHeaders/replay/InputCursor.h: Added.
        * ForwardingHeaders/replay/NondeterministicInput.h: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::inputCursor):
        (WebCore::Document::setInputCursor):
        * replay/EventLoopInput.h: Added.
        (WebCore::ReplayPosition::ReplayPosition):
        (WebCore::ReplayPosition::index):
        (WebCore::ReplayPosition::time):
        (WebCore::EventLoopInputBase::EventLoopInputBase):
        (WebCore::EventLoopInputBase::~EventLoopInputBase):
        (WebCore::EventLoopInputBase::setPosition):
        (WebCore::EventLoopInputBase::position):

2014-02-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove unused code in CSSParser.cpp
        https://bugs.webkit.org/show_bug.cgi?id=128135

        Reviewed by Darin Adler.

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

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

        [Mac] WK1 Clients Only Latch on Momentum Scroll
        https://bugs.webkit.org/show_bug.cgi?id=128133

        Reviewed by Simon Fraser.

        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::useLatchedEventElement): Update
        predicate to recognize the start and change phases of the wheel
        event as latchable (not just momentum start/change).

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

        Feature flag for shape-inside
        https://bugs.webkit.org/show_bug.cgi?id=128001

        Reviewed by Simon Fraser.

        Add CSS_SHAPE_INSIDE flag.

        I wrapped everything that is specific to shape-inside in
        this flag. It is now possible to build with CSS Shapes enabled
        but shape-inside disabled. CSS_SHAPE_INSIDE is dependent on
        CSS_SHAPES, so disabling the latter should also disable the former.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseShapeProperty):
        * css/CSSPropertyNames.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingImages):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::updateShapesBeforeBlockLayout):
        (WebCore::RenderBlock::updateShapesAfterBlockLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement):
        (WebCore::RenderElement::initializeStyle):
        (WebCore::RenderElement::setStyle):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        * rendering/RenderView.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::LineWidth::fitBelowFloats):
        * rendering/line/LineWidth.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-02-03  Radu Stavila  <stavila@adobe.com>

        REGRESSION (r163018): Can’t scroll in <select> lists
        https://bugs.webkit.org/show_bug.cgi?id=128090

        The regression was caused by the fact that a new method scrollWithWheelEventLocation() was added
        to RenderBox to replace the generic scroll() method for the particular case of scrolling using 
        the mouse wheel. This turned out to be a mistake because in the case of some elements, like select lists, 
        the scroll method was overriden and now the incorrect method was being called.
        The solution was to remove the new method and just add two default parameters to the generic
        scroll method.

        Reviewed by Simon Fraser.

        Test: fast/scrolling/scroll-select-list.html

        * page/EventHandler.cpp:
        (WebCore::scrollNode):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scroll):
        * rendering/RenderBox.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::scroll):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::scroll):
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scroll):
        * rendering/RenderTextControlSingleLine.h:

2014-02-03  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit should support @headers/@id for complex accessible web tables
        https://bugs.webkit.org/show_bug.cgi?id=128114

        Reviewed by Darin Adler.

        Expose the headers attribute for table cells to accessibility.

        Test: platform/mac/accessibility/table-headers-attribute.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::columnHeaders):

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

        CTTE: RenderSVGGradientStop always has a SVGStopElement.
        <https://webkit.org/b/128107>

        RenderSVGGradientStop is never anonymous and always has a
        corresponding SVGStopElement. Codify this by adding an element()
        overload that returns an SVGStopElement&.

        Also added missing overrides and made most functions private.

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        (WebCore::RenderSVGGradientStop::gradientElement):
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGGradientStop):

2014-02-03  David Kilzer  <ddkilzer@apple.com>

        Remove CachedImageManual class
        <http://webkit.org/b/128043>

        Reviewed by Darin Adler.

        Get rid of the CachedImageManual class by inlining its
        functionality into CachedImage.  This makes it possible to
        de-virtual-ize isManual() (renamed to isManuallyCached()) and to
        make CachedImage final.  The size of CachedImage does not
        increase because we turn an existing bool into a bitfield to add
        an m_isManuallyCached bit, and create a static CachedImageClient
        in MemoryCache.cpp as the "fake" client to keep the manually
        cached image alive in the cache.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): Set m_isManuallyCached
        bitfield.  For one overloaded constructor, move the
        CachedImageManual code into the CachedImage constructor.
        (WebCore::CachedImageManual::CachedImageManual): Remove.
        (WebCore::CachedImage::mustRevalidateDueToCacheHeaders): Move
        method from CachedImageManual to CachedImage, and put
        ManuallyCached behavior behind a check.
        * loader/cache/CachedImage.h: Update includes.  Make CachedImage
        final.  Add CachedImage::CacheBehaviorType enum when manually
        cached images are created.  Move CachedImageManual methods into
        CachedImage, remove addFakeClient() and removeFakeClient()
        methods (MemoryCache methods use addClient() and removeClient()
        with a static CachedImageClient), and remove the
        CachedImageManual class definition.  Change
        m_shouldPaintBrokenImage to a bitfield and add
        m_isManuallyCached bitfield.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache): Use std::unique_ptr and
        remove useless NULL check after calling CachedImage constructor.
        (WebCore::MemoryCache::removeImageFromCache):
        - Update to use CachedImage class instead of CachedImageManual.

2014-02-03  Zan Dobersek  <zdobersek@igalia.com>

        Move the webdatabase module source code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127278

        Reviewed by Antti Koivisto.

        Replace the majority of OwnPtr uses in the webdatabase module with std::unique_ptr.
        The only remaining uses are due to ScriptExecutionContext::Task subclasses.

        * Modules/webdatabase/AbstractSQLTransactionBackend.h:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/OriginLock.cpp:
        * Modules/webdatabase/SQLStatement.cpp:
        * Modules/webdatabase/SQLStatement.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        (WebCore::SQLStatementBackend::create):
        (WebCore::SQLStatementBackend::SQLStatementBackend):
        * Modules/webdatabase/SQLStatementBackend.h:
        * Modules/webdatabase/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::doCleanup):
        (WebCore::SQLTransactionBackend::computeNextStateAndCleanupIfNeeded):
        (WebCore::SQLTransactionBackend::executeSQL):
        (WebCore::SQLTransactionBackend::openTransactionAndPreflight):
        (WebCore::SQLTransactionBackend::cleanupAfterTransactionErrorCallback):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionBackendSync.cpp:
        (WebCore::SQLTransactionBackendSync::SQLTransactionBackendSync):
        (WebCore::SQLTransactionBackendSync::begin):
        (WebCore::SQLTransactionBackendSync::commit):
        (WebCore::SQLTransactionBackendSync::rollback):
        * Modules/webdatabase/SQLTransactionBackendSync.h:

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

        CTTE: Grab bag of SVGRenderTreeAsText cleanups.
        <https://webkit.org/b/128099>

        Made some of the DRT SVG functions take more specific types than
        RenderObject. Removed some redundant casts.

        Reviewed by Anders Carlsson.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/svg/SVGRenderTreeAsText.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        (WebCore::writeSVGContainer):

            Make writeSVGResourceContainer() and writeSVGContainer() take the
            final type instead of RenderObject.

        (WebCore::writeStyle):
        (WebCore::writePositionAndStyle):

            Make these take RenderElement instead of RenderObject.

        (WebCore::writeChildren):

            Use child renderer iterator.

        (WebCore::writeResources):

            Remove unnecessary cast.

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

        Stop using Unicode.h
        https://bugs.webkit.org/show_bug.cgi?id=127633

        Reviewed by Anders Carlsson.

        * Modules/indexeddb/IDBKeyPath.cpp:
        * css/CSSFontFace.h:
        * css/CSSOMUtils.h:
        * css/CSSSegmentedFontFace.h:
        * css/CSSUnicodeRangeValue.h:
        * editing/Editor.cpp:
        * editing/SmartReplace.h:
        * html/parser/HTMLTokenizer.cpp:
        * loader/DocumentLoader.cpp:
        * page/ContextMenuController.cpp:
        * page/Settings.h:
        * platform/DateComponents.h:
        * platform/SharedBuffer.cpp:
        * platform/graphics/Color.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontData.h:
        * platform/graphics/FontDescription.h:
        * platform/graphics/FontFastPath.cpp:
        * platform/graphics/FontGenericFamilies.h:
        * platform/graphics/FontGlyphs.cpp:
        * platform/graphics/GlyphMetricsMap.h:
        * platform/graphics/GlyphPage.h:
        * platform/graphics/GlyphPageTreeNode.cpp:
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/SVGGlyph.cpp:
        * platform/graphics/WidthIterator.h:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/win/QTMovie.h:
        * platform/graphics/wince/FontWinCE.cpp:
        * platform/text/BidiContext.h:
        * platform/text/Hyphenation.h:
        * platform/text/LocaleToScriptMapping.h:
        * platform/text/TextBoundaries.cpp:
        * platform/text/TextBoundaries.h:
        * platform/text/TextBreakIterator.h:
        * platform/text/TextCodec.h:
        * platform/text/TextEncoding.h:
        * platform/text/TextEncodingRegistry.h:
        * platform/text/TextStream.h:
        * platform/text/icu/UTextProvider.h:
        * platform/text/icu/UTextProviderLatin1.h:
        * platform/text/icu/UTextProviderUTF16.h:
        * platform/text/wchar/TextBreakIteratorWchar.cpp:
        * platform/win/WebCoreTextRenderer.cpp:
        * rendering/RootInlineBox.cpp:
        * rendering/SimpleLineLayout.cpp:
        * rendering/SimpleLineLayoutFunctions.cpp:
        * rendering/break_lines.h:
        * svg/SVGFontData.cpp:
        Removed includes of <wtf/unicode/Unicode.h>, adding includes of
        ICU headers and <wtf/text/LChar.h> as needed to replace it.

2014-02-03  Jessie Berlin  <jberlin@apple.com>

        Revert r163299 since it broke the ML 32-bit Release build

        * html/HTMLAnchorElement.cpp:
        (WebCore::parsePortFromStringPosition):
        (WebCore::HTMLAnchorElement::hash):
        (WebCore::HTMLAnchorElement::setHash):
        (WebCore::HTMLAnchorElement::host):
        (WebCore::HTMLAnchorElement::setHost):
        (WebCore::HTMLAnchorElement::hostname):
        (WebCore::HTMLAnchorElement::setHostname):
        (WebCore::HTMLAnchorElement::pathname):
        (WebCore::HTMLAnchorElement::setPathname):
        (WebCore::HTMLAnchorElement::port):
        (WebCore::HTMLAnchorElement::setPort):
        (WebCore::HTMLAnchorElement::protocol):
        (WebCore::HTMLAnchorElement::setProtocol):
        (WebCore::HTMLAnchorElement::search):
        (WebCore::HTMLAnchorElement::origin):
        (WebCore::HTMLAnchorElement::setSearch):
        (WebCore::HTMLAnchorElement::toString):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/URLUtils.idl:

2014-02-03  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix selection and hover effect of content in region with overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=127101

        Reviewed by Mihnea Ovidenie.

        RenderNamedFlowFragments are not hit candidates. The hit test algorithm will pick the
        parent layer, the one of the region.

        Test: fast/regions/hover-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::isHitCandidate):

2014-02-02  Maciej Stachowiak  <mjs@apple.com>

        Adopt URLUtils interface and template in HTMLAnchorElement and HTMLAreaElement
        https://bugs.webkit.org/show_bug.cgi?id=128067

        Reviewed by Antti Koivisto.

        Tests: fast/dom/HTMLAnchorElement/anchor-password.html
               fast/dom/HTMLAnchorElement/anchor-username.html
               fast/dom/HTMLAreaElement/area-password.html
               fast/dom/HTMLAreaElement/area-username.html

        * html/HTMLAnchorElement.cpp:
        * html/HTMLAnchorElement.h:
        (WebCore::HTMLAnchorElement::setHref): Add version that takes
        (and ignores) ExceptionCode. This is needed because the URLUtil
        base interface is used for URL, which can throw an exception,
        and HTMLAnchorElement, which cannot.
        * html/HTMLAnchorElement.idl: implement URLUtils
        * html/HTMLAreaElement.idl: implement URLUtils
        * html/URLUtils.idl: Treat null as empty string for href

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

        [ATK] Expose aria-controls through ATK_RELATION_CONTROLLER_FOR
        https://bugs.webkit.org/show_bug.cgi?id=127908

        Reviewed by Chris Fleizach.

        Based on w3c, aria-controls could be exposed through ATK_RELATION_CONTROLLER_FOR.

        Test: accessibility/aria-controls.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::supportsARIAControls):
        (WebCore::AccessibilityObject::ariaControlsElements):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::supportsARIAFlowTo):
        (WebCore::AccessibilityRenderObject::supportsARIAControls):
        (WebCore::AccessibilityRenderObject::ariaControlsElements):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

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

        RenderSVGResource::removeClientFromCache() should take RenderElement&.
        <https://webkit.org/b/128097>

        Text renderers never have resources associated with them.
        This is yet another step towards enforcing that at compile-time
        by making all the resource cache interfaces deal in RenderElement.

        Also marked the RenderSVGResourceSolidColor class final.

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::removeClientFromCache):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::removeClientFromCache):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::removeClientFromCache):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::removeClientFromCache):
        * rendering/svg/SVGResources.h:

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

        More iOS build fixing.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper arrayOfTextForTextMarkers:attributed:]):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::interpretationsForCurrentRoot):

2014-02-03  Darin Adler  <darin@apple.com>

        Try to fix iOS build.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::parseToDateComponents):
        Use deprecatedCharacters.

2014-02-02  Darin Adler  <darin@apple.com>

        Obey "delete this" comments, including deleting String::characters and friends
        https://bugs.webkit.org/show_bug.cgi?id=126865

        Reviewed by Andreas Kling.

        * CMakeLists.txt: Deleted HTMLParserErrorCodes.cpp.
        * GNUmakefile.list.am: Deleted HTMLParserErrorCodes.cpp/h, and HTMLParserQuirks.h.
        * WebCore.vcxproj/WebCore.vcxproj: Deleted HTMLParserErrorCodes.cpp/h.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * html/HTMLParserErrorCodes.cpp: Removed.
        * html/HTMLParserErrorCodes.h: Removed.
        * html/HTMLParserQuirks.h: Removed.

        * rendering/RenderText.h: Deleted the characters function, leaving behind the
        deprecatedCharacters function.

2014-02-02  Brady Eidson  <beidson@apple.com>

        IDB: Cannot open new databases with the default version
        https://bugs.webkit.org/show_bug.cgi?id=128096

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::openConnectionInternal): Update logic to handle the
          current version being NoIntVersion.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform): Update ASSERT.

2014-02-02  Darin Adler  <darin@apple.com>

        Fix context save/restore mistake spotted in SVGInlineTextBox::paintTextWithShadows
        https://bugs.webkit.org/show_bug.cgi?id=128095

        Reviewed by Andreas Kling.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows): Move calls to GraphicsContext::restore
        and GraphicsContext::clearShadow before restoreGraphicsContextAfterTextPainting, since that
        function can swap contexts.

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

        Modernize RenderSVGText::locateRenderSVGTextAncestor().
        <https://webkit.org/b/128093>

        Make locateRenderSVGTextAncestor() take a reference, and simplify it
        internally with lineageOfType.

        Switched callers to use 'auto' for the return type so we get some
        devirtualization freebies.

        Reviewed by Anders Carlsson.

        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::objectBoundingBox):
        (WebCore::RenderSVGInline::strokeBoundingBox):
        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGInline::absoluteQuads):
        (WebCore::RenderSVGInline::addChild):
        (WebCore::RenderSVGInline::removeChild):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::setTextInternal):
        (WebCore::RenderSVGInlineText::styleDidChange):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::locateRenderSVGTextAncestor):
        * rendering/svg/RenderSVGText.h:
        (WebCore::RenderSVGText>):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::measureTextRenderer):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):

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

        Modernize the toRenderSVGResourceContainer() helper.
        <https://webkit.org/b/128091>

        Make toRenderSVGResourceContainer() a free function like all the
        other casting helpers. Use references instead of pointers where
        applicable.

        Reviewed by Anders Carlsson.

        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::updateReferenceFilterClients):
        (WebCore::RenderLayer::FilterInfo::removeReferenceFilterClients):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/svg/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resolveCycles):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::svgAttributeChanged):

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

        Minor SVGRootInlineBox cleanup.
        <https://webkit.org/b/128094>

        Remove two virtual functions and sprinkle some missing overrides.

        Reviewed by Anders Carlsson.

        * rendering/svg/SVGRootInlineBox.h:

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

        Push DOM attributes into the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=127969

        Reviewed by Mark Lam.

        This patch does the actual work of moving dom attributes up the
        prototype chain. There are still a few class and edge cases
        where we can't do this without impacting existing behaviour,
        but they can be fixed separately in later patches.

        * bindings/js/JSDOMBinding.h:
        (WebCore::getStaticPropertySlotEntryWithoutCaching):
        (WebCore::getStaticPropertySlotEntryWithoutCaching<JSDOMWrapper>):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateGetOwnPropertySlotBody):
        (HasComplexGetOwnProperty):
        (ConstructorShouldBeOnInstance):
        (AttributeShouldBeOnInstance):
        (InstanceAttributeCount):
        (PrototypeAttributeCount):
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateAttributesHashTable):
        (GenerateImplementation):

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

        RenderSVGResourceContainer clients are always RenderElement.
        <https://webkit.org/b/128088>

        All clients of RenderSVGResourceContainer are going to be RenderElement,
        so make the interface take RenderElement& instead of RenderObject*.

        Also modernized the code a bit with C++11 range for loops.

        Reviewed by Sam Weinig.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::addClient):
        (WebCore::RenderSVGResourceContainer::removeClient):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::addResourcesFromRenderer):
        (WebCore::SVGResourcesCache::removeResourcesFromRenderer):

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Use floorf/roundf/fabs in device snapping helpers.
        https://bugs.webkit.org/show_bug.cgi?id=128075

        Reviewed by Darin Adler.

        No change in functionality.

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel):
        (WebCore::floorToDevicePixel):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

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

        SVGDocumentExtensions::resourcesCache() should return a reference.
        <https://webkit.org/b/128087>

        The SVGResourcesCache is always present when the Document is using
        SVG extensions, so make this return a reference and propagate that
        knowledge to the call site.

        This gets rid of an assertion and some rickety looking ->'s.
        Also converted a loop to use C++11 range for syntax.

        Reviewed by Sam Weinig.

        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::resourcesCacheFromRenderer):
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject):
        (WebCore::SVGResourcesCache::clientStyleChanged):
        (WebCore::SVGResourcesCache::clientWasAddedToTree):
        (WebCore::SVGResourcesCache::clientWillBeRemovedFromTree):
        (WebCore::SVGResourcesCache::clientDestroyed):
        (WebCore::SVGResourcesCache::resourceDestroyed):
        * svg/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::resourcesCache):

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

        RenderSVGInlineText::computeNewScaledFontForStyle() should take references.
        <https://webkit.org/b/128086>

        Make computeNewScaledFontForStyle() take renderer and style by reference
        instead of taking a pointer and asserting that it's non-null.

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::updateScaledFont):
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::shouldTransformOnTextPainting):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::calculateScreenFontSizeScalingFactor):
        (WebCore::SVGRenderingContext::calculateTransformationToOutermostCoordinateSystem):
        * rendering/svg/SVGRenderingContext.h:

2014-02-02  Darin Adler  <darin@apple.com>

        Still more characters -> deprecatedCharacters (EWS keeps finding more)
        https://bugs.webkit.org/show_bug.cgi?id=128076

        Reviewed by Andreas Kling.

        * platform/graphics/harfbuzz/HarfBuzzShaper.cpp:
        (WebCore::HarfBuzzShaper::setFontFeatures):
        (WebCore::HarfBuzzShaper::shapeHarfBuzzRuns):
        Use deprecatedCharacters.

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Enable subpixel positioning/sizing/hairline border painting.
        https://bugs.webkit.org/show_bug.cgi?id=128009

        Reviewed by Simon Fraser.

        Snap and clip to device pixels when painting boxes. Enable hairline painting
        for solid border.

        No existing context to test this functionality yet.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getRoundedBorderFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):

2014-02-02  Sam Weinig  <sam@webkit.org>

        Add some missing override keywords
        https://bugs.webkit.org/show_bug.cgi?id=128082

        Reviewed by Antti Koivisto.

        * loader/DocumentThreadableLoader.h:
        * loader/LinkLoader.h:
        * loader/TextTrackLoader.h:
        * xml/parser/XMLDocumentParser.h:

2014-02-02  Brady Eidson  <beidson@apple.com>

        IDB: Support IDBFactory.deleteDatabase()
        https://bugs.webkit.org/show_bug.cgi?id=128060

        Reviewed by Filip Pizlo and Maciej Stachowiak (filesystem parts also Tim Hatcher and Simon Fraser)

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::deleteDatabaseAsync):

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::deleteDatabase):

        Change factory-level deleteDatabase to take opening and main frame origins:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * WebCore.exp.in:

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Introduce device pixel snapping helper functions.
        https://bugs.webkit.org/show_bug.cgi?id=128049

        Reviewed by Simon Fraser.

        These functions help device pixel snapping during painting. They follow the logic of
        the corresponding pixelSnappedInt* functions.

        No change in functionality.

        * platform/LayoutUnit.h:
        (WebCore::roundToDevicePixel):
        (WebCore::floorToDevicePixel):
        (WebCore::snapSizeToPixel):
        (WebCore::snapSizeToDevicePixel):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContext::pixelSnappingFactor):
        * platform/graphics/LayoutRect.h:
        (WebCore::pixelSnappedForPainting):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Floor thickness and length after switching from int to float.
        https://bugs.webkit.org/show_bug.cgi?id=128071

        Reviewed by Antti Koivisto.

        This is a temporary solution to fix the assertion on empty line drawing until after
        device pixel snapping is added.

        Covered by existing tests.

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

2014-02-02  Antti Koivisto  <antti@apple.com>

        Remove StyleScopeResolver
        https://bugs.webkit.org/show_bug.cgi?id=128069

        Reviewed by Anders Carlsson.

        This is dead code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
        (WebCore::DocumentRuleSets::collectFeatures):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.h:
        (WebCore::ElementRuleCollector::ElementRuleCollector):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::pushParentElement):
        (WebCore::StyleResolver::popParentElement):
        (WebCore::StyleResolver::locateSharedStyle):
        (WebCore::StyleResolver::styleForElement):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::document):
        * css/StyleScopeResolver.cpp: Removed.
        * css/StyleScopeResolver.h: Removed.
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::resolveShadowTree):

2014-02-02  Zalan Bujtas  <zalan@apple.com>

        Subpixel rendering: Make BorderEdge/RoundedRect::Radii LayoutUnit aware.
        https://bugs.webkit.org/show_bug.cgi?id=128036

        Reviewed by Darin Adler.

        Covered by existing tests.

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::operator++):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::BorderEdge::BorderEdge):
        (WebCore::BorderEdge::usedWidth):
        (WebCore::BorderEdge::getDoubleBorderStripeWidths):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::drawBoxSideFromPath):
        (WebCore::calculateSideRectIncludingInner):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        * rendering/RenderObject.h:
        * rendering/style/BorderData.h:
        (WebCore::BorderData::borderLeftWidth):
        (WebCore::BorderData::borderRightWidth):
        (WebCore::BorderData::borderTopWidth):
        (WebCore::BorderData::borderBottomWidth):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcRadiiFor):
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::getRoundedInnerBorderFor):
        * rendering/style/RenderStyle.h:

2014-02-01  Hunseop Jeong  <hs85.jeong@samsung.com>

        REGRESSION(r163234) Debug build is broken
        https://bugs.webkit.org/show_bug.cgi?id=128059

        Unreviewed. Debug build is broken with INDEXED_DATABASE.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString): Added the default: case.

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

        Subpixel rendering: LayoutUnit operator++ is broken.
        https://bugs.webkit.org/show_bug.cgi?id=128056

        Reviewed by Darin Adler.

        Add pre-increment operator++.

        * platform/LayoutUnit.h:
        (WebCore::LayoutUnit::operator++):

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

        More characters -> deprecatedCharacters (based on more EWS complaints)
        https://bugs.webkit.org/show_bug.cgi?id=128063

        Reviewed by Anders Carlsson.

        * editing/SmartReplace.cpp:
        (WebCore::addAllCodePoints):
        (WebCore::getSmartSet):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        Use deprecatedCharacters.

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

        Use deprecatedCharacters in a few more places (non-Mac-build sites found by EWS)
        https://bugs.webkit.org/show_bug.cgi?id=128042

        Reviewed by Sam Weinig.

        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeString):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::systemFallbackForCharacters):
        (WebCore::createGDIFont):
        (WebCore::FontCache::getTraitsInFamily):
        * platform/network/DataURL.cpp:
        (WebCore::handleDataURL):
        * platform/win/BString.cpp:
        (WebCore::BString::BString):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):
        * platform/win/FileSystemWin.cpp:
        (WebCore::pathByAppendingComponent):
        (WebCore::fileSystemRepresentation):
        * platform/win/PasteboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::Pasteboard::writeURLToDataObject):
        (WebCore::createGlobalImageFileDescriptor):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        Call deprecatedCharacters instead of characters.

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

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

        Reviewed by Benjamin Poulain.

        Updates the localizable strings for action sheets.

        * English.lproj/Localizable.strings:

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

        Factor URL decomposition methods (from URLUtils interface) into a base template
        https://bugs.webkit.org/show_bug.cgi?id=128052

        Reviewed by Sam Weinig.

        Refactoring only; no new tests.

        * html/DOMURL.cpp:
        * html/DOMURL.h:
        (WebCore::DOMURL::href): Moved to header and made inline.
        * html/URLUtils.h: Added. 
        (WebCore::URLUtils::href): Downcast and call the derived class.
        (WebCore::URLUtils::setHref): Downcast and call the derived class.
        Functions below factored out from DOMURL.cpp.
        (WebCore::URLUtils<T>::toString):
        (WebCore::URLUtils<T>::origin):
        (WebCore::URLUtils<T>::protocol):
        (WebCore::URLUtils<T>::setProtocol):
        (WebCore::URLUtils<T>::username):
        (WebCore::URLUtils<T>::setUsername):
        (WebCore::URLUtils<T>::password):
        (WebCore::URLUtils<T>::setPassword):
        (WebCore::URLUtils<T>::host):
        (WebCore::parsePortFromStringPosition):
        (WebCore::URLUtils<T>::setHost):
        (WebCore::URLUtils<T>::hostname):
        (WebCore::URLUtils<T>::setHostname):
        (WebCore::URLUtils<T>::port):
        (WebCore::URLUtils<T>::setPort):
        (WebCore::URLUtils<T>::pathname):
        (WebCore::URLUtils<T>::setPathname):
        (WebCore::URLUtils<T>::search):
        (WebCore::URLUtils<T>::setSearch):
        (WebCore::URLUtils<T>::hash):
        (WebCore::URLUtils<T>::setHash):

        Add mention of new header.
        * GNUmakefile.list.am: 
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

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

        Improve the JavaScript bindings of DatasetDOMStringMap
        https://bugs.webkit.org/show_bug.cgi?id=127971

        Unriewed.

        * dom/DatasetDOMStringMap.cpp:
        * dom/DatasetDOMStringMap.h:
        Follow up for r163239. Darin pointed out the #includes are wrong.

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

        IDB: Implement IDBObjectStore.delete()
        https://bugs.webkit.org/show_bug.cgi?id=127880

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::compare): Make this const.
        * Modules/indexeddb/IDBKeyData.h:

        * Modules/indexeddb/IDBKeyRangeData.cpp:
        (WebCore::IDBKeyRangeData::isExactlyOneKey): Returns whether or not
          the key range is known to represent precisely one key.
        * Modules/indexeddb/IDBKeyRangeData.h:

        * WebCore.exp.in:

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

        SVGTextLayoutAttributesBuilder shouldn't use RenderText::deprecatedCharacters()
        https://bugs.webkit.org/show_bug.cgi?id=128048

        Reviewed by Sam Weinig.

        Change UChar*& lastCharacter to bool& lastCharacterWasSpace since that's what the parameter was used for.

        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForTextRenderer):
        Initialize lastCharacterWasSpace to true to match the previous behavior.

        (WebCore::SVGTextLayoutAttributesBuilder::buildLayoutAttributesForForSubtree):
        Ditto.

        (WebCore::processRenderSVGInlineText):
        Take a reference instead of a pointer, get the character using RenderText::operator[] and compute lastCharacterWasSpace.

        (WebCore::SVGTextLayoutAttributesBuilder::collectTextPositioningElements):
        This now takes a bool reference instead.

        * rendering/svg/SVGTextLayoutAttributesBuilder.h:

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

        IDB: Index cursor complete advance() and iterate() support
        <rdar://problem/15941916> and https://bugs.webkit.org/show_bug.cgi?id=127870

        Reviewed by Dan Bernstein.

        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Always use the value buffer for the script object.

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

        Update WebCrypto JWK mapping to use key_ops
        https://bugs.webkit.org/show_bug.cgi?id=127609

        Reviewed by Sam Weinig.

        Updated JWK support ot match current editor draft.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Fixed this previously untested function to actually work.
        (WebCore::tryJWKKeyOpsValue):
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages):
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable): Removed an old comment,
        these things are now specced.
        (WebCore::addToJSON): Made static functions file static, there is no reason for
        them to be class members.
        (WebCore::buildJSONForOctetSequence):
        (WebCore::buildJSONForRSAComponents):
        (WebCore::addBoolToJSON):
        (WebCore::addJWKAlgorithmToJSON):
        (WebCore::addUsagesToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):
        * bindings/js/JSCryptoKeySerializationJWK.h:

        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp:
        (WebCore::CryptoAlgorithmAES_KW::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_KW::platformDecrypt):
        Check for length, so that we don't fail silently.

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

        Add security-checked casts for all WebCore::CachedResource subclasses
        <http://webkit.org/b/127988>

        Reviewed by Darin Adler.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        - Switch from static_cast<>() to security-checked cast.

        * loader/cache/CachedCSSStyleSheet.h:
        (WebCore::toCachedCSSStyleSheet): Add.
        * loader/cache/CachedFont.h:
        (WebCore::toCachedFont): Add.

        * loader/cache/CachedImage.h: Make CachedImageManual final.

        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::CachedRawResource): Add assert that
        only MainResource or RawResource types are used to construct a
        CachedRawResource.  This may be a security issue depending on
        what code exists that uses the type() value to cast to a
        CachedResource subclass.
        (WebCore::CachedRawResource::switchClientsToRevalidatedResource):
        Switch from static_cast<>() to toCachedRawResource().

        * loader/cache/CachedRawResource.h:
        (WebCore::toCachedRawResource): Add.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isMainOrRawResource): Add.  A
        CachedRawResource could be either a MainResource or a
        RawResource.  Currently only used in assertions.

        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestTextTrack):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestSVGDocument):
        (WebCore::CachedResourceLoader::requestRawResource):
        (WebCore::CachedResourceLoader::requestMainResource):
        - Switch from static_cast<>() to security-checked cast.

        * loader/cache/CachedSVGDocument.h:
        (WebCore::toCachedSVGDocument): Add.
        * loader/cache/CachedScript.h:
        (WebCore::toCachedScript): Add.
        * loader/cache/CachedTextTrack.h:
        (WebCore::toCachedTextTrack): Add.
        * loader/cache/CachedXSLStyleSheet.h:
        (WebCore::toCachedXSLStyleSheet): Add.

2014-02-01  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Unreviewed. Fixed GTK+ CMake build after r162922.

        * PlatformGTK.cmake: Removed SoupURIUtils.cpp from the
        compilation.

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

        Improve the JavaScript bindings of DatasetDOMStringMap
        https://bugs.webkit.org/show_bug.cgi?id=127971

        Reviewed by Sam Weinig.

        Instead of querying contains() followed by item(), just get the item
        at once in the custom binding.

        Test: fast/dom/dataset-name-getter-properties.html

        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::getOwnPropertySlotDelegate):
        * dom/DOMStringMap.idl:
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::item):
        * dom/DatasetDOMStringMap.h:

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

        Remove LEGACY_VIEWPORT_ADAPTION
        https://bugs.webkit.org/show_bug.cgi?id=128028

        Reviewed by Anders Carlsson.

        The code is incorrect and was only supported by Nix.

        * dom/Document.cpp:
        (WebCore::Document::childrenChanged):
        * dom/ViewportArguments.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process):

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

        Release build fix after r163234. Don't always export the symbol that doesn't exist under NDEBUG.

        * WebCore.exp.in:

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

        IDB: Index cursors use wrong deserialization for the retrieved value
        https://bugs.webkit.org/show_bug.cgi?id=128035

        Reviewed by Dan Bernstein.

        For the cursor operations, add an IDBKey value result in the callbacks.
        If an already deserialized IDBKey value exists it will be preferred over the serialized buffer.

        Change some of the onSuccess() callback formats:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess): Selectively choose between the IDBKey or the SharedBuffer value
          when choosed what to convert to the ScriptValue.
        * Modules/indexeddb/IDBRequest.h:

        Let the IDBCursorBackend hold both a value buffer and a value key:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::updateCursorData):
        (WebCore::IDBCursorBackend::clear):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::valueBuffer):
        (WebCore::IDBCursorBackend::valueKey):

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

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

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

        Add IDBKey/IDBKeyData debug logging utilities:
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::loggingString):
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::loggingString):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

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

        Debug build fix after r163232. Call hasEditableStyle() instead of isContentEditable() which
        can trigger a layout synchronously inside paintCaret. This matches the code before r163232.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

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

        Remove inline member functions of FrameSelection that access m_selection
        https://bugs.webkit.org/show_bug.cgi?id=127986

        Reviewed by Enrica Casucci.

        Removed numerous inline member functions of FrameSelection that depend on m_selection.

        This is needed to ensure all accesses to m_selection happen through FrameSelection::selection(),
        which in turn, allows us to update its call sites to use either validated selection that editing
        and rendering code uses or invalidated selection that's exposed to JavaScript.

        * WebCore.exp.in:
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper _convertToNSRange:]):
        (-[WebAccessibilityObjectWrapper _convertToDOMRange:]):
        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMRange move:inDirection:]):
        (-[DOMRange extend:inDirection:]):
        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * editing/Editor.cpp:
        (WebCore::Editor::canEdit):
        (WebCore::Editor::canEditRichly):
        (WebCore::Editor::canDHTMLCut):
        (WebCore::Editor::canDHTMLCopy):
        (WebCore::Editor::canCopy):
        (WebCore::Editor::canDelete):
        (WebCore::Editor::replaceSelectionWithFragment):
        (WebCore::Editor::tryDHTMLCopy):
        (WebCore::Editor::tryDHTMLCut):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::paste):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::guessesForMisspelledOrUngrammatical):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::isSpellCheckingEnabledInFocusedNode):
        (WebCore::Editor::markAndReplaceFor):
        (WebCore::Editor::getCompositionSelection):
        (WebCore::Editor::selectionStartHasMarkerFor):
        * editing/EditorCommand.cpp:
        (WebCore::expandSelectionToGranularity):
        (WebCore::enabledInRichlyEditableText):
        (WebCore::enabledRangeInEditableText):
        (WebCore::enabledRangeInRichlyEditableText):
        * editing/FrameSelection.cpp:
        (WebCore::CaretBase::updateCaretRect):
        (WebCore::FrameSelection::recomputeCaretRect):
        (WebCore::FrameSelection::selectAll):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::updateSelectionCachesIfSelectionIsInsideTextFormControl):
        (WebCore::FrameSelection::setFocusedElementIfNeeded):
        (WebCore::FrameSelection::currentForm):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::isCaretOrRange):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::isInPasswordField):
        * editing/VisibleSelection.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::canCopyExcludingStandaloneImages):
        (WebCore::Editor::readSelectionFromPasteboard):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::setActive):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::computeSelectionStart):
        (WebCore::HTMLTextFormControlElement::computeSelectionEnd):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        * page/DragController.cpp:
        (WebCore::DragController::dragIsMove):
        (WebCore::setSelectionToDragCaret):
        (WebCore::DragController::concludeEditDrag):
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::nodeIsNotBeingEdited):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        (WebCore::EventHandler::handleDrag):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        (WebCore::clearSelectionIfNeeded):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::caretRect):
        (WebCore::Frame::rectForScrollToVisible):
        (WebCore::Frame::styleAtSelectionStart):
        (WebCore::Frame::setRangedSelectionBaseToCurrentSelectionStart):
        (WebCore::Frame::setRangedSelectionBaseToCurrentSelectionEnd):
        (WebCore::Frame::setRangedSelectionInitialExtentToCurrentSelectionStart):
        (WebCore::Frame::setRangedSelectionInitialExtentToCurrentSelectionEnd):
        (WebCore::Frame::interpretationsForCurrentRoot):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):

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

        Pass the viewport rect and scroll origin independently into the scrolling tree, and make things floats
        https://bugs.webkit.org/show_bug.cgi?id=128032

        Reviewed by Tim Horton.

        Pass the viewport rect and scroll offset independently into the ScrollingTree
        via the ScrollingStateScrollingNode, since on iOS the scroll offset doesn't
        always correspond to the viewport rect.
        
        Make the viewport rect and the scroll origin be float-based, since on
        Retina screens and with zooming these can both be non-integral.

        No behavior change.
        
        * WebCore.exp.in:
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::scheduleUpdateScrollPositionAfterAsyncScroll):
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/AsyncScrollingCoordinator.h:
        (WebCore::AsyncScrollingCoordinator::ScheduledScrollUpdate::ScheduledScrollUpdate):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setViewportConstrainedObjectRect):
        (WebCore::ScrollingStateScrollingNode::setScrollPosition):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::mainFrameScrollPosition):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollPosition):
        (WebCore::ScrollingTreeScrollingNode::viewportConstrainedObjectRect):
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::scrollingTreeNodeDidScroll):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingTreeIOS.cpp:
        (WebCore::ScrollingTreeIOS::scrollingTreeNodeDidScroll):
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::maximumScrollPosition):
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::parentScrollPositionDidChange):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::absoluteScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::updateMainFramePinState):
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::parentScrollPositionDidChange):
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::shrunkTo):

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

        [Cocoa] Add NEFilterSource support to ContentFilterMac
        https://bugs.webkit.org/show_bug.cgi?id=127979

        Reviewed by Sam Weinig.

        Update ContentFilterMac to work with both WebFilterEvaluator and
        NEFilterSource, if enabled.

        * platform/ContentFilter.h: Set HAVE_NE_FILTER_SOURCE based on platform
        conditionals, and forward-declare NEFilterSource.
        * platform/mac/ContentFilterMac.mm: Included NEFilterSource.h if the SDK
        has it; declared the class directly if not. Also soft-linked
        NetworkExtension.framework.
        (WebCore::ContentFilter::ContentFilter): Initialized
        m_neFilterSourceStatus to NEFilterSourceStatusNeedsMoreData and created
        m_platformContentFilter and m_neFilterSource objects if their
        respective filters were enabled.
        (WebCore::ContentFilter::isEnabled): Returned true if either filter is
        enabled.
        (WebCore::ContentFilter::addData): Added incoming data to each filter
        that is enabled.
        (WebCore::ContentFilter::finishedAddingData): Notified each enabled
        filter that we are finished adding data.
        (WebCore::ContentFilter::needsMoreData): Returned true if either filter
        needs more data.
        (WebCore::ContentFilter::didBlockData): Returned true if either filter
        blocked data.
        (WebCore::ContentFilter::getReplacementData): Returned
        m_replacementData. Commented that this will currently return a null
        string if NEFilterSource blocked the load.

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

        Rollout r163195 and related patches

        * CMakeLists.txt:
        * ForwardingHeaders/runtime/JSStringInlines.h: Removed.
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * bindings/js/JSIDBAnyCustom.cpp:
        * bindings/js/JSIDBDatabaseCustom.cpp:
        * bindings/js/JSIDBObjectStoreCustom.cpp:
        * bindings/js/JSNodeFilterCondition.cpp:

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

        Even when in fixed layout mode, some platforms need to do layout after a viewport change
        https://bugs.webkit.org/show_bug.cgi?id=128003

        Reviewed by Andreas Kling.
        
        Re-land 163182 with a less aggresive check in visibleContentsResized() for
        needing to layout.

        iOS uses fixed layout mode in both WK1 and WK2, but lays out fixed position
        elements relative to a variable viewport. This code assumed that fixed layout
        implies a fixed viewport.
        
        Fix by testing for useCustomFixedPositionLayoutRect() in the fixed layout case.
        
        Also removed RenderView::hasCustomFixedPosition() which is no longer used.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldLayoutAfterViewportChange):
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

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

        Expose creation and modification times for LocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=128018

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: Export FileSystem functions to get file times.

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

        Implement (most of) URL API
        https://bugs.webkit.org/show_bug.cgi?id=127795

        Reviewed by Alexey Proskuryakov.

        Tests: fast/dom/DOMURL/get-href-attribute-port.html
               fast/dom/DOMURL/invalid-url-getters.html
               fast/dom/DOMURL/set-href-attribute-hash.html
               fast/dom/DOMURL/set-href-attribute-host.html
               fast/dom/DOMURL/set-href-attribute-hostname.html
               fast/dom/DOMURL/set-href-attribute-pathname.html
               fast/dom/DOMURL/set-href-attribute-port.html
               fast/dom/DOMURL/set-href-attribute-protocol.html
               fast/dom/DOMURL/set-href-attribute-search.html
               fast/dom/DOMURL/set-href-attribute-whitespace.html
               fast/dom/DOMURL/url-constructor.html
               fast/dom/DOMURL/url-origin.html
               fast/dom/DOMURL/url-password.html
               fast/dom/DOMURL/url-username.html

        * CMakeLists.txt: Update for new IDL file.
        * DerivedSources.make: ditto
        * GNUmakefile.list.am: ditto
        * html/DOMURL.cpp: Implement URL() constructor and instance methods; cribbed from
        HTMLAnchorElement mostly
        (WebCore::DOMURL::DOMURL):
        (WebCore::DOMURL::href):
        (WebCore::DOMURL::setHref):
        (WebCore::DOMURL::toString):
        (WebCore::DOMURL::origin):
        (WebCore::DOMURL::protocol):
        (WebCore::DOMURL::setProtocol):
        (WebCore::DOMURL::username):
        (WebCore::DOMURL::setUsername):
        (WebCore::DOMURL::password):
        (WebCore::DOMURL::setPassword):
        (WebCore::DOMURL::host):
        (WebCore::parsePortFromStringPosition):
        (WebCore::DOMURL::setHost):
        (WebCore::DOMURL::hostname):
        (WebCore::DOMURL::setHostname):
        (WebCore::DOMURL::port):
        (WebCore::DOMURL::setPort):
        (WebCore::DOMURL::pathname):
        (WebCore::DOMURL::setPathname):
        (WebCore::DOMURL::search):
        (WebCore::DOMURL::setSearch):
        (WebCore::DOMURL::hash):
        (WebCore::DOMURL::setHash):
        * html/DOMURL.h:
        (WebCore::DOMURL::create):
        * html/DOMURL.idl: Update for new methods.
        * html/URLUtils.idl: Added. New IDL file that contains most of the interface.

2014-01-31  Bem Jones-Bey  <bjonesbe@adobe.com>

        Create clipping path from <box> value
        https://bugs.webkit.org/show_bug.cgi?id=126205

        Reviewed by Dirk Schulze.

        This implements <box> values for border, content, and padding boxes.
        Since margin box is not implemented as a reference box, this does not
        implement margin box value.

        Tests: css3/masking/clip-path-border-box.html
               css3/masking/clip-path-content-box.html
               css3/masking/clip-path-padding-box.html

        * rendering/ClipPathOperation.h:
        (WebCore::BoxClipPathOperation::pathForReferenceRect): Implement.
        * rendering/RenderLayer.cpp:
        (WebCore::computeReferenceBox): Pull out reference box calculation.
        (WebCore::RenderLayer::setupClipPath): Add support for <box> values.
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape): Add FIXME comment.

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

        Make it possible to implement JS builtins in JS
        https://bugs.webkit.org/show_bug.cgi?id=127887

        Reviewed by Michael Saboff.

        Updating for the newly required headers.

        Test: js/regress/array-prototype-every.html

        * ForwardingHeaders/runtime/JSStringInlines.h: Added.
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * bindings/js/JSIDBAnyCustom.cpp:
        * bindings/js/JSIDBDatabaseCustom.cpp:
        * bindings/js/JSIDBObjectStoreCustom.cpp:

2014-01-31  Beth Dakin  <bdakin@apple.com>

        Build fix.

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

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

        Properly handle cases where a profile couldn't be recorded and null is returned.

        <rdar://problem/15957993> Crash with Inspector open at WebCore::ScriptProfile::buildInspectorObject

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCallFunction): Null check profile.
        (WebCore::InspectorTimelineAgent::didEvaluateScript): Ditto.

2014-01-31  Beth Dakin  <bdakin@apple.com>

        Extended background should only create margin tiles for pages with background 
        images
        https://bugs.webkit.org/show_bug.cgi?id=127876
        -and corresponding-
        <rdar://problem/15827632>

        Reviewed by Simon Fraser.

        Settings::backgroundShouldExtendBeyondPage() doesn't need to create margin tiles
        for pages with simple background colors. Instead, those pages should achieve the 
        same effect by setting a background color on RenderLayerCompositor's
        m_layerForOverhangAreas. For now, we should only create tiles when there is a 
        background image. We may want to extend this to other types of complicated 
        backgrounds in the future.

        This patch makes callers that only care about the value of the setting always call 
        Settings::backgroundShouldExtendBeyondPage() rather than asking about margin 
        tiles. And callers that want to know about margin tiles can either keep querying 
        that directly or they can call FrameView::hasExtendedBackgroundRectForPainting(). 
        An extended background does not necessarily require an extended background rect 
        for painting, and this new FrameView function can make that distinction. 

        When setBackgroundExtendsBeyondPage() is called, call RenderLayerCompositor:: 
        setRootExtendedBackgroundColor() with either the document background color, or an 
        invalid color, depending on whether you have or do not have an extended 
        background. Also call needsExtendedBackgroundRectForPainting() to determine if we 
        also need to extend the background rect, and then call 
        setHasExtendedBackgroundRectForPainting() with its value.
        * page/FrameView.cpp:
        (WebCore::FrameView::setBackgroundExtendsBeyondPage):
        (WebCore::FrameView::hasExtendedBackgroundRectForPainting):

         Right now we only need to extend the background rect for documents with 
        background images on the root. This may be extended in the future.
        (WebCore::FrameView::needsExtendedBackgroundRectForPainting):
        (WebCore::FrameView::setHasExtendedBackgroundRectForPainting):
        (WebCore::FrameView::extendedBackgroundRectForPainting):
        * page/FrameView.h:

        Expose defaultTileWidth and defaultTileHeight from TiledBacking.h so that we can 
        access the values from RenderLayerBacking.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.mm:

        hasExtendedBackgroundForPainting() is now called 
        hasExtendedBackgroundRectForPainting() to distinguish 
        the case where an extended RECT is needed.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

        Call setHasExtendedBackgroundRectForPainting() if relevant.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange):

        Don't call setTiledBackingHasMargins() right in the constructor because we only
        want margins if we have a background image, and we won't have that information
        yet.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

        Clean up the variable name here. We are only setting margins when we need to 
        extend the background rect for painting. Also make us of newly-exposed 
        defaultTileWidth and Height.
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):

        Remove RenderLayerBacking::tiledBackingHasMargin() since there aren't any more
        callers.
        * rendering/RenderLayerBacking.h:
        (WebCore::RenderLayerBacking::usingTiledBacking):

        setMasksToBounds(false) based on the Setting, and not based on whether there are 
        tile margins.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):

        Return false from RenderLayerCompositor::requiresContentShadowLayer() if there is 
        an extended background.
        (WebCore::RenderLayerCompositor::requiresContentShadowLayer):

        Setting the background color on m_layerForOverhangAreas is all we need to do to 
        create the extended background effect on pages that only have background colors. 
        (WebCore::RenderLayerCompositor::setRootExtendedBackgroundColor):
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers):

        Remove mainFrameBackingIsTiledWithMargin() since there aren't any more callers,
        and add setRootExtendedBackgroundColor() so that we can update the color from 
        RenderView.
        * rendering/RenderLayerCompositor.h:

        Revert the code that was added to paint background color here, since this should 
        all be covered by calling RenderLayerCompositor::setExtendedBackgroundColor(). 
        More complicated backgrounds will run through the full background painting code.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::backgroundRect):

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

        Remove FrameLoader's reloadWithOverrideURL and reloadWithRequest
        https://bugs.webkit.org/show_bug.cgi?id=128005

        Reviewed by Darin Adler.

        The former was used by chromium-android to implement the "request
        desktop version" feature, but is no longer used. After removing it,
        the latter is only invoked by reload(), so we can merge the method
        with it.

        No new tests, just removing dead code.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::reload):
        * loader/FrameLoader.h:

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

        Unreviewed, rolling out r163182.
        http://trac.webkit.org/changeset/163182
        https://bugs.webkit.org/show_bug.cgi?id=128012

        Broke lots of tests (Requested by smfr on #webkit).

        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        (WebCore::isFixedPositionInViewport):
        (WebCore::RenderView::hasCustomFixedPosition):
        * rendering/RenderView.h:

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

        IDB: openCursor() needs to prime the cursor with first position values
        https://bugs.webkit.org/show_bug.cgi?id=128008

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::OpenCursorOperation::perform): If the server connection returns initial keys/values
          for the cursor, store them.

        * Modules/indexeddb/IDBServerConnection.h:

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

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

        [CSS Shapes] Image valued shape can fail
        https://bugs.webkit.org/show_bug.cgi?id=127588

        Reviewed by Dean Jackson.

        Correct the handling of image valued shapes that extend into or beyond the
        margin box. This can happen when object-fit causes one dimension of the shape
        to be greater than the corresponding margin box dimension.

        Made some simplifications in RasterShapeIntervals::computeShapeMarginIntervals()
        by making the shapeMargin parameter an int, removing some unnecessary variables.

        Revised the RasterShapeIntervals class. It's now a just a list of size() interval-lists,
        with valid indices: -offset() <= y < size() - offset(), or minY() to maxY(). If margin-top
        and shape-margin are specified, then offset() is the larger of shape-margin and margin-top.
        Similarly size() is the vertical size of the margin-box or the content-box expanded by
        shape-margin, whichever is larger. See computeShapeMarginIntervals().

        Tests: fast/shapes/shape-outside-floats/shape-outside-image-fit-005.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-006.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals):
        (WebCore::RasterShape::marginIntervals):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals):
        (WebCore::RasterShapeIntervals::offset):
        (WebCore::RasterShapeIntervals::minY):
        (WebCore::RasterShapeIntervals::maxY):
        (WebCore::RasterShapeIntervals::intervalsAt):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:

        (WebCore::getShapeImageReplacedRect):
        The rect that the image will be drawn into. This rect can imply image
        scaling and translation.

        (WebCore::getShapeImageMarginRect):
        The margin rect relative too the (0,0 origin) shape content rect.

        (WebCore::ShapeInfo<RenderType>::computedShape):

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

        Deduplicate Document::encoding().
        <https://webkit.org/b/128000>

        Make Document::encoding() return an AtomicString so we don't duplicate
        the string every time it's called.

        215 KB progression on Membuster3.

        Reviewed by Simon Fraser.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::encoding):

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

        Even when in fixed layout mode, some platforms need to do layout after a viewport change
        https://bugs.webkit.org/show_bug.cgi?id=128003

        Reviewed by Andreas Kling.

        iOS uses fixed layout mode in both WK1 and WK2, but lays out fixed position
        elements relative to a variable viewport. This code assumed that fixed layout
        implies a fixed viewport.
        
        Fix by testing for useCustomFixedPositionLayoutRect() in the fixed layout case.
        
        Also removed RenderView::hasCustomFixedPosition() which is no longer used.
        
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldLayoutAfterViewportChange):
        (WebCore::FrameView::visibleContentsResized):
        * page/FrameView.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:

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

        Guard GLContextEGL::platformContext() with USE(3D_GRAPHICS)
        https://bugs.webkit.org/show_bug.cgi?id=120214

        Reviewed by Philippe Normand.

        Guard the GLContextEGL::platformContext() declaration and definiton with USE(3D_GRAPHICS)
        since this guard is used in the GLContext class, from which the GLContextEGL class overrides
        this method.

        * platform/graphics/egl/GLContextEGL.cpp:
        * platform/graphics/egl/GLContextEGL.h:

2014-01-31  Beth Dakin  <bdakin@apple.com>

        Sideways 'wobble' when scrolling with trackpad on Mavericks
        https://bugs.webkit.org/show_bug.cgi?id=127521
        -and corresponding-
        <rdar://problem/14137306>

        Reviewed by Simon Fraser.

        This patch takes http://trac.webkit.org/changeset/154535 which introduced 
        filtering wheel events for overflow areas to try to make them less sensitive to X 
        deltas when scrolling in a primarily Y direction, and it factors that code out 
        into its own class, now called WheelEventDeltaTracker. So now this new class can 
        use the same code to filter events for WebKit2’s EventDispatcher.

        Files for WheelEventDeltaTracker.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        WK2 needs these new WheelEventDeltaTracker functions.
        * WebCore.exp.in:

        Move a bunch of code over to WheelEventDeltaTracker and use
        m_recentWheelEventTracker to serve the same purpose.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleWheelEvent):
        (WebCore::EventHandler::defaultWheelEventHandler):
        * page/EventHandler.h:

        Allow horizontal rubber banding now that we have some event filtering in place.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

        New files. Most of this code was from EventHandler.
        * page/WheelEventDeltaTracker.cpp: Added.
        (WebCore::WheelEventDeltaTracker::WheelEventDeltaTracker):
        (WebCore::WheelEventDeltaTracker::~WheelEventDeltaTracker):
        (WebCore::WheelEventDeltaTracker::beginTrackingDeltas):
        (WebCore::WheelEventDeltaTracker::endTrackingDeltas):
        (WebCore::WheelEventDeltaTracker::recordWheelEventDelta):
        (WebCore::deltaIsPredominantlyVertical):
        (WebCore::WheelEventDeltaTracker::dominantScrollGestureDirection):
        * page/WheelEventDeltaTracker.h: Added.
        (WebCore::WheelEventDeltaTracker::isTrackingDeltas):

        New function to clone events while zero-ing out certain deltas.
        * platform/PlatformWheelEvent.h:
        (WebCore::PlatformWheelEvent::copyIgnoringHorizontalDelta):
        (WebCore::PlatformWheelEvent::copyIgnoringVerticalDelta):

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

        Don't do logging from Range::collectSelectionRects() on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127999

        Reviewed by Enrica Casucci.

        Remove some logging code that printed Range stuff in debug builds.

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

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

        Make iOS fixed layer registration more like OS X
        https://bugs.webkit.org/show_bug.cgi?id=127983

        Reviewed by Antti Koivisto.

        Remove some #if PLATFORM(IOS) in the code related to registering
        viewport-constrained layers. The code behaves correctly now in WK1
        and WK2 based on the presence of a ScrollingCoordinator.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::nearestScrollingCoordinatorAncestor):
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer):
        (WebCore::RenderLayerCompositor::unregisterViewportConstrainedLayer):

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

        Unreviewed, rolling out r163165.
        http://trac.webkit.org/changeset/163165
        https://bugs.webkit.org/show_bug.cgi?id=127997

        broke 2 fast/table tests (Requested by kling on #webkit).

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::computePreferredLogicalWidths):

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

        Don't allocate a new XMLHttpRequestStaticData every time staticData() is called
        https://bugs.webkit.org/show_bug.cgi?id=127996

        Reviewed by Andreas Kling.

        std::once_flag should be static.

        * xml/XMLHttpRequest.cpp:
        (WebCore::staticData):

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

        Subpixel rendering: Change RenderBoxModelObject's border functions' signature to support subpixel border painting.
        https://bugs.webkit.org/show_bug.cgi?id=127975

        Reviewed by Simon Fraser.

        From int to LayoutUnit.

        Covered by existing tests. No change in functionality.

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<):
        * platform/text/TextStream.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderTop):
        (WebCore::RenderBoxModelObject::borderBottom):
        (WebCore::RenderBoxModelObject::borderLeft):
        (WebCore::RenderBoxModelObject::borderRight):
        (WebCore::RenderBoxModelObject::borderBefore):
        (WebCore::RenderBoxModelObject::borderAfter):
        (WebCore::RenderBoxModelObject::borderStart):
        (WebCore::RenderBoxModelObject::borderEnd):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::repaintAfterLayoutIfNeeded):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::borderBefore):
        (WebCore::RenderTable::borderAfter):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        * rendering/RenderTableCell.h:

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

        IDB: Index writing
        <rdar://problem/15899973> and https://bugs.webkit.org/show_bug.cgi?id=127868

        Reviewed by Anders Carlsson.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::openConnectionInternal): Remove outdated comment and ASSERT.

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex): Conditionalize a block of code that is LevelDB-only.

        Remove getColumnBlob().  Nobody used it, and it was dangerous because it reset the statement:
        * platform/sql/SQLiteStatement.cpp:
        * platform/sql/SQLiteStatement.h:
        * WebCore.exp.in:

2014-01-30  László Langó  <lango@inf.u-szeged.hu>

        [CSS Grid Layout] Do log(n) search in the named line vectors when positioning named line spans.
        https://bugs.webkit.org/show_bug.cgi?id=125396

        Reviewed by Andreas Kling.

        Implement the suggested FIXMEs and do a log search in the named line
        vectors. This maintains the previous (somewhat tricky) behavior by
        using std::lower_bound and std::upper_bound. No difference in existing
        performance tests, but should scale much better for big grids.

        Backported from Blink:
        https://chromium.googlesource.com/chromium/blink/+/9fc477af0be708c490a6b90e65e412b0c22b161f

        No new tests, no behavior change.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveRowStartColumnStartNamedGridLinePositionAgainstOppositePosition):
        (WebCore::RenderGrid::resolveRowEndColumnEndNamedGridLinePositionAgainstOppositePosition):

2014-01-31  László Langó  <lango@inf.u-szeged.hu>

        Fix table sizing when 'max-width' is used.
        https://bugs.webkit.org/show_bug.cgi?id=115156

        Reviewed by Andreas Kling.

        r143534 make <table> abide by 'max-width' all the time which is wrong.
        Per the CSS specification, a table should be wide enough to fit its
        content, regardless of 'max-width'.

        r140479 fixed part of the regression from that change but made the
        same fatal mistake by constraining min-content to fit 'max-width'.

        The fix is to avoid constraining min-content and ensure that the table
        logical width is at least its min-content size.

        Backported from Blink:
        https://chromium.googlesource.com/chromium/blink/+/0bca0dec4895aeeb2054ba36316e984e4ebed06f

        Test: fast/table/html-table-width-max-width-constrained.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::computePreferredLogicalWidths):

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

        Fix iOS build after r163156.
        
        Need to convert LayoutSizes to FloatSizes.

        * bindings/objc/DOMUIKitExtensions.mm:
        (-[DOMNode borderRadii]):

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

        Subpixel rendering: Change drawRect()/drawLine() signature to support subpixel rendering.
        https://bugs.webkit.org/show_bug.cgi?id=127961

        Reviewed by Simon Fraser.

        IntRect/IntPoint -> FloatRect/FloatPoint.

        Covered by existing tests. No change in functionality.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine): Keep 'distance' int for DottedStroke and DashedStroke for now.
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):

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

        Remove ScrollingCoordinator::setLayerIsContainerForFixedPositionLayers() which is no longer used
        https://bugs.webkit.org/show_bug.cgi?id=127981

        Reviewed by Andreas Kling.

        setLayerIsContainerForFixedPositionLayers() was only used by Chromium and Blackberry,
        so remove it.
        
        This allows the removal of RenderLayerBacking::registerScrollingLayers(),
        moving the single useful line of code to the caller.

        * page/scrolling/ScrollingCoordinator.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootLayer):

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

        Some fixed position elements disappear in WK2 on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127977

        Reviewed by Tim Horton.

        Use the appropriate rectangle to ensure that on iOS we don't 
        consider a fixed element outside the viewport when zoomed in,
        and therefore never make a compositing layer for it.

        Also remove the iOS-specific code in RenderLayerCompositor::requiresCompositingForPosition(),
        since it's OK to use the common code. Doing so requires that we
        set the "acceleratedCompositingForFixedPositionEnabled" setting to true
        for iOS, so do so.

        * page/Settings.cpp:
        * page/Settings.in:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

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

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

        Reviewed by Simon Fraser.

        In order to draw hairline borders, RoundedRect needs to be
        LayoutUnit based.

        No change in behavior.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::scale):
        (WebCore::RoundedRect::Radii::expand):
        (WebCore::RoundedRect::inflateWithRadii):
        (WebCore::RoundedRect::RoundedRect):
        (WebCore::RoundedRect::intersectsQuad):
        * platform/graphics/RoundedRect.h:
        (WebCore::RoundedRect::Radii::Radii):
        (WebCore::RoundedRect::Radii::setTopLeft):
        (WebCore::RoundedRect::Radii::setTopRight):
        (WebCore::RoundedRect::Radii::setBottomLeft):
        (WebCore::RoundedRect::Radii::setBottomRight):
        (WebCore::RoundedRect::Radii::topLeft):
        (WebCore::RoundedRect::Radii::topRight):
        (WebCore::RoundedRect::Radii::bottomLeft):
        (WebCore::RoundedRect::Radii::bottomRight):
        (WebCore::RoundedRect::Radii::expand):
        (WebCore::RoundedRect::Radii::shrink):
        (WebCore::RoundedRect::rect):
        (WebCore::RoundedRect::setRect):
        (WebCore::RoundedRect::move):
        (WebCore::RoundedRect::inflate):
        (WebCore::RoundedRect::expandRadii):
        (WebCore::RoundedRect::shrinkRadii):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::setCachedShadowValues):
        (WebCore::ScratchBuffer::setCachedInsetShadowValues):
        (WebCore::computeSliceSizesFromRadii):
        (WebCore::ShadowBlur::templateSize):
        (WebCore::ShadowBlur::drawRectShadow):
        (WebCore::ShadowBlur::drawInsetShadow):
        (WebCore::ShadowBlur::drawRectShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithoutTiling):
        (WebCore::ShadowBlur::drawInsetShadowWithTiling):
        (WebCore::ShadowBlur::drawRectShadowWithTiling):
        (WebCore::ShadowBlur::drawLayerPieces):
        (WebCore::ShadowBlur::beginShadowLayer):
        * platform/graphics/ShadowBlur.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillRectWithRoundedHole):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::fillRoundedRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::calculateSideRect):
        (WebCore::RenderBoxModelObject::paintBorderSides):
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        (WebCore::calculateSideRectIncludingInner):
        (WebCore::calculateAdjustedInnerBorder):
        (WebCore::areaCastingShadowInHole):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):

2014-01-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building against GTK+ 2
        https://bugs.webkit.org/show_bug.cgi?id=127959

        Reviewed by Anders Carlsson.

        * PlatformGTK.cmake: Use the new API version variable and don't use GTK3 directly.

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

        Speculative build fix.

        * page/animation/CSSPropertyAnimation.cpp:

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

        Subpixel rendering: Change BorderData's width from unsigned to float to enable subpixel border painting.
        https://bugs.webkit.org/show_bug.cgi?id=127949

        Reviewed by Andreas Kling.

        Covered by existing tests. No change in functionality.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcBorderStart):
        (WebCore::RenderTable::calcBorderEnd):
        * rendering/style/BorderValue.h:
        (WebCore::BorderValue::BorderValue):
        (WebCore::BorderValue::width):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::borderBeforeWidth):
        (WebCore::RenderStyle::borderAfterWidth):
        (WebCore::RenderStyle::borderStartWidth):
        (WebCore::RenderStyle::borderEndWidth):
        * rendering/style/RenderStyle.h:

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

        Add security-checked cast for WebCore::CachedImage
        <http://webkit.org/b/127967>

        Reviewed by Darin Adler.

        * loader/cache/CachedImage.h:
        (WebCore::toCachedImage): Add.
        (WebCore::toCachedImageManual): Add.
        * loader/cache/CachedResource.h:
        (CACHED_RESOURCE_TYPE_CASTS): Add macro.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::switchClientsToRevalidatedResource):
        (WebCore::CachedImage::resumeAnimatingImagesForLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestImage):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::removeImageFromCache):
        - Use toCachedImage() and toCachedImageManual().

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

        Fixed position objects are clipped in iOS WK2
        https://bugs.webkit.org/show_bug.cgi?id=127974

        Reviewed by Darin Adler.
        
        We clip compositing layers for fixed position objects to the viewport
        to avoid huge layers. However, because iOS changes the fixed position
        rect when zooming, we need a different rect for iOS.
        
        In WK1 (when we have a platformWidget), we can use
        visibleContentRect(ScrollableArea::LegacyIOSDocumentVisibleRect)
        which is effectively the whole document. However in WK2 this is
        the real visibleContentRect(), so there we use unscaledDocumentRect().

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedExtentRect):
        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):

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

        Add column number and call timing support to LegacyProfiler.

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

        Reviewed by Joseph Pecoraro.

        * bindings/js/ScriptProfile.cpp:
        (WebCore::ScriptProfile::idleTime):
        (WebCore::buildInspectorObjectFor):
        (WebCore::ScriptProfile::buildInspectorObject):
        * bindings/js/ScriptProfile.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorProfilerAgent::getCPUProfile):
        * inspector/ScriptProfileNode.idl:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/protocol/Profiler.json:

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

        Include profile with FunctionCall and EvaluateScript Timeline records.

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

        Reviewed by Joseph Pecoraro.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCallInjectedScriptFunction):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCallFunctionImpl):
        (WebCore::InspectorInstrumentation::didEvaluateScriptImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCallFunction):
        (WebCore::InspectorInstrumentation::didEvaluateScript):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::appendProfile):
        * inspector/TimelineRecordFactory.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::didCallInjectedScriptFunction):
        * inspector/WorkerInspectorController.h:

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

        Remove now-empty ScriptController::setCaptureCallStackForUncaughtExceptions
        https://bugs.webkit.org/show_bug.cgi?id=127964

        Reviewed by Timothy Hatcher.

        Remove empty function. It was only needed by v8 at one point.

        * bindings/js/ScriptController.h:
        * bindings/js/ScriptController.cpp:
        Remove empty function.

        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        Remove callers and related tracking state.

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

        WebGL load policy should be queried for the top level document.
        https://bugs.webkit.org/show_bug.cgi?id=127937.
        <rdar://problem/15950122>

        Reviewed by Timothy Horton.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2014-01-27  Jeffrey Pfau  <jpfau@apple.com>

        Add a method for schemes to be registered as supporting cache partitioning
        https://bugs.webkit.org/show_bug.cgi?id=127739

        Reviewed by Darin Adler.

        Currently, this assumes that schemes supporting cache partitioning
        also support (scheme, host) doubles for the scheme. Furthermore,
        the scheme is currently discarded when partitioning and is only
        checked to ensure that partitioning is supported for that scheme: it
        is assumed that all origins with the same host double should be binned
        together, regardless of scheme.

        * WebCore.exp.in:
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::cachePartition):
        * platform/SchemeRegistry.cpp:
        (WebCore::CachePartitioningSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsCachePartitioned):
        (WebCore::SchemeRegistry::shouldPartitionCacheForURLScheme):
        * platform/SchemeRegistry.h:

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

        [iOS] Convert blocks to lambdas in iOS Fullscreen code.
        https://bugs.webkit.org/show_bug.cgi?id=127946

        Reviewed by Anders Carlsson.

        Pushing a block into a std::function will eventually cause a crash, since std::function
        does not know about Block_copy and Block_release.

        Lamdas can be intrinsicly converted to blocks, but not vice versa. Switch over all the
        blocks in the new iOS Fullscreen code to use lamdas, and use the ref-counted this object
        directly rather than implicitly.

        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
        (WebVideoFullscreenInterfaceAVKit::setVideoLayer):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):

2014-01-30  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add a "make dist" target
        https://bugs.webkit.org/show_bug.cgi?id=116378

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Don't build WebKitVersion.h for WebKitGTK+. We don't use it
        and we don't want to distribute the dependency.

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

        IDB: ObjectStore cursor advance() support
        <rdar://problem/15779645> and https://bugs.webkit.org/show_bug.cgi?id=127866

        Reviewed by Sam Weinig.

        Add IDBKeyData sorting for database collation:
        * Modules/indexeddb/IDBKeyData.cpp:
        (WebCore::IDBKeyData::compare):
        * Modules/indexeddb/IDBKeyData.h:

        * WebCore.exp.in:

        * platform/sql/SQLiteTransaction.h:
        (WebCore::SQLiteTransaction::database):

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

        De-virtual-ize CachedResource::isImage()
        <http://webkit.org/b/127936>

        Reviewed by Andreas Kling.

        Also replace explicit type() checks with isImage().

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::willSendRequest): Use isImage().
        * loader/cache/CachedImage.h:
        (WebCore::CachedResource::isImage): Remove virtual override.
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::isImage): Check type() instead of
        defining a virtual method that returns false by default.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::reloadImagesIfNotDeferred): Use isImage().

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

        [iOS] don't update media layers on main thread when using AVFoundation
        https://bugs.webkit.org/show_bug.cgi?id=127931

        Reviewed by Simon Fraser.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::mediaLayerMustBeUpdatedOnMainThread): Add mediaLayerMustBeUpdatedOnMainThread.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::mediaLayerMustBeUpdatedOnMainThread): Ask the client if graphics layers
            should be updated on the main thread.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::mediaLayerMustBeUpdatedOnMainThread): New, check settings to see
            if video plug-in proxy is enabled.
        * rendering/RenderLayerBacking.h:

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

        [MediaControls][iOS] Fix a couple of UI bugs in the iOS Media Controls
        https://bugs.webkit.org/show_bug.cgi?id=127929

        Reviewed by Eric Carlson.

        Two UI bugs in the iOS Media Controls: the text in the controls should use the apple
        system font rather than the webkit small control font, and the buttons in the controls
        are clipped due to an "off by one" error when calculating the SVG image dimensions.

        * Modules/mediacontrols/mediaControlsiOS.css:
        (::-webkit-media-controls):
        (audio::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-time-remaining-display):

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

        Refactor WebVideoFullscreenController separating AVKit from MediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=127762

        Reviewed by Jer Noble.

        Refactor WebVideoFullscreenControllerAVKit implementation into two abstract interfaces with concrete implementations: 
        WebVideoFullscreenModel, WebVideoFullscreenInterface, WebVideoFullscreenModelMediaElement, WebVideoFullscreenInterfaceAVKit.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebVideoFullscreenControllerAVKit.h:
        * platform/ios/WebVideoFullscreenControllerAVKit.mm:
        (-[WebVideoFullscreenController init]):
        (-[WebVideoFullscreenController dealloc]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        * platform/ios/WebVideoFullscreenInterface.h: Copied from Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h.
        (WebCore::WebVideoFullscreenInterface::~WebVideoFullscreenInterface):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Added.
        (WebCore::WebVideoFullscreenInterfaceAVKit::~WebVideoFullscreenInterfaceAVKit):
        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm: Added.
        (NS_ENUM):
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController forwardingTargetForSelector:]):
        (-[WebAVPlayerController playerViewController:shouldDismissWithReason:]):
        (-[WebAVPlayerController play:]):
        (-[WebAVPlayerController pause:]):
        (-[WebAVPlayerController togglePlayback:]):
        (-[WebAVPlayerController isPlaying]):
        (-[WebAVPlayerController setPlaying:]):
        (+[WebAVPlayerController keyPathsForValuesAffectingPlaying]):
        (-[WebAVPlayerController seekToTime:]):
        (:m_videoFullscreenModel):
        (WebVideoFullscreenInterfaceAVKit::setWebVideoFullscreenModel):
        (WebVideoFullscreenInterfaceAVKit::setDuration):
        (WebVideoFullscreenInterfaceAVKit::setCurrentTime):
        (WebVideoFullscreenInterfaceAVKit::setRate):
        (WebVideoFullscreenInterfaceAVKit::setVideoDimensions):
        (WebVideoFullscreenInterfaceAVKit::setVideoLayer):
        (WebVideoFullscreenInterfaceAVKit::enterFullscreen):
        (WebVideoFullscreenInterfaceAVKit::exitFullscreen):
        * platform/ios/WebVideoFullscreenModel.h: Copied from Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h.
        (WebCore::WebVideoFullscreenModel::~WebVideoFullscreenModel):
        * platform/ios/WebVideoFullscreenModelMediaElement.h: Copied from Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.h.
        (WebCore::WebVideoFullscreenModelMediaElement::~WebVideoFullscreenModelMediaElement):
        (WebCore::WebVideoFullscreenModelMediaElement::setWebVideoFullscreenInterface):
        * platform/ios/WebVideoFullscreenModelMediaElement.mm: Added.
        (WebVideoFullscreenModelMediaElement::setMediaElement):
        (WebVideoFullscreenModelMediaElement::handleEvent):
        (WebVideoFullscreenModelMediaElement::requestExitFullScreen):
        (WebVideoFullscreenModelMediaElement::play):
        (WebVideoFullscreenModelMediaElement::pause):
        (WebVideoFullscreenModelMediaElement::togglePlayState):
        (WebVideoFullscreenModelMediaElement::seekToTime):
        (WebVideoFullscreenModelMediaElement::didExitFullscreen):

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

        [MediaControls][iOS] Add a "start load" button.
        https://bugs.webkit.org/show_bug.cgi?id=127861

        Reviewed by Eric Carlson.

        Add a "start load" button which replaces the controls on platforms
        where inline playback is not allowed, or when playback without a
        user gesture is not allowed.

        Add an accessor to MediaControlsHost to query whether inline playback is allowed.:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::mediaPlaybackAllowsInline):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::mediaSession):

        Update the base controller to allow more functions to be overridden:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller):
        (Controller.prototype.shouldHaveAnyUI):
        (Controller.prototype.updateBase):
        (Controller.prototype.setControlsType):
        (Controller.prototype.updateControls):
        (Controller.prototype.handleFullscreenChange):

        Add the new button, and allow for switching between "start", "inline", and "fullscreen" controls:
        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.addVideoListeners):
        (ControllerIOS.prototype.removeVideoListeners):
        (ControllerIOS.prototype.createBase):
        (ControllerIOS.prototype.shouldHaveStartPlaybackButton):
        (ControllerIOS.prototype.shouldHaveControls):
        (ControllerIOS.prototype.shouldHaveAnyUI):
        (ControllerIOS.prototype.createControls):
        (ControllerIOS.prototype.setControlsType):
        (ControllerIOS.prototype.addStartPlaybackControls):
        (ControllerIOS.prototype.removeStartPlaybackControls):
        (ControllerIOS.prototype.updateControls):
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchStart):
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchEnd):
        (ControllerIOS.prototype.handleStartPlaybackButtonTouchCancel):
        (ControllerIOS.prototype.handleReadyStateChange):

        Add the new art:
        * Modules/mediacontrols/mediaControlsiOS.css:
        (audio::-webkit-media-controls-start-playback-button):
        (audio::-webkit-media-controls-start-playback-button.failed):

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

        WebKit2 View Gestures (Swipe): Provide a way for clients to provide views to swipe
        https://bugs.webkit.org/show_bug.cgi?id=127891
        <rdar://problem/15931413>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        A surprising export.

2014-01-30  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=127371
        Explore new API that could be used to help build infinitely scrolling websites
        -and corresponding-
        <rdar://problem/15244768>

        Reviewed by Sam Weinig.

        This patch adds 4 new events called webkitwillrevealbottom, webkitwillrevealtop, 
        webkitwillrevealleft, and webkitwillrevealright. These events will fire when the 
        user has scrolled close to corresponding edge of the document. Right now that is 
        defined to be one viewport away from the corresponding edge. 

        FrameView::scrollPositionChanged() and 
        FrameView::scrollPositionChangedViaPlatformWidget() now take two parameters 
        representing the old scroll position and the new position.
        * WebCore.exp.in:

        New events.
        * dom/Document.h:
        * dom/Document.idl:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/EventNames.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::populateEventNameForAttributeLocalNameMap):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

        Send oldPosition and newPosition to scrollPositionChanged().
        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):

        After sending scroll events, also call sendWillRevealEdgeEventsIfNeeded() to send 
        the see if we should send the new will-reveal events.
        (WebCore::FrameView::scrollPositionChanged):

        Use the old position and the new position to determine if the events should be 
        sent.
        (WebCore::FrameView::sendWillRevealEdgeEventsIfNeeded):

        Send new parameters to scrollPositionChanged().
        (WebCore::FrameView::scrollTo):
        (WebCore::FrameView::wheelEvent):
        * page/FrameView.h:

2014-01-30  Szabolcs David  <davidsz@inf.u-szeged.hu>

        [curl] Improve realm string parsing in WWW-Authenticate headers
        https://bugs.webkit.org/show_bug.cgi?id=127421

        Reviewed by Brent Fulgham.

        The realm string contains quotes at the beginning and end - this is the
        opposite of the libsoup implementation. Furthermore, if the header is
        concatenated from two or more another headers, it contains more incorrect part.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::removeLeadingAndTrailingQuotes):
        (WebCore::getProtectionSpace):

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

        Modernize HTTPHeaderMap iteration
        https://bugs.webkit.org/show_bug.cgi?id=127915

        Reviewed by Andreas Kling.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForHeaders):
        (WebCore::InspectorResourceAgent::willLoadXHR):
        (WebCore::InspectorResourceAgent::replayXHR):
        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isSimpleCrossOriginAccessRequest):
        (WebCore::createAccessControlPreflightRequest):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::responseReceived):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        * loader/cache/CachedRawResource.cpp:
        (WebCore::CachedRawResource::canReuse):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::updateResponseAfterRevalidation):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::addHTTPHeaderFields):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::getAllResponseHeaders):

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

        WebPage::determinePrimarySnapshottedPlugIn is slow
        https://bugs.webkit.org/show_bug.cgi?id=127905

        Reviewed by Anders Carlsson.

        * WebCore.exp.in: New exports
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement>): Add isElementOfType<>

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

        [SOUP] Fix the build if !ENABLE(WEB_TIMING)
        https://bugs.webkit.org/show_bug.cgi?id=127906

        Reviewed by Gustavo Noronha Silva.

        * platform/network/soup/SoupNetworkSession.cpp:

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

        Remove the ACCELERATED_COMPOSITING flag
        https://bugs.webkit.org/show_bug.cgi?id=127833

        Reviewed by Antti Koivisto.

        Remove the USE(ACCELERATED_COMPOSITING) conditionals from the code base and make AC
        mandatory.

        Tests: No new tests, no functional change.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement):
        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::documentWillBecomeInactive):
        (WebCore::Document::documentDidResumeFromPageCache):
        (WebCore::Document::windowScreenDidChange):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::~PseudoElement):
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::CachedFrameBase):
        (WebCore::CachedFrameBase::restore):
        (WebCore::CachedFrame::CachedFrame):
        * history/CachedFrame.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore):
        * history/CachedPage.h:
        * history/PageCache.cpp:
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::markPagesForDeviceScaleChanged):
        * history/PageCache.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paintsIntoCanvasBuffer):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::didDraw):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::reshape):
        (WebCore::WebGLRenderingContext::platformLayer):
        * html/canvas/WebGLRenderingContext.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::pseudoElementDestroyedImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::pseudoElementDestroyed):
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/InstrumentingAgents.h:
        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        (WebCore::Frame::deviceOrPageScaleFactorChanged):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::scheduleLayerFlushAllowingThrottling):
        (WebCore::FrameView::hasCompositedContent):
        (WebCore::FrameView::hasCompositedContentIncludingDescendants):
        (WebCore::FrameView::hasCompositingAncestor):
        (WebCore::FrameView::enterCompositingMode):
        (WebCore::FrameView::isEnclosedInCompositingLayer):
        (WebCore::FrameView::flushCompositingStateIncludingSubframes):
        (WebCore::FrameView::isSoftwareRenderable):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::contentsInCompositedLayer):
        (WebCore::FrameView::scrollContentsFastPath):
        (WebCore::FrameView::scrollContentsSlowPath):
        (WebCore::FrameView::setIsOverlapped):
        (WebCore::FrameView::delegatesScrollingDidChange):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        (WebCore::FrameView::visibleContentsResized):
        (WebCore::FrameView::addedOrRemovedScrollbar):
        (WebCore::FrameView::disableLayerFlushThrottlingTemporarilyForInteraction):
        (WebCore::FrameView::updateLayerFlushThrottlingInAllFrames):
        (WebCore::FrameView::adjustTiledBackingCoverage):
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):
        (WebCore::FrameView::setBackgroundExtendsBeyondPage):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::setTracksRepaints):
        (WebCore::FrameView::resetTrackedRepaints):
        (WebCore::FrameView::setScrollingPerformanceLoggingEnabled):
        (WebCore::FrameView::setExposedRect):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        (WebCore::Page::setDeviceScaleFactor):
        * page/Settings.cpp:
        (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::freezeAtTime):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::supportsAcceleratedAnimationOfProperty):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        (WebCore::CSSPropertyAnimation::blendProperties):
        (WebCore::CSSPropertyAnimation::animationOfPropertyIsAccelerated):
        * page/animation/CSSPropertyAnimation.h:
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        (WebCore::ImplicitAnimation::startAnimation):
        (WebCore::ImplicitAnimation::pauseAnimation):
        (WebCore::ImplicitAnimation::endAnimation):
        (WebCore::ImplicitAnimation::timeToNextService):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        (WebCore::KeyframeAnimation::startAnimation):
        (WebCore::KeyframeAnimation::pauseAnimation):
        (WebCore::KeyframeAnimation::endAnimation):
        (WebCore::KeyframeAnimation::timeToNextService):
        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportOffsetChanged):
        (WebCore::Frame::containsTiledBackingLayers):
        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollPositionAfterAsyncScroll):
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::coordinatesScrollingForFrameView):
        (WebCore::ScrollingCoordinator::computeNonFastScrollableRegion):
        (WebCore::ScrollingCoordinator::verticalScrollbarLayerForScrollableArea):
        (WebCore::ScrollingCoordinator::scrollLayerForFrameView):
        (WebCore::ScrollingCoordinator::headerLayerForFrameView):
        (WebCore::ScrollingCoordinator::footerLayerForFrameView):
        (WebCore::ScrollingCoordinator::counterScrollingLayerForFrameView):
        (WebCore::ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects):
        * page/scrolling/ScrollingCoordinator.h:
        * platform/ScrollView.cpp:
        (WebCore::positionScrollCornerLayer):
        (WebCore::ScrollView::positionScrollbarLayers):
        (WebCore::ScrollView::paintScrollbars):
        (WebCore::ScrollView::paint):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::invalidateScrollbar):
        (WebCore::ScrollableArea::invalidateScrollCorner):
        (WebCore::ScrollableArea::horizontalScrollbarLayerDidChange):
        (WebCore::ScrollableArea::hasLayerForHorizontalScrollbar):
        (WebCore::ScrollableArea::hasLayerForVerticalScrollbar):
        (WebCore::ScrollableArea::hasLayerForScrollCorner):
        * platform/ScrollableArea.h:
        * platform/ScrollbarTheme.h:
        * platform/efl/EflScreenUtilities.cpp:
        (WebCore::applyFallbackCursor):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::~GraphicsContext3DPrivate):
        (WebCore::GraphicsContext3DPrivate::paintToTextureMapper):
        * platform/graphics/GraphicsContext3DPrivate.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayerAnimation.cpp:
        * platform/graphics/GraphicsLayerAnimation.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/GraphicsLayerFactory.h:
        * platform/graphics/GraphicsLayerUpdater.cpp:
        * platform/graphics/GraphicsLayerUpdater.h:
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::platformLayer):
        (WebCore::MediaPlayer::supportsAcceleratedRendering):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/TextTrackRepresentation.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::currentRenderingMode):
        (WebCore::MediaPlayerPrivateAVFoundation::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateAVFoundation::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateAVFoundation::tearDownVideoRendering):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/LayerFlushScheduler.cpp:
        * platform/graphics/ca/LayerFlushScheduler.h:
        * platform/graphics/ca/LayerFlushSchedulerClient.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::copyTimingFunctionsFrom):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::enumerateRectsBeingDrawn):
        * platform/graphics/ca/win/AbstractCACFLayerTreeHost.h:
        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/CACFLayerTreeHost.h:
        * platform/graphics/ca/win/CACFLayerTreeHostClient.h:
        * platform/graphics/ca/win/LayerChangesFlusher.cpp:
        * platform/graphics/ca/win/LayerChangesFlusher.h:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.cpp:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimation::copyTimingFunctionsFrom):
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::drawTile):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/graphics/cairo/DrawingBufferCairo.cpp:
        (WebCore::DrawingBuffer::paintCompositedResultsToCanvas):
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::platformLayer):
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/efl/GraphicsContext3DPrivate.cpp:
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        * platform/graphics/gpu/TilingData.cpp:
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::frontColorBuffer):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm:
        (WebCore::MediaPlayerPrivateIOS::supportsAcceleratedRendering):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::destroyQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::platformLayer):
        (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
        (WebCore::MediaPlayerPrivateQTKit::layerHostChanged):
        (WebCore::MediaPlayerPrivateQTKit::acceleratedRenderingStateChanged):
        (-[WebCoreMovieObserver layerHostChanged:]):
        * platform/graphics/mac/WebGLLayer.h:
        * platform/graphics/mac/WebGLLayer.mm:
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        * platform/graphics/mac/WebTiledLayer.h:
        * platform/graphics/mac/WebTiledLayer.mm:
        * platform/graphics/opengl/GLDefs.h:
        * platform/graphics/opengl/GLPlatformContext.cpp:
        * platform/graphics/opengl/GLPlatformContext.h:
        * platform/graphics/opengl/GLPlatformSurface.cpp:
        * platform/graphics/opengl/GLPlatformSurface.h:
        * platform/graphics/surfaces/GLTransportSurface.cpp:
        * platform/graphics/surfaces/GLTransportSurface.h:
        * platform/graphics/surfaces/glx/GLXConfigSelector.h:
        * platform/graphics/surfaces/glx/GLXContext.cpp:
        * platform/graphics/surfaces/glx/GLXContext.h:
        * platform/graphics/surfaces/glx/GLXSurface.cpp:
        * platform/graphics/surfaces/glx/GLXSurface.h:
        * platform/graphics/texmap/TextureMapper.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperBackingStore.h:
        * platform/graphics/texmap/TextureMapperFPSCounter.cpp:
        * platform/graphics/texmap/TextureMapperFPSCounter.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperLayer.cpp:
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperShaderProgram.cpp:
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperSurfaceBackingStore.h:
        * platform/graphics/texmap/TextureMapperTile.cpp:
        * platform/graphics/texmap/TextureMapperTile.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        * platform/graphics/win/GraphicsContext3DWin.cpp:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerLayoutSublayersOfLayer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::supportsFullscreen):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::platformMedia):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::platformLayer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::naturalSize):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::paint):
        (WebCore::CreateCGImageFromPixelBuffer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::currentRenderingMode):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::hasSetUpVideoRendering):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveAndResetMovieTransform):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::destroyLayerForMovie):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setPrivateBrowsingMode):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/WKCAImageQueue.cpp:
        * platform/graphics/win/WKCAImageQueue.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mac/ScrollbarThemeMac.mm:
        * plugins/PluginViewBase.h:
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        * rendering/FlowThreadController.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange):
        (WebCore::isCandidateForOpaquenessTest):
        (WebCore::layersUseImage):
        (WebCore::RenderBox::imageChanged):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::suspendAnimations):
        (WebCore::RenderBoxModelObject::fixedBackgroundPaintsInLocalCoordinates):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::adjustStyleDifference):
        (WebCore::RenderElement::setStyle):
        (WebCore::RenderElement::styleWillChange):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        * rendering/RenderFlowThread.h:
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::notifyFinished):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::canRender3DTransforms):
        (WebCore::RenderLayer::paintsWithFilters):
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrderRecursive):
        (WebCore::RenderLayer::currentTransform):
        (WebCore::RenderLayer::updateDescendantDependentFlags):
        (WebCore::RenderLayer::checkIfDescendantClippingContextNeedsUpdate):
        (WebCore::RenderLayer::shouldRepaintAfterLayout):
        (WebCore::RenderLayer::enclosingFilterRepaintLayer):
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::clippingRootForPainting):
        (WebCore::RenderLayer::addChild):
        (WebCore::RenderLayer::removeChild):
        (WebCore::RenderLayer::removeOnlyThisLayer):
        (WebCore::RenderLayer::scrollTo):
        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
        (WebCore::RenderLayer::invalidateScrollbarRect):
        (WebCore::RenderLayer::invalidateScrollCornerRect):
        (WebCore::RenderLayer::positionOverflowControls):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        (WebCore::RenderLayer::paintOverflowControls):
        (WebCore::shouldDoSoftwarePaint):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::collectsGraphicsLayersUnderRegions):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::containerForRepaint):
        (WebCore::RenderObject::repaintUsingContainer):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updatePlayer):
        (WebCore::RenderVideo::acceleratedRenderingStateChanged):
        * rendering/RenderVideo.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):
        (WebCore::RenderView::repaintRootContents):
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):
        (WebCore::RenderView::repaintViewAndCompositedLayers):
        (WebCore::RenderView::setMaximalOutlineSize):
        (WebCore::RenderView::compositor):
        (WebCore::RenderView::setIsInWindow):
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::requiresAcceleratedCompositing):
        * rendering/RenderWidget.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer):
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setFooterHeight):

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

        AX: Clean up AccessibilityRenderObject
        https://bugs.webkit.org/show_bug.cgi?id=127838

        Reviewed by Chris Fleizach.

        Reducing some code by implementing ariaElementsFromAttribute.
        It is used as a helper for other methods.

        No new tests. Covered by existing ones.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaElementsFromAttribute):
        (WebCore::AccessibilityRenderObject::ariaFlowToElements):
        (WebCore::AccessibilityRenderObject::ariaDescribedByElements):
        (WebCore::AccessibilityRenderObject::ariaOwnsElements):
        * accessibility/AccessibilityRenderObject.h:

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

        Unreviewed, rolling out r163048.
        http://trac.webkit.org/changeset/163048
        https://bugs.webkit.org/show_bug.cgi?id=127890

        Caused many crashes, detected by EWS prior to landing
        (Requested by ap on #webkit).

        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        (WebCore::MediaControlsHost::displayNameForTrack):
        (WebCore::MediaControlsHost::captionDisplayMode):
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::initUserStyle):
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromDocumentStyleSheetCollection):
        * dom/Document.cpp:
        (WebCore::Document::setCompatibilityMode):
        (WebCore::Document::registerForCaptionPreferencesChangedCallbacks):
        (WebCore::Document::captionPreferencesChanged):
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/DocumentStyleSheetCollection.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::updateDisplay):
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * page/CaptionStyleSheetMediaAF.cpp: Removed.
        * page/CaptionStyleSheetMediaAF.h: Removed.
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::CaptionUserPreferences):
        (WebCore::CaptionUserPreferences::notify):
        (WebCore::CaptionUserPreferences::setCaptionDisplayMode):
        (WebCore::CaptionUserPreferences::userPrefersCaptions):
        (WebCore::CaptionUserPreferences::setUserPrefersCaptions):
        (WebCore::CaptionUserPreferences::userPrefersSubtitles):
        (WebCore::CaptionUserPreferences::setUserPrefersSubtitles):
        (WebCore::CaptionUserPreferences::userPrefersTextDescriptions):
        (WebCore::CaptionUserPreferences::setUserPrefersTextDescriptions):
        (WebCore::CaptionUserPreferences::captionPreferencesChanged):
        (WebCore::CaptionUserPreferences::textTrackSelectionScore):
        (WebCore::CaptionUserPreferences::setCaptionsStyleSheetOverride):
        (WebCore::CaptionUserPreferences::updateCaptionStyleSheetOveride):
        * page/CaptionUserPreferences.h:
        (WebCore::CaptionUserPreferences::captionsStyleSheetOverride):
        (WebCore::CaptionUserPreferences::setInterestedInCaptionPreferenceChanges):
        (WebCore::CaptionUserPreferences::testingMode):
        (WebCore::CaptionUserPreferences::setTestingMode):
        (WebCore::CaptionUserPreferences::pageGroup):
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::userCaptionPreferencesChangedNotificationCallback):
        (WebCore::CaptionUserPreferencesMediaAF::CaptionUserPreferencesMediaAF):
        (WebCore::CaptionUserPreferencesMediaAF::userPrefersCaptions):
        (WebCore::CaptionUserPreferencesMediaAF::userPrefersSubtitles):
        (WebCore::CaptionUserPreferencesMediaAF::setInterestedInCaptionPreferenceChanges):
        (WebCore::CaptionUserPreferencesMediaAF::captionPreferencesChanged):
        (WebCore::CaptionUserPreferencesMediaAF::captionsWindowCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsBackgroundCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextColor):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextColorCSS):
        (WebCore::CaptionUserPreferencesMediaAF::windowRoundedCornerRadiusCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsEdgeColorForTextColor):
        (WebCore::CaptionUserPreferencesMediaAF::cssPropertyWithTextEdgeColor):
        (WebCore::CaptionUserPreferencesMediaAF::colorPropertyCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsTextEdgeCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsDefaultFontCSS):
        (WebCore::CaptionUserPreferencesMediaAF::captionsStyleSheetOverride):
        (WebCore::CaptionUserPreferencesMediaAF::textTrackSelectionScore):
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
        * page/CaptionUserPreferencesMediaAF.h:
        * page/Page.cpp:
        * page/Page.h:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::captionPreferencesChanged):
        (WebCore::PageGroup::captionPreferences):
        * page/PageGroup.h:
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldDisplayTrackKind):
        (WebCore::InternalSettings::shouldDisplayTrackKind):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::Internals):
        (WebCore::Internals::captionsStyleSheetOverride):
        (WebCore::Internals::setCaptionsStyleSheetOverride):
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride):
        (WebCore::Internals::setCaptionDisplayMode):

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

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

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):

2014-01-29  Gavin Barraclough  <barraclough@apple.com>

        Add IsVisibleOrOccluded to ViewState
        https://bugs.webkit.org/show_bug.cgi?id=127875

        Reviewed by Anders Carlsson.

        * page/ViewState.h:
            - added IsVisibleOrOccluded

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

        EventHandler::handleMouseReleaseEvent shouldn't call updateSelectionCachesIfSelectionIsInsideTextFormControl
        and selectFrameElementInParentIfFullySelected
        https://bugs.webkit.org/show_bug.cgi?id=127834

        Reviewed by Alexey Proskuryakov.

        Removed the calls and made setNonDirectionalSelectionIfNeeded pass in UserTriggered option.

        In addition, removed the rather error-prone function override of setSelection since TextGranularity,
        which is an enum, could be implicitly coerced into SetSelectionOptions which is a typedefed unsigned int.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionByMouseIfDifferent): Renamed from setNonDirectionalSelectionIfNeeded.
        Pass in DoNotRevealSelection to avoid revealing the selection to preserve the existing behavior.
        There are two layout tests that fail without this.
        (WebCore::FrameSelection::setSelection): Check the newly addeed DoNotRevealSelection option.
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection): Call

        * editing/FrameSelection.h: Made updateSelectionCachesIfSelectionIsInsideTextFormControl and
        selectFrameElementInParentIfFullySelected private as they are no longer called outside of FrameSelection.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateSelectionForMouseDownDispatchingSelectStart):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent): Removed calls to the functions.

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

        Unreviewed iOS build fix after 163050.

        Import CALayer.h explicitly as (on iOS) it is not included by other headers.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

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

        Unreviewed Mac Build fix after r163046.

        Forward define AVSampleLayerDisplayLayer and its methods.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

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

        CaptionUserPreferences should not be on the PageGroup if they are not really per-PageGroup (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=127666

        Reviewed by Eric Carlson.

        This patch:
        - Makes CaptionUserPreferences a singleton (temporary) that is accessed
          via Page.
        - Simplifies overriding system preferences by requiring that a Document be
          be passed so the correct Settings object can be obtained (and not just a 
          random one).
        - Stops using UserStyleSheets for captions style injection, and instead
          adds a new style sheet to the DocumentStyleSheetCollection.
        - Move caption style sheet creation into its own file - CaptionStyleSheetMediaAF.h/cpp

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * WebCore.exp.in:
        Update exports.

        * css/DocumentRuleSets.cpp:
        * css/InspectorCSSOMWrappers.cpp:
        * dom/Document.cpp:
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/DocumentStyleSheetCollection.h:
        Switch from using the user style sheet mechanism, which is meant for, you guessed it, users,
        to an explicit caption style sheet.

        * Modules/mediacontrols/MediaControlsHost.cpp:
        * html/HTMLMediaElement.cpp:
        * html/shadow/MediaControlElements.cpp:
        Get the CaptionUserPreferences via the Page.

        * page/CaptionStyleSheetMediaAF.cpp: Added.
        * page/CaptionStyleSheetMediaAF.h: Added.
        Move caption style sheet creation here. If the global style changes, the sheet is invalidated
        and this is called again.

        * page/CaptionUserPreferences.cpp:
        * page/CaptionUserPreferences.h:
        - Removes unused m_havePreferences member.
        - Change userPrefersFoo() functions to take a Document&. Use it to check its Settings.
        - Remove setUserPrefersFoo() functions and just set the Settings directly.
        - Move all the testing only pieces together.
        
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/CaptionUserPreferencesMediaAF.h:
        - Extract caption style sheet creation into CaptionStyleSheetMediaAF.h/cpp
        - Stop waiting for an interested party, and just register for appearance change
          notifications right away. Media elements are common enough that this should not
          make a difference.

        * page/Page.cpp:
        (WebCore::Page::updateStyleForAllPagesForCaptionPreferencesChanged):
        Add helper to call captionPreferencesChanged() on all the Pages.

        (WebCore::Page::captionPreferences):
        Add accessor for the CaptionUserPreferences. Currently this returns a singleton, but I plan
        to extract the singleton aspects of it into another class, and leave the per-Page parts here.

        * page/Page.h:
        * page/PageGroup.cpp:
        * page/PageGroup.h:
        Remove CaptionUserPreferences from here.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setShouldDisplayTrackKind):
        (WebCore::InternalSettings::shouldDisplayTrackKind):
        Override the settings for the page directly.

        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::Internals):
        (WebCore::Internals::captionsStyleSheetOverride):
        (WebCore::Internals::setCaptionsStyleSheetOverride):
        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride):
        (WebCore::Internals::setCaptionDisplayMode):
        Get the CaptionUserPreferences via the Page.

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

        [MSE][Mac] In SourceBufferPrivateAVFObjC, only include those headers actually necessary to compile.
        https://bugs.webkit.org/show_bug.cgi?id=127846

        Reviewed by Darin Adler.

        To work around a compile issue, only include those paths containing classes and typedefs
        which are used within SourceBufferPrivateAVFObjC, rather than all of AVFoundation.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

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

        IDB: Fully implement IDBKeyData encoding/decoding
        https://bugs.webkit.org/show_bug.cgi?id=127863

        Rubberstamped by Alexey Proskuryakov.

        * platform/KeyedCoding.h:

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

        * WebCore.exp.in:

2014-01-29  Bem Jones-Bey  <bjonesbe@adobe.com>

        clip-path swaps bottom radii for the inset shape
        https://bugs.webkit.org/show_bug.cgi?id=127859

        Reviewed by Dirk Schulze.

        The bottom right and bottom left radii were passed in the wrong order,
        causing the wrong corner to be clipped in the resultant rendering.

        Test: css3/masking/clip-path-inset-corners.html

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path): Change the parameter order to be
        correct.

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

        [MediaControls][iOS] Hook up the fullscreen button
        https://bugs.webkit.org/show_bug.cgi?id=127850

        Reviewed by Eric Carlson.

        For the fullscreen button, do the same thing we do for the play button: handle touchstart,
        touchend, and touchcancel, and perform the action (i.e., 'click') on touchend.

        * Modules/mediacontrols/mediaControlsiOS.js:
        (ControllerIOS.prototype.createControls): Add listeners for the fullscreenButton.
        (ControllerIOS.prototype.isFullScreen): Override.
        (ControllerIOS.prototype.handleFullscreenButtonClicked): Override.
        (ControllerIOS.prototype.handleFullscreenTouchStart): Added.
        (ControllerIOS.prototype.handleFullscreenTouchEnd): Added.
        (ControllerIOS.prototype.handleFullscreenTouchCancel): Added.

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

        IDB: Opening an existing database is broken
        https://bugs.webkit.org/show_bug.cgi?id=127851

        Reviewed by Tim Hatcher.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::IDBDatabaseBackend):
        (WebCore::IDBDatabaseBackend::didOpenInternalAsync): Remember if this method has completed.
        (WebCore::IDBDatabaseBackend::processPendingCalls): If didOpenInternalAsync hasn’t
          been called yet, then it is incorrect to process any pending calls right now.
        * Modules/indexeddb/IDBDatabaseBackend.h:

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

        This dereference should not actually be necessary, and
        is producing deprecation warnings with newer perls

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

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

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

        Reviewed by Michael Saboff.

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

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

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

        Prepare for accelerated compositing on WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=127843

        Reviewed by Anders Carlsson.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::setupFormData):
        Remove VS2005 warning workaround.
        * WebCore.vcxproj/WebCore.vcxproj:
        Remove StyleCachedImageSet.cpp and CSSImageSetValue.cpp from the Win64 build
        to avoid warnings because they are also included in StyleAllInOne.cpp and
        CSSAllInOne.cpp, respectively.

2014-01-28  Michael Saboff  <msaboff@apple.com>

        Merge the jsCStack branch
        https://bugs.webkit.org/show_bug.cgi?id=127763

        Reviewed by Mark Hahnenberg.

        Changes from http://svn.webkit.org/repository/webkit/branches/jsCStack
        up to changeset 162958.

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

        Fixed the iOS build.

        * bindings/js/JSDOMWindowCustom.cpp: Updated for header renames.

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

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

        Reviewed by Mark Lam.

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

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

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

        Reviewed by Jer Noble.

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

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

        Reviewed by Anders Carlsson.

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

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

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

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

        Reviewed by Tim Horton.

        Move encode/decode from IDBKey to IDBKeyData.

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

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

        * WebCore.exp.in:

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

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

        Reviewed by Anders Carlsson.

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

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

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

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

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

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

        Reviewed by Antti Koivisto.

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

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

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

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

        Reviewed by Gustavo Noronha Silva.

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

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

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

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

        Reviewed by Mario Sanchez Prada.

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

        No new tests. Covered by existed one.

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

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

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

        Reviewed by Antti Koivisto.

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

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

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

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

        Reviewed by Antti Koivisto.

        Renamed notifyRendererOfSelectionChange to updateSelectionCachesIfSelectionIsInsideTextFormControl.

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

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

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

        Reviewed by Eric Carlson.

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

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

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

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

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

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

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

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

        Reviewed by Benjamin Poulain.

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

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

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

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

        Reviewed by Daniel Bates.

        Original patch by Simon Fraser.

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

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

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

        Reviewed by Bem Jones-Bey.

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

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

        Existing tests have been updated.

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

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

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

        Reviewed by Michael Saboff.

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

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

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

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

        Reviewed by Mario Sanchez Prada.

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

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

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Dave Hyatt.

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

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

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

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

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

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

        Reviewed by Darin Adler.

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

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

        Reviewed by Simon Fraser.

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

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

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

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

        Reviewed by Simon Fraser.

        Fixing capitalization.

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

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

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

        Reviewed by Dave Hyatt.

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

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

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

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reviewed by Eric Carlson.

        Initalize m_platformLayerBorrowed to false.

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

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

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

        Reviewed by Eric Carlson.

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

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

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

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

        Reviewed by Brady Eidson.

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

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

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

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

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

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

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

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

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

        Reviewed by Eric Carlson.

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

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

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

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

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Chris Fleizach.

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

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

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

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

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

        Reviewed by Mario Sanchez Prada.

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

        No new tests. Covered by exiting one.

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

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

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

        Reviewed by Ryosuke Niwa.

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

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

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

        Reviewed by Martin Robinson.

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

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

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

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

        Reviewed by Martin Robinson.

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

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

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

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

        Reviewed by Gustavo Noronha Silva.

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

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

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

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

        Reviewed by Simon Fraser.

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

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

        Unreviewed iOS build fix. FALLTHROUGHs for iOS.

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

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

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

        Reviewed by Anders Carlsson.

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

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

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

        Reviewed by Sam Weinig.

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

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

        * WebCore.exp.in:

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

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

        Reviewed by Ryosuke Niwa.

        * Configurations/Base.xcconfig:
        Enable the warning.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Brady Eidson.

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

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

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

        Reviewed by thorton.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        * WebCore.exp.in:

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

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

        * WebCore.exp.in:

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

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

        Reviewed by Alexey Proskuryakov.

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

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

        Update bindings test expectations after r162872

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

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

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

        Reviewed by David Kilzer.

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

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

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

        Reviewed by Eric Carlson.

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

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

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

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

        Reviewed by Sam Weinig.

        * html/DOMURL.idl:

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

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

        This code was only used by the Chromium port.

        Reviewed by Darin Adler.

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


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

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

        Reviewed by David Kilzer.

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

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

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

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

        Reviewed by Darin Adler.

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

        Existing tests have been extended with the new cases.

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

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

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

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

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

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

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

        Reviewed by Tim Horton.

        Move that knowledge to the IDBCursorBackendOperations inside the callback.

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

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

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

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

        Reviewed by Tim Horton.

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

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

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

        Reviewed by Tim Horton.

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


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

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

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

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

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

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

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

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

        Reviewed by Dirk Schulze.

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

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

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

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

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

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

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

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

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

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

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

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

        Reviewed by Philippe Normand.

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

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

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

        Build fix after r162838.

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

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

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

        Reviewed by Sam Weinig.

        Nowadays we throttle layer flushes. This code is unnecessary.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

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

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

        Reviewed by Csaba Osztrogonác.

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

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

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

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

        Reviewed by Zoltan Herczeg.

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

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

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

        * platform/graphics/cg/BitmapImageCG.cpp:

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

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

        Reviewed by Sam Weinig.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Sam Weinig.

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Sam Weinig.

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

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

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

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

        Reviewed by Dan Bernstein.

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

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

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

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

        Reviewed by Dan Bernstein.

        Remove m_lastVisitWasHTTPNonGet, it's only used by WebKit.

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

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

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

        Reviewed by Simon Fraser.

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

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

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

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

        Reviewed by Geoffrey Garen.

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

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

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

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

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

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

        Rubber-stamped by Sam Weinig.

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

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

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

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

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

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

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

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

        Remove dead code from the JSC profiler.

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

        Reviewed by Mark Lam.

        Passes existing tests in fast/profiler.

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Andreas Kling

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

        Covered by existing tests.

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

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

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

        Reviewed by Antti Koivisto.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Sam Weinig.

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

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

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

        Reviewed by Anders Carlsson.

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

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

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

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

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

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

        Reviewed by Anders Carlsson.

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

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

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

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

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Simon Fraser.

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

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

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

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

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

        Reviewed by Andreas Kling.

        Replace atomicIncrement/atomicDecrement with std::atomic.

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

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

        Unreviewed build fix for WinCairo.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

        Reviewed by Timothy Hatcher.

        Covered by existing tests. No change in functionality.

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

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

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

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

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

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

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

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

        Reviewed by Xan Lopez.

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

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

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

        Reviewed by Sam Weinig.

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

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

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

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

        Reviewed by Sam Weinig.

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

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

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

        Reverted r162760. It broke more things.

        * WebCore.exp.in:

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

        Try to fix some 32-bit builds.

        * WebCore.exp.in:

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

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

        Reviewed by Anders Carlsson.

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

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

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

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

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

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

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

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

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

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

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

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

        Reviewed by Simon Fraser.

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

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

        Another attempted build fix.

        Use wildcards in the the std::duration symbol.

        * WebCore.exp.in:

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

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

        Reviewed by Tim Horton.

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

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

        Reviewed by Andreas Kling.

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

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

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

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

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

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

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

        Reviewed by Simon Fraser.

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

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

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

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

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

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

        Reviewed by Geoffrey Garen.

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

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

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

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

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

        Reviewed by Geoffrey Garen.

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

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

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

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

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

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

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

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

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

        Reviewed by Simon Fraser.

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

        No change in behavior.

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

        Reviewed by Mark Hahnenberg.

        No new tests.

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

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

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

        Reviewed by Simon Fraser.

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

        No functional changes.

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

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

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

        Reviewed by Tim Horton.

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

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

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

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

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

        Reviewed by Beth Dakin.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        Fix 32-bit build.

        * WebCore.exp.in:

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

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

        Reviewed by Tim Horton.

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

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

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

        Reviewed by Oliver Hunt.

        Covered by existing tests.

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

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

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

        Reviewed by Antti Koivisto.

        WebCore.exp.in:
        Update symbols.

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

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

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

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

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

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

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

        Reviewed by Geoffrey Garen.

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

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

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

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

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

        Reviewed by Antti Koivisto.

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

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

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

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

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

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

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

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

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

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

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

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

        Reviewed by Tim Horton.

        * WebCore.exp.in: Export a needed CrossThreadCopier

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

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

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

        * bindings/objc/PublicDOMInterfaces.h:

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

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

        Reviewed by Alexey Proskuryakov.

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

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

        * bindings/objc/PublicDOMInterfaces.h:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        Unreviewed GTK build fix after r162663.

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

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

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

        Reviewed by Darin Adler.

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

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

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

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

        Reviewed by David Hyatt.

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

        No change in functionality, just moving code.

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

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

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

        Reviewed by Geoffrey Garen.

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

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

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

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

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

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

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

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

        Reviewed by Anders Carlsson.

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

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

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

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

        Reviewed by Eric Carlson.

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

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

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

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

        Reviewed by Eric Carlson.

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

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

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

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

        Reviewed by Jer Noble.

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

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

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

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

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

        Reviewed by Tim Horton.

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

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

        * WebCore.exp.in:

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

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

        Reviewed by Andy Estes.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Geoffrey Garen.

        Covered by existing tests.

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

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

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

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

        * WebCore.exp.in:
        Update disconnectFrontend symbol.

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

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

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

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

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

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

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

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

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

        Try to fix Windows build.

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

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

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

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

2014-01-20  Myles C. Maxfield  <mmaxfield@apple.com>

       Turn text-decoration-skip: ink on for all underlines
       https://bugs.webkit.org/show_bug.cgi?id=127331

       Reviewed by Antti Koivisto.

       No new tests are necessary because tests already exist

       * rendering/style/RenderStyle.h:

2014-01-23  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape size and position should conform to the spec
        https://bugs.webkit.org/show_bug.cgi?id=123295

        Reviewed by Andreas Kling.

        Implement image valued shape-outside scaling and translation per the spec,
        http://dev.w3.org/csswg/css-shapes/#shapes-from-image:

        "The image is sized and positioned as if it were a replaced element whose
        specified width and height are the same as the element’s used content box size."

        This change doesn't completely fulfill the spec, it's limited to image elements
        and shape-outside.

        Tests: fast/shapes/shape-outside-floats/shape-outside-image-fit-001.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-002.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-003.html
               fast/shapes/shape-outside-floats/shape-outside-image-fit-004.html

        * rendering/shapes/Shape.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createRasterShape):
        Added an imageRect parameter which specifies where the shape image is to
        appear relative to the content box. The imageRect implies both scaling and
        translation of the shape image.

        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        (WebCore::getShapeImageRect):
        For replaced elements, compute the shape's imageRect with
        RenderReplaced::replacedContentRect().


2014-01-23  Max Vujovic  <mvujovic@adobe.com>

        Remove CSS Custom Filters code and tests
        https://bugs.webkit.org/show_bug.cgi?id=127382

        Reviewed by Simon Fraser.

        No new tests. Removing functionality.

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSCSSValueCustom.cpp:
        (WebCore::toJS):
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::filterInfoForName):
        (WebCore::CSSParser::parseFilter):
        (WebCore::CSSParser::detectAtToken):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * css/CSSPropertyNames.in:
        * css/CSSPropertySourceData.h:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        (WebCore::CSSValue::cloneForCSSOM):
        * css/CSSValue.h:
        * css/CSSValueKeywords.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::filterOperationForType):
        (WebCore::StyleResolver::createFilterOperations):
        (WebCore::StyleResolver::loadPendingResources):
        * css/StyleResolver.h:
        (WebCore::StyleResolver::State::State):
        * css/StyleRule.cpp:
        (WebCore::StyleRuleBase::destroy):
        (WebCore::StyleRuleBase::copy):
        (WebCore::StyleRuleBase::createCSSOMWrapper):
        * css/StyleRule.h:
        * css/StyleSheetContents.cpp:
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/WebKitCSSArrayFunctionValue.cpp: Removed.
        * css/WebKitCSSArrayFunctionValue.h: Removed.
        * css/WebKitCSSFilterRule.cpp: Removed.
        * css/WebKitCSSFilterRule.h: Removed.
        * css/WebKitCSSFilterRule.idl: Removed.
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::WebKitCSSFilterValue):
        (WebCore::WebKitCSSFilterValue::customCSSText):
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSMatFunctionValue.cpp: Removed.
        * css/WebKitCSSMatFunctionValue.h: Removed.
        * css/WebKitCSSMixFunctionValue.cpp: Removed.
        * css/WebKitCSSMixFunctionValue.h: Removed.
        * css/WebKitCSSMixFunctionValue.idl: Removed.
        * css/WebKitCSSShaderValue.cpp: Removed.
        * css/WebKitCSSShaderValue.h: Removed.
        * loader/cache/CachedResource.cpp:
        (WebCore::defaultPriorityForResourceType):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::createResource):
        (WebCore::CachedResourceLoader::checkInsecureContent):
        (WebCore::CachedResourceLoader::canRequest):
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedShader.cpp: Removed.
        * loader/cache/CachedShader.h: Removed.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::filtersCanBeComposited):
        * platform/graphics/filters/CustomFilterArrayParameter.h: Removed.
        * platform/graphics/filters/CustomFilterColorParameter.h: Removed.
        * platform/graphics/filters/CustomFilterCompiledProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterCompiledProgram.h: Removed.
        * platform/graphics/filters/CustomFilterConstants.h: Removed.
        * platform/graphics/filters/CustomFilterGlobalContext.cpp: Removed.
        * platform/graphics/filters/CustomFilterGlobalContext.h: Removed.
        * platform/graphics/filters/CustomFilterMesh.cpp: Removed.
        * platform/graphics/filters/CustomFilterMesh.h: Removed.
        * platform/graphics/filters/CustomFilterMeshGenerator.cpp: Removed.
        * platform/graphics/filters/CustomFilterMeshGenerator.h: Removed.
        * platform/graphics/filters/CustomFilterNumberParameter.h: Removed.
        * platform/graphics/filters/CustomFilterOperation.cpp: Removed.
        * platform/graphics/filters/CustomFilterOperation.h: Removed.
        * platform/graphics/filters/CustomFilterParameter.h: Removed.
        * platform/graphics/filters/CustomFilterParameterList.cpp: Removed.
        * platform/graphics/filters/CustomFilterParameterList.h: Removed.
        * platform/graphics/filters/CustomFilterProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterProgram.h: Removed.
        * platform/graphics/filters/CustomFilterProgramClient.h: Removed.
        * platform/graphics/filters/CustomFilterProgramInfo.cpp: Removed.
        * platform/graphics/filters/CustomFilterProgramInfo.h: Removed.
        * platform/graphics/filters/CustomFilterRenderer.cpp: Removed.
        * platform/graphics/filters/CustomFilterRenderer.h: Removed.
        * platform/graphics/filters/CustomFilterTransformParameter.h: Removed.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp: Removed.
        * platform/graphics/filters/CustomFilterValidatedProgram.h: Removed.
        * platform/graphics/filters/FECustomFilter.cpp: Removed.
        * platform/graphics/filters/FECustomFilter.h: Removed.
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/FilterOperations.cpp:
        (WebCore::FilterOperations::outsets):
        * platform/graphics/filters/FilterOperations.h:
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp: Removed.
        * platform/graphics/filters/ValidatedCustomFilterOperation.h: Removed.
        * platform/graphics/filters/texmap/CustomFilterValidatedProgramTextureMapper.cpp: Removed.
        * platform/graphics/filters/texmap/TextureMapperPlatformCompiledProgram.h: Removed.
        * platform/graphics/gpu/Texture.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::getPassesRequiredForFilter):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::clearPendingStateChanges):
        (WebCore::CompositingCoordinator::syncLayerState):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterOperation.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h: Removed.
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::setLayerFiltersIfNeeded):
        (WebCore::CoordinatedGraphicsScene::commitSceneState):
        (WebCore::CoordinatedGraphicsScene::setLayerAnimationsIfNeeded):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::FilterEffectRenderer::FilterEffectRenderer):
        (WebCore::FilterEffectRenderer::build):
        (WebCore::FilterEffectRenderer::computeSourceImageRectForDirtyRect):
        * rendering/FilterEffectRenderer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setFilterBackendNeedsRepaintingInRect):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateFilters):
        * rendering/RenderLayerFilterInfo.cpp:
        (WebCore::RenderLayer::FilterInfo::~FilterInfo):
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderView.cpp:
        * rendering/RenderView.h:
        * rendering/style/StyleCachedShader.cpp: Removed.
        * rendering/style/StyleCachedShader.h: Removed.
        * rendering/style/StyleCustomFilterProgram.cpp: Removed.
        * rendering/style/StyleCustomFilterProgram.h: Removed.
        * rendering/style/StyleCustomFilterProgramCache.cpp: Removed.
        * rendering/style/StyleCustomFilterProgramCache.h: Removed.
        * rendering/style/StylePendingShader.h: Removed.
        * rendering/style/StyleShader.h: Removed.

2014-01-22  Jon Honeycutt  <jhoneycutt@apple.com>

        REGRESSION(r161967): Crash in WebCore::CachedSVGDocumentReference::load
        <https://webkit.org/b/127151>
        <rdar://problem/15840760>

        There were two issues introduced here; the first is a use-after-free of
        CachedSVGDocumentReference objects.

        The previous code kept a map from FilterOperation ->
        RefPtr<WebKitCSSSVGDocumentValue>, which retained the
        CachedSVGDocument. In r161967, this was changed to use a weak HashSet,
        which allows stale CachedSVGDocumentReferences in the pending document
        set if the owning FilterOperation is deleted. To fix this, we'll keep a
        vector of RefPtr<FilterOperation> with pending SVG documents.

        The second issue is a null deref in CachedSVGDocumentReference::load();
        CachedResourceLoader::requestSVGDocument() can return 0 if (for
        example) an invalid URL is passed. r161967 removed a null check as part
        of the refactoring.

        Reviewed by Dirk Schulze.

        Tests: css3/filters/crash-filter-animation-invalid-url.html
               css3/filters/crash-invalid-url.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear):
        Use new member var name.
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        For each FilterOperation with a pending SVG document, get or create a
        CachedSVGDocumentReference, and tell it to load. Changed to use new
        function names.
        (WebCore::StyleResolver::createFilterOperations):
        Append the FilterOperation to the list of FilterOperations with
        unloaded SVG documents.

        * css/StyleResolver.h:
        Changed from using PendingSVGDocumentSet, a weak set, to
        a Vector<RefPtr<ReferenceFilterOperation>>.
        (WebCore::StyleResolver::State::filtersWithPendingSVGDocuments):
        Return the vector.

        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        Null check m_document rather than checking m_loadRequested.
        m_loadRequested may be true when m_document is 0.
        (WebCore::CachedSVGDocumentReference::load):
        Null check the result of CachedResourceLoader::requestSVGDocument().

        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::getOrCreateCachedSVGDocumentReference):
        Create, if necessary, and return the CachedSVGDocumentReference.

        * platform/graphics/filters/FilterOperation.h:
        Replaced createCachedSVGDocumentReference() with
        getOrCreateCachedSVGDocumentReference(), which makes for slightly
        cleaner code.

2014-01-23  Antti Koivisto  <antti@apple.com>

        Don't enable speculative tiles immediately after main load stops progressing
        https://bugs.webkit.org/show_bug.cgi?id=127507

        Reviewed by Andreas Kling.

        It is common for timers and events to trigger more loading after the initial main frame loading
        has completed. We should delay a bit before enabling speculative tiles and keep them disabled 
        if loading still continues.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::adjustTiledBackingCoverage):
        (WebCore::shouldEnableSpeculativeTilingDuringLoading):
        (WebCore::FrameView::enableSpeculativeTilingIfNeeded):
        
            When load progression stops wait 0.5s before enabling speculative tiles.

        (WebCore::FrameView::speculativeTilingEnableTimerFired):
        
            Don't enable speculative tiles if the progression has started again. Instead restart the timer.

        * page/FrameView.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computeTileCoverage):
        
            Move the FrameView level code to FrameView (so we don't need to add a timer to every RenderLayerBacking).

        * rendering/RenderLayerBacking.h:

2014-01-23  Antti Koivisto  <antti@apple.com>

        Loads started soon after main frame completion should be considered part of the main load
        https://bugs.webkit.org/show_bug.cgi?id=127504

        Reviewed by Andreas Kling.

        ProgressTracker currently decides that main load is complete when the main frame stops loading. 
        However it is common that timers and onload events trigger more loads immediately (for example 
        by inserting iframes) and loading continues visually. These should be considered as part of the
        main load for paint throttling and speculative tiling coverage purposes.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::progressStarted):
        
            Track whether this is considered part of the main load or not with a boolean. 
            It is set for subframe loads too if they start loading soon (within 1s) after the main frame load completes.

        (WebCore::ProgressTracker::finalProgressComplete):
        
            Get a timestamp.

        (WebCore::ProgressTracker::isMainLoadProgressing):

            New definition of "main load".

        * loader/ProgressTracker.h:

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=127499

        Reviewed by Brent Fulgham.

        * platform/network/curl/ResourceError.h: Include <winsock2.h> before <curl/curl.h>.

2014-01-23  Brady Eidson  <beidson@apple.com>

        IDB: Implement cross-thread and IPC plumbing for 'get' support
        https://bugs.webkit.org/show_bug.cgi?id=127501

        Reviewed by Anders Carlsson.

        Add isolatedCopy to the IDBGetResult object:
        * Modules/indexeddb/IDBGetResult.h:
        (WebCore::IDBGetResult::isolatedCopy):

        Add a cross-thread and cross-IPC appropriate object for IDBKeyRanges:
        * Modules/indexeddb/IDBKeyRangeData.cpp: Copied from Source/WebCore/Modules/indexeddb/IDBGetResult.h.
        (WebCore::IDBKeyRangeData::isolatedCopy):
        * Modules/indexeddb/IDBKeyRangeData.h: Copied from Source/WebCore/Modules/indexeddb/IDBGetResult.h.
        (WebCore::IDBKeyRangeData::IDBKeyRangeData):

        Add a few more cross-thread copiers:
        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBGetResult>::copy):
        (WebCore::IDBKeyRangeData>::copy):
        * platform/CrossThreadCopier.h:

        Project file gunk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-23  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Adopt new AVStreamDataParser delegate API
        https://bugs.webkit.org/show_bug.cgi?id=127498

        Reviewed by Eric Carlson.

        Adopt a new delegate API which passes in whether or not the new AVAsset
        is discontinuous, implying the AVAsset is entirely new rather than
        just updated with new information.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:withDiscontinuity:]):

2014-01-23  Tim Horton  <timothy_horton@apple.com>

        PDFPlugin: Use PDFPlugin even if there's an external plugin installed, if it's blocked
        https://bugs.webkit.org/show_bug.cgi?id=127415
        <rdar://problem/12482452>

        Reviewed by Sam Weinig.

        * English.lproj/Localizable.strings:
        * WebCore.exp.in:
        * platform/LocalizedStrings.cpp:
        (WebCore::useBlockedPlugInContextMenuTitle):
        * platform/LocalizedStrings.h:
        Add a localizable string for the generic case, where the client
        didn't provide a more specific string for the context menu item.

2014-01-23  peavo@outlook.com  <peavo@outlook.com>

        [Curl] There is no way to specify cache folder.
        https://bugs.webkit.org/show_bug.cgi?id=125028

        Reviewed by Brent Fulgham.

        Fixed logical test, disc cache should be disabled if creating cache folder fails.

        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::setCacheDirectory):

2014-01-23  Brady Eidson  <beidson@apple.com>

        Unreviewed build fix.

        * WebCore.xcodeproj/project.pbxproj: Export the new header so WebKit can see it

2014-01-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Update project and solution files for 64-bit builds
        https://bugs.webkit.org/show_bug.cgi?id=127457

        Reviewed by Eric Carlson.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Update for VS2013
        * WebCore.vcxproj/WebCore.submit.sln: Add x64 targets
        * WebCore.vcxproj/WebCore.vcxproj: Update for VS2013. Also exclude 32-bit specific
        assembly when building 64-bit target.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Update for VS2013
        * config.h: Handle 64-bit type definitions.
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (PlatformCAAnimation::setFromValue): Use CGFloat to support 64-bit builds
        (PlatformCAAnimation::setToValue): Ditto
        (PlatformCAAnimation::setValues): Ditto
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Add cast to
        support 32- and 64-bit targets.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForDocumentMarker): Use CGFloat to
        support 64-bit builds.
        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeURLToDataObject): Specialize std::min to
        work on 32- and 64-bit code.
        (WebCore::createGlobalImageFileDescriptor): Ditto
        * platform/win/StructuredExceptionHandlerSuppressor.cpp:
        (WebCore::StructuredExceptionHandlerSuppressor::StructuredExceptionHandlerSuppressor):
        Comment out 32-bit inline assembly.
        (WebCore::StructuredExceptionHandlerSuppressor::~StructuredExceptionHandlerSuppressor):
        Ditto

2014-01-23  Brady Eidson  <beidson@apple.com>

        Make IDBGetResult work with IDBKeyData instead of IDBKey.
        https://bugs.webkit.org/show_bug.cgi?id=127493

        Reviewed by Eric Carlson.

        Also break it into its own header to work better with IPC messages.

        * Modules/indexeddb/IDBGetResult.h: Added.
        (WebCore::IDBGetResult::IDBGetResult):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):

        * WebCore.xcodeproj/project.pbxproj:

2014-01-23  Mátyás Mustoha  <mmatyas@inf.u-szeged.hu>

        [curl] Add storage limit to cache manager
        https://bugs.webkit.org/show_bug.cgi?id=125779

        Reviewed by Brent Fulgham.

        Sets a local disc storage size limit for the cache manager
        used by the curl network backend.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::isCached):
        (WebCore::CurlCacheEntry::saveCachedData):
        (WebCore::CurlCacheEntry::readCachedData):
        (WebCore::CurlCacheEntry::didFail):
        (WebCore::CurlCacheEntry::didFinishLoading):
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        (WebCore::CurlCacheEntry::entrySize):
        * platform/network/curl/CurlCacheEntry.h:
        (WebCore::CurlCacheEntry::requestHeaders):
        * platform/network/curl/CurlCacheManager.cpp:
        (WebCore::CurlCacheManager::CurlCacheManager):
        (WebCore::CurlCacheManager::setStorageSizeLimit):
        (WebCore::CurlCacheManager::loadIndex):
        (WebCore::CurlCacheManager::saveIndex):
        (WebCore::CurlCacheManager::makeRoomForNewEntry):
        (WebCore::CurlCacheManager::didReceiveResponse):
        (WebCore::CurlCacheManager::didReceiveData):
        (WebCore::CurlCacheManager::invalidateCacheEntry):
        (WebCore::CurlCacheManager::readCachedData):
        * platform/network/curl/CurlCacheManager.h:
        (WebCore::CurlCacheManager::cacheDirectory):

2014-01-23  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix automake warning.

        * GNUmakefile.list.am: Remove trailing whitespaces.

2014-01-23  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix positioning composited layers when the region has overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124042

        Reviewed by Mihnea Ovidenie.

        If there's a clipping GraphicsLayer on the hierarchy, substract its offset, since it's its
        parent that positions us.

        Tests: compositing/regions/position-layer-inside-region-overflow-hidden.html
               compositing/regions/position-layer-inside-overflow-hidden.html
               compositing/regions/position-layers-inside-region-overflow-hidden.html
               compositing/regions/position-layers-inside-regions-overflow-hidden.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): The position
        must also be correct when the region has box-shadow that inflates the region's layer. The
        composited layers from the flow thread should be rendered in the same position whether the
        associated region has clipping or not.
        Using the position of the clipping layer instead of the location of the clipbox makes it
        also work with box-shadow that inflates the region's graphics layer.

2014-01-23  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Convert regions iterator loops to range-based loops
        https://bugs.webkit.org/show_bug.cgi?id=127464

        Reviewed by Antti Koivisto.

        Replace most of the iterator loops in the region implementation with
        range based for loops. The for loops that iterate only over subsets
        of collections have not been changed.

        Tests: no new tests, this is a refactoring patch.

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        (WebCore::WebKitNamedFlow::getContent):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForCSSRegionsHighlight):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::markRegionsForOverflowLayoutIfNeeded):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::collectLayerFragments):
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::clearContentElements):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::RenderNamedFlowThread::computeOversetStateForRegions):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::isContainedInElements):
        (WebCore::RenderNamedFlowThread::getRanges):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2014-01-23  László Langó  <llango.u-szeged@partner.samsung.com>

        Range should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115639

        Reviewed by Ryosuke Niwa.

        http://www.w3.org/TR/2013/WD-dom-20131107/#interface-range
        Now we can do `new Range()` instead of `document.createRange()`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/47ca40efdf58a4787aa33aa75a35778899b1c002%5E%21

        Test: fast/dom/Range/range-constructor.html

        * dom/Range.cpp:
        (WebCore::Range::create):
        * dom/Range.h:
        * dom/Range.idl:

2014-01-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix for gles after r162565. Add missing definitions.

        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::drawArraysInstanced):
        (WebCore::GraphicsContext3D::drawElementsInstanced):
        (WebCore::GraphicsContext3D::vertexAttribDivisor):

2014-01-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] Use GUniquePtr instead of GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=127431

        Reviewed by Martin Robinson.

        GUniquePtr is a template alias of std::unique_ptr with a custom
        deleter that replaces GOwnPtr. GOwnPtr is still used for the cases
        where the output pointer is needed, but it will also be replaced soon.

        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * accessibility/atk/AXObjectCacheAtk.cpp:
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getAttributeSetForAccessibilityObject):
        (accessibilityObjectLength):
        (textExtents):
        (webkitAccessibleTextGetChar):
        (numberOfReplacedElementsBeforeOffset):
        * page/ContextMenuController.cpp:
        * platform/SharedBuffer.h:
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcLoop):
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/geoclue/GeolocationProviderGeoclue.cpp:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::setAudioStreamProperties):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webKitMediaSrcAddSrc):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        (ResourceHandleStreamingClient::wasBlocked):
        (ResourceHandleStreamingClient::cannotShowURL):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::encodeImage):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::getThemeIconFileName):
        (WebCore::Image::loadPlatformResource):
        * platform/gtk/ContextMenuGtk.cpp:
        (WebCore::ContextMenu::itemCount):
        (WebCore::contextMenuItemVector):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::createPlatformMenuItemDescription):
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::setURIList):
        (WebCore::DataObjectGtk::setURL):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::filenameToString):
        (WebCore::fileSystemRepresentation):
        (WebCore::filenameForDisplay):
        (WebCore::pathGetFileName):
        (WebCore::applicationDirectoryPath):
        (WebCore::sharedResourcesPath):
        (WebCore::directoryName):
        (WebCore::listDirectory):
        (WebCore::openTemporaryFile):
        * platform/gtk/GOwnPtrGtk.cpp: Removed.
        * platform/gtk/GOwnPtrGtk.h: Removed.
        * platform/gtk/GUniquePtrGtk.h: Added.
        * platform/gtk/GamepadsGtk.cpp:
        (WebCore::GamepadsGtk::GamepadsGtk):
        * platform/gtk/GtkClickCounter.cpp:
        (WebCore::GtkClickCounter::shouldProcessButtonEvent):
        * platform/gtk/GtkInputMethodFilter.cpp:
        (WebCore::GtkInputMethodFilter::sendCompositionAndPreeditWithFakeKeyEvents):
        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::popUp):
        (WebCore::GtkPopupMenu::typeAheadFind):
        * platform/gtk/LanguageGtk.cpp:
        (WebCore::platformLanguage):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::imageTitle):
        (WebCore::localizedMediaTimeDescription):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::selectionDataToUTF8String):
        (WebCore::PasteboardHelper::getClipboardContents):
        (WebCore::PasteboardHelper::fillSelectionData):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::createGtkActionForMenuItem):
        (WebCore::PopupMenuGtk::show):
        * platform/gtk/WebKitAuthenticationWidget.cpp:
        (webkitAuthenticationWidgetInitialize):
        * platform/network/ResourceHandleInternal.h:
        * platform/network/gtk/CredentialBackingStore.cpp:
        (WebCore::credentialForChallengeAsyncReadyCallback):
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForSession):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        * platform/network/soup/DNSSoup.cpp:
        * platform/network/soup/GUniquePtrSoup.h: Added.
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::failingURI):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::ensureReadBuffer):
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::createSoupRequestAndMessageForHandle):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessageMembers):
        (WebCore::ResourceRequest::updateSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        * platform/network/soup/SoupURIUtils.cpp:
        (WebCore::soupURIToKURL):
        * platform/soup/SharedBufferSoup.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::clearPlatformData):
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        (WebCore::SharedBuffer::hasPlatformData):
        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):

2014-01-22  Simon Fraser  <simon.fraser@apple.com>

        Surround fixedVisibleContentRect code with USE(TILED_BACKING_STORE)
        https://bugs.webkit.org/show_bug.cgi?id=127461

        Reviewed by Andreas Kling.

        The "fixedVisibleContentRect" code path is only used by platforms
        which enabled TILED_BACKING_STORE, so to reduce confusion, surround
        this code with #if USE(TILED_BACKING_STORE).

        * page/Frame.cpp:
        (WebCore::Frame::createView):
        * page/FrameView.cpp:
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::visibleSize):

2014-01-22  Myles C. Maxfield  <mmaxfield@apple.com>

        ASSERTION FAILED: v.isFixed() in WebCore::RenderStyle::setWordSpacing
        https://bugs.webkit.org/show_bug.cgi?id=126987

        Reviewed by Simon Fraser.

        When "inherit" is specified and there is no parent, Length values have an "Auto" type

        Test: fast/css3-text/css3-word-spacing-percentage/word-spacing-crash.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setWordSpacing):

2014-01-22  Samuel White  <samuel_white@apple.com>

        AX: Can't always increment web sliders.
        https://bugs.webkit.org/show_bug.cgi?id=127451

        Reviewed by Chris Fleizach.

        Clamping the decrement/increment amount to one when necessary (if a percent change would result in a change of less than one).

        Test: accessibility/range-alter-by-percent.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::changeValueByPercent):

2014-01-22  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove CSS3_TEXT_DECORATION define
        https://bugs.webkit.org/show_bug.cgi?id=127333

        Reviewed by Simon Fraser.

        This is required for unprefixing the text-decoration-* CSS properties.

        No new tests are necessary becase the flag was already on by default.

        * Configurations/FeatureDefines.xcconfig:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isColorPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::parseTextUnderlinePosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TextUnderlinePosition):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StylePropertyShorthand.cpp:
        (WebCore::webkitTextDecorationShorthand):
        (WebCore::shorthandForProperty):
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeMaxLogicalTop):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStyleToStrokeStyle):
        (WebCore::boundingBoxForAllActiveDecorations):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::maxLogicalTop):
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2014-01-22  Chris Fleizach  <cfleizach@apple.com>

        AX: Do not return an accessible name for an object just because it has tabindex=0
        https://bugs.webkit.org/show_bug.cgi?id=126914

        Reviewed by Mario Sanchez Prada.

        WebKit has code to return an accessible name for any object that is "generically" focusable (ie. tabindex=0).
        This behavior, which is not supported in ARIA, has caused many problems for VoiceOver. Often VoiceOver will
        speak all the text underneath any type of group.

        I think we need to revert this behavior and follow the ARIA spec more closely.

        Test: accessibility/aria-describedby-ensures-visibility.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::visibleText):
        (WebCore::AccessibilityNodeObject::title):

2014-01-22  Brady Eidson  <beidson@apple.com>

        The IDB backing store get() method shouldn't call IDB callbacks directly
        https://bugs.webkit.org/show_bug.cgi?id=127453

        Reviewed by Beth Dakin.

        * Modules/indexeddb/IDBServerConnection.h:
        (WebCore::IDBGetResult::IDBGetResult): Add a new structure to hold all of the
          possible results of a get() call.

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get): Don't call IDBCallbacks directly.
          Instead, return the GetResult to the GetOperation which will make IDBCallbacks.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform): Get all of the IDBGetResults in the completion callback
          make the appropriate IDBCallback.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

2014-01-22  Dean Jackson  <dino@apple.com>

        Unreviewed attempt to fix 32-bit builds.

        Use long long rather than GC3Dintptr.

        * html/canvas/ANGLEInstancedArrays.cpp:
        (WebCore::ANGLEInstancedArrays::drawElementsInstancedANGLE):
        * html/canvas/ANGLEInstancedArrays.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawElementsInstanced):
        * html/canvas/WebGLRenderingContext.h:

2014-01-21  Brady Eidson  <beidson@apple.com>

        IDB: "Put" support
        <rdar://problem/15779643> and https://bugs.webkit.org/show_bug.cgi?id=127401

        Reviewed by Alexey Proskuryakov.

        Add persistent encode/decode for storage to the database:
        * Modules/indexeddb/IDBKey.cpp:
        (WebCore::IDBKey::encode):
        (WebCore::IDBKey::decode):
        * Modules/indexeddb/IDBKey.h:

        Add a data class to represent IDBKey suitable for crossing IPC:
        * Modules/indexeddb/IDBKeyData.cpp: Added.
        (WebCore::IDBKeyData::IDBKeyData):
        (WebCore::IDBKeyData::maybeCreateIDBKey):
        (WebCore::IDBKeyData::isolatedCopy):
        * Modules/indexeddb/IDBKeyData.h: Added.
        (WebCore::IDBKeyData::IDBKeyData):

        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBKeyData>::copy):
        * platform/CrossThreadCopier.h:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-22  Dean Jackson  <dino@apple.com>

        [WebGL] Implement ANGLE_instanced_arrays
        https://bugs.webkit.org/show_bug.cgi?id=127257

        Reviewed by Brent Fulgham.

        Implement the instanced drawing WebGL extension,
        ANGLE_instanced_arrays. This is currently Mac-only,
        but should be portable to other platforms if their
        OpenGL exposes the functions. It's also done in a way
        that will make exposing it to WebGL2 simple.

        Test: fast/canvas/webgl/angle-instanced-arrays.html

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Add the new files to all the build systems.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Link JS side to C++ side.

        * html/canvas/ANGLEInstancedArrays.cpp: Added.
        (WebCore::ANGLEInstancedArrays::ANGLEInstancedArrays):
        * html/canvas/ANGLEInstancedArrays.h: Added.
        * html/canvas/ANGLEInstancedArrays.idl: Added.
        New boilerplate files that expose the extension methods.

        * html/canvas/WebGLExtension.h: New extension enum.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateVertexAttributes): Add an optional
        parameter representing the number of instance primitives we are asked
        to draw. Use that for the draw count if looking at an instanced attribute.
        Also make sure we see at least one non-instanced attribute.
        (WebCore::WebGLRenderingContext::validateDrawArrays): Update this so it could
        be used from either drawArrays or drawArraysInstanced.
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::validateDrawElements): Same here, now can be
        used by the instanced and non-instanced versions.
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::getExtension): Create and return the new extension.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add new extension to the list.
        (WebCore::WebGLRenderingContext::getVertexAttrib): Intercept a query to the divisor
        attribute and return the value we kept in the state.
        (WebCore::WebGLRenderingContext::drawArraysInstanced): Call the GC3D method.
        (WebCore::WebGLRenderingContext::drawElementsInstanced): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttribDivisor): Ditto.

        * html/canvas/WebGLRenderingContext.h: Define the new methods and parameters.

        * html/canvas/WebGLVertexArrayObjectOES.cpp:
        (WebCore::WebGLVertexArrayObjectOES::setVertexAttribDivisor): Keep a record of the
        divisor if we set it.
        * html/canvas/WebGLVertexArrayObjectOES.h:
        (WebCore::WebGLVertexArrayObjectOES::VertexAttribState::VertexAttribState):

        * platform/graphics/GraphicsContext3D.h: New enum.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::drawArraysInstanced): The actual calls into OpenGL.
        (WebCore::GraphicsContext3D::drawElementsInstanced): Ditto.
        (WebCore::GraphicsContext3D::vertexAttribDivisor): Ditto.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Empty implementations
        for non-mac platforms.

        * platform/graphics/ios/GraphicsContext3DIOS.h: Define the iOS names for the
        functions.

2014-01-22  Zalan Bujtas  <zalan@apple.com>

        [CSS Shapes] shape-inside rectangle layout can fail
        https://bugs.webkit.org/show_bug.cgi?id=124784

        Reviewed by Darin Adler.

        Early subpixel rounding/flooring/ceiling can have unwanted
        side effect on the final pixel value. Delay pixel
        conversions as much as possible.

        Existing test is changed to reflect subpixel functionality.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):

2014-01-22  Jochen Eisinger  <jochen@chromium.org>

        Add protocolIsInHTTPFamily for strings and use it where appropriate
        https://bugs.webkit.org/show_bug.cgi?id=127336

        Reviewed by Alexey Proskuryakov.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::parseAttribute):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::CSPSource::schemeMatches):
        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):
        * platform/URL.cpp:
        (WebCore::protocolIsInHTTPFamily):
        * platform/URL.h:

2014-01-22  Zalan Bujtas  <zalan@apple.com>

        Subpixel Layout: SimpleLineLayout needs more position rounding to match InlineFlowBox layout.
        https://bugs.webkit.org/show_bug.cgi?id=127404

        Reviewed by Antti Koivisto.

        In order to produce a CSS pixel perfect layout, SimpleLineLayout needs to
        round line positions to CSS (integral) position similarly to InlineFlowBox.

        Existing tests cover it.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):

2014-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed rollout of r162534, this caused inspector test failures.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsSoon):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsTimerFired):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        (WebCore::WorkerScriptDebugServer::removeListener):
        * inspector/InspectorProfilerAgent.cpp:

2014-01-22  peavo@outlook.com  <peavo@outlook.com>

        Crashes in setTextForIterator
        https://bugs.webkit.org/show_bug.cgi?id=127424

        Reviewed by Brent Fulgham.

        * platform/text/icu/UTextProviderLatin1.cpp:
        (WebCore::uTextLatin1Clone): Provide correct buffer size in utext_setup function call.
        (WebCore::uTextLatin1Access): Give correct buffer size to memset call.
        (WebCore::openLatin1UTextProvider): Ditto.

2014-01-22  Jer Noble  <jer.noble@apple.com>

        [Mac] MediaPlayerPrivateMediaSourceAVFObjC::load ASSERTs on lots of tests
        https://bugs.webkit.org/show_bug.cgi?id=127430

        Reviewed by Eric Carlson.

        When other registered media engines cannot load a URL, the engine selection
        will eventually pick MediaPlayerPrivateMediaSourceAVFObjC and ask it to load
        the URL. Instead of ASSERTing here, simply reject the URL by setting the
        network state to FormatError.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):

2014-01-22  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [EFL][GTK] Get EFL and GTK compiling with ACCESSIBILITY disabled
        https://bugs.webkit.org/show_bug.cgi?id=127119

        Reviewed by Mario Sanchez Prada.

        At build time, the compiler was not able to determine which Timer's constructor to call in AXObjectCache when
        ACCESSIBILITY is not enabled, fixing that.
        Also guarding some members in AccessibilityObject that are only being used by EFL and GTK with ACCESSIBILITY.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXObjectCache):
        * accessibility/AccessibilityObject.h:

2014-01-22  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Refactor calculation of hasRx and hasRy values in SVGPathData
        https://bugs.webkit.org/show_bug.cgi?id=127423

        Reviewed by Darin Adler.

        This is a follow-up on https://bugs.webkit.org/show_bug.cgi?id=127337

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement):

2014-01-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=127409

        Reviewed by Timothy Hatcher.

        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        Remove m_recompileTimer and the recompile soon function.
        We can just recompile immediately in all existing cases.

        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::addListener):
        (WebCore::PageScriptDebugServer::removeListener):
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        (WebCore::PageScriptDebugServer::didAddFirstListener):
        (WebCore::PageScriptDebugServer::didRemoveLastListener):
        Add a "didAddFirstListener" to match "didRemoveLastListener".
        Only recompile functions when we attach the debugger and when
        we detach the last listener.

        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::removeListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        Same thing. Also rearrange the functions to read better.

        * inspector/InspectorProfilerAgent.cpp:
        Use the direct recompile function instead of the removed "soon" version.

2014-01-22  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Improve detecting and handling of SSL client certificate
        https://bugs.webkit.org/show_bug.cgi?id=125006

        Reviewed by Brent Fulgham.

        Add client certificate handling.

        * platform/network/ResourceHandle.h:
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::hasSSLConnectError):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setClientCertificateInfo):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/SSLHandle.cpp:
        (WebCore::addAllowedClientCertificate):
        (WebCore::setSSLClientCertificate):
        * platform/network/curl/SSLHandle.h:

2014-01-22  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] layerOwner in RenderNamedFlowFragment cannot return null
        https://bugs.webkit.org/show_bug.cgi?id=127343

        Reviewed by Sam Weinig.

        RenderNamedFlowFragment::layerOwner cannot return null because regions create stacking
        contexts which create layers.

        No new tests, no functional change.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        * rendering/RenderNamedFlowFragment.h:

2014-01-22  Antti Koivisto  <antti@apple.com>

        Avoid unthrottled layer flushes triggered by RenderLayerCompositor::ensureRootLayer
        https://bugs.webkit.org/show_bug.cgi?id=127426

        Reviewed by Anders Carlsson.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateScrollLayerPosition):
        (WebCore::RenderLayerCompositor::frameViewDidScroll):

            Factor scroll layer position update to a function.

        (WebCore::RenderLayerCompositor::ensureRootLayer):
        
            Stop calling frameViewDidChangeSize/frameViewDidScroll. Instead call the relevent functions
            directly. This avoid unthrottled layer flush that is done when the view actually scrolls.

        * rendering/RenderLayerCompositor.h:

2014-01-22  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] -webkit-background-blend-mode fails for certain SVG files
        https://bugs.webkit.org/show_bug.cgi?id=127350

        Reviewed by Dirk Schulze.

        The graphics context of the SVG inherits the blend mode set
        on the background layer. Fix consists in drawing the SVG
        in a transparency layer.

        Test: css3/compositing/background-blend-mode-svg.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::draw): Begin a transparency layer if a blend mode is set.

2014-01-22  Antti Koivisto  <antti@apple.com>

        Update overlay scrollbars in single pass
        https://bugs.webkit.org/show_bug.cgi?id=127289

        Reviewed by Anders Carlsson.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        
            Multi-pass scrollbar resolution is only needed for traditional scrollbars. Overlay scrollbars don't affect layout.

2014-01-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect layout of a region pseudo children
        https://bugs.webkit.org/show_bug.cgi?id=126146

        Reviewed by David Hyatt.

        Test: fast/regions/collapse-anonymous-region.html

        A region behaviour, styled using -webkit-flow-from, is modeled using an anonymous
        block created to fragment the named flow content inside the region. We have to prevent
        the behaviour of anonymous children collapsing for this block to make sure that the
        region element children are still laid out properly when the region element becomes an ordinary
        element.

        * rendering/RenderBlockFlow.h:

2014-01-21  Ryuan Choi  <ryuan.choi@samsung.com>

        Remove unused "acceleratedCompositingForScrollableFramesEnabled" setting
        https://bugs.webkit.org/show_bug.cgi?id=127402

        Reviewed by Anders Carlsson.

        compositing/iframes/iframe-composited-scrolling.html is updated because
        there are no usages in WebCore.

        * page/Settings.in:

2014-01-21  Alex Christensen  <achristensen@webkit.org>

        Compile fix for using libsoup on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=127377

        Reviewed by Daniel Bates.

        * platform/network/soup/ProxyResolverSoup.cpp:
        (soupProxyResolverWkSetProperty):
        (soupProxyResolverWkGetProperty):
        (soupProxyResolverWkGetProxyURISync):
        Replaced uint with unsigned.

2014-01-21  Daniel Bates  <dabates@apple.com>

        Break up single assertion into two assertions in HTMLMediaElement::returnPlatformLayer()

        Following up after <http://trac.webkit.org/changeset/162473>, we should break up
        the assertion into two assertions as suggested by Darin Adler. Separating the single
        assertion into two assertions makes it straightforward to determine the conjunct that
        failed among other benefits.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-21  Brady Eidson  <beidson@apple.com>

        The IDB backing store put() method shouldn't call IDB callbacks directly
        https://bugs.webkit.org/show_bug.cgi?id=127399

        Reviewed by Beth Dakin.

        Refactor the put() callback to take a resulting key or an error.
        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform): Call to the backing store, then perform the
          appropriate IDB callback whether a key or an error was returned.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::put): Don’t call IDB callbacks directly.
          Instead, pass the resulting key/error back to the PutOperation.
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2014-01-21  Jae Hyun Park  <jae.park@company100.net>

        Use nullptr in HTMLCanvasElement
        https://bugs.webkit.org/show_bug.cgi?id=127388

        Reviewed by Gyuyoung Kim.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::drawingContext):
        (WebCore::HTMLCanvasElement::existingDrawingContext):

2014-01-21  László Langó  <llango.u-szeged@partner.samsung.com>

        Assertion failure in Range::nodeWillBeRemoved
        https://bugs.webkit.org/show_bug.cgi?id=121694

        Reviewed by Ryosuke Niwa.

        Based on Blink a change: https://chromium.googlesource.com/chromium/blink/+/407c1d7b2c45974aa614b3f847ffe9e8fce205fa

        This patch fix an assertion failure. Range::nodeWillBeRemoved() might
        be called with removed node in ContainerNode, when DOMNodeRemovedFromDocument
        event handler calls removeChild(), for node being removed.

        Test: fast/dom/Range/remove-twice-crash.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::willRemoveChild):
        * dom/ContainerNode.h:

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r161580): Some PDFs render outside their <img>
        https://bugs.webkit.org/show_bug.cgi?id=127381
        <rdar://problem/15872168>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::transformContextForPainting):
        Only try to make the scale uniform if it isn't already, and use the minimum
        of the two original scales when doing so, so that it is absolutely certain
        to fit inside space allocated for the image during layout.

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Remove #if PLATFORM(IOS) in various places around customFixedPositionLayoutRect() code
        https://bugs.webkit.org/show_bug.cgi?id=127373

        Reviewed by Beth Dakin.

        Instead of PLATFORM(IOS) #idefs at every call site for viewportConstrainedVisibleContentRect(),
        move the #ifdef inside viewportConstrainedVisibleContentRect().
        
        The one call site that needs special handling is RenderLayerBacking::updateCompositedBounds(),
        which needs to avoid clipping fixed layers to the custom fixed position rect, but instead to
        visibleContentRect() (which is really the document bounds on iOS). This ensures that the
        fixed layers aren't clipped when zooming out.

        * page/FrameView.cpp:
        (WebCore::FrameView::viewportConstrainedVisibleContentRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateCompositedBounds):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints):
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints):

2014-01-21  Andy Estes  <aestes@apple.com>

        [iOS] Allow all clients to link against WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127372
        
        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:

2014-01-21  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Preserve box-shape order when serializing shape values
        https://bugs.webkit.org/show_bug.cgi?id=127200

        Reviewed by Dirk Schulze.

        Convert the parsed shape-box pair to a CSSValueList rather than directly
        adding the box value to BasicShape. The CSSValueList preserves the
        shape-box ordering, and cleans up a little bit of the code shared between
        clip and shape values.

        Modifying existing parsing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::shapePropertyValue): Factor out code common to generating shape
        values.
        (WebCore::ComputedStyleExtractor::propertyValue): Generate a CSSValueList when
        you have both a shape and a box.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeAndOrBox): Factor out code common to clip
        paths and shape properties that parses the [basic-shape || box] syntax from
        the CSS Shapes spec.
        (WebCore::CSSParser::parseShapeProperty): Parse shape-box pairs as a CSSValueList.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Use the CSSValueList for shape-box pairs.
        * css/CSSValueList.h:
        (WebCore::CSSValueList::itemWithoutBoundsCheck): Add a const version.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Specify a box when blending.
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createShapeValue): Add a box parameter.
        (WebCore::ShapeValue::ShapeValue): Ditto.

2014-01-21  Daniel Bates  <dabates@apple.com>

        Fix the iOS Simulator release build

        Substitute ASSERT_UNUSED() for ASSERT() to resolve a compiler warning
        that the argument platformLayer is unused. The argument platformLayer
        is only used in the asserted condition, which isn't compiled in a
        release build; => the argument is unused in a release build.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-21  Zoltan Horvath  <zoltan@webkit.org>

        Since MidpointState is a class, it should behave like a class
        https://bugs.webkit.org/show_bug.cgi?id=127154

        Reviewed by David Hyatt.

        I modified MidpointState to behave like a class, updated the call sites also.

        No new tests, no behavior change.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::reset):
        (WebCore::MidpointState::startIgnoringSpaces):
        (WebCore::MidpointState::stopIgnoringSpaces):
        (WebCore::MidpointState::midpoints):
        (WebCore::MidpointState::numMidpoints):
        (WebCore::MidpointState::currentMidpoint):
        (WebCore::MidpointState::incrementCurrentMidpoint):
        (WebCore::MidpointState::decreaseNumMidpoints):
        (WebCore::MidpointState::betweenMidpoints):
        (WebCore::MidpointState::setBetweenMidpoints):
        (WebCore::MidpointState::addMidpoint): Renamed from deprecatedAddMidpoint, since now
        its private, we no longer need to discourage callers from using it.
        * rendering/InlineIterator.h:
        (WebCore::IsolateTracker::addFakeRunIfNecessary):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::checkMidpoints):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162452.
        http://trac.webkit.org/changeset/162452
        https://bugs.webkit.org/show_bug.cgi?id=127366

        broke a few tests on all Mac WebKit1 bots (Requested by
        thorton on #webkit).

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::setIsVisuallyIdle):
        (WebCore::Page::setIsVisible):
        (WebCore::Page::visibilityState):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):

2014-01-21  Chris Fleizach  <cfleizach@apple.com>

        AX: Mac: Expose the visible text of a password field to AX
        https://bugs.webkit.org/show_bug.cgi?id=127353

        Reviewed by Brent Fulgham.

        The Mac platform should now expose the rendered value of password fields through AX.

        Test: accessibility/password-field-value.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textLength):
        (WebCore::AccessibilityRenderObject::passwordFieldValue):

2014-01-21  Robert Sipka  <sipka@inf.u-szeged.hu>

        Support SSL error handling in case of synchronous job.
        https://bugs.webkit.org/show_bug.cgi?id=125301

        Reviewed by Brent Fulgham.

        Set ssl error informations for the users.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Export systemTotalMemory() and systemMemoryLevel() for MobileSafari
        https://bugs.webkit.org/show_bug.cgi?id=127360

        Reviewed by Andy Estes.
        
        MobileSafari inappropriately calls these WebCore functions directly,
        so export them.

        * WebCore.exp.in:

2014-01-21  Simon Fraser  <simon.fraser@apple.com>

        Clean up PLATFORM(IOS) code related to the custom fixed position layout rect
        https://bugs.webkit.org/show_bug.cgi?id=127362

        Reviewed by Dave Hyatt.

        Various platforms customize the rect used to layout position:fixed elements,
        and each modified RenderBox::availableLogicalHeight/WidthUsing() in different
        ways.
        
        Clean this up by adding RenderView::clientLogicalWidth/HeightForFixedPosition(),
        and moving the platform hacks into it.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::clientLogicalWidthForFixedPosition):
        (WebCore::RenderView::clientLogicalHeightForFixedPosition):
        * rendering/RenderView.h:

2014-01-21  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        ASSERT(time.isFinite()) in SVGSMILElement::createInstanceTimesFromSyncbase
        <https://webkit.org/b/108184>

        Reviewed by Philip Rogers.

        In the case a SMILElement timing had a syncbase dependency on an indefinite value
        the assert were raised. The assert has been removed and a check has been added
        instead that prevents the addition of indefinite times to the time list.

        Test: svg/animations/smil-syncbase-self-dependency.svg

        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::createInstanceTimesFromSyncbase):
          ASSERT removed.

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        Address late review naming comments after r162453.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/mac/CALayerWebAdditions.h: Removed.
        * platform/graphics/mac/CALayerWebAdditions.mm: Removed.
        * platform/graphics/mac/WebCoreCALayerExtras.h: Added.
        * platform/graphics/mac/WebCoreCALayerExtras.mm: Added.
        (-[CALayer web_disableAllActions]):

2014-01-21  Tim Horton  <timothy_horton@apple.com>

        Keep CALayer implicit animation disabling code in a single place
        https://bugs.webkit.org/show_bug.cgi?id=127355

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        Add CALayerWebAdditions.{h,mm}.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::commonInit):
        Remove nullActionsDictionary() and use [CALayer(WebAdditions) web_disableAllActions] instead.

        * platform/graphics/mac/CALayerWebAdditions.h: Added.
        * platform/graphics/mac/CALayerWebAdditions.mm: Added.
        (-[CALayer web_disableAllActions]):
        Added. Disable all implicit actions on the layer.

2014-01-21  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

2014-01-21  Lauro Neto  <lauro.neto@openbossa.org>

        Remove PLATFORM(NIX) from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127299

        Reviewed by Anders Carlsson.

        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * html/HTMLCanvasElement.h:
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::defaultObjectContentType):
        * page/ChromeClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/LocalizedStrings.h:
        * platform/Widget.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFElevation.cpp:
        * platform/cairo/WidgetBackingStore.h:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):
        * platform/graphics/GLContext.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DPrivate.cpp:
        (WebCore::GraphicsContext3DPrivate::GraphicsContext3DPrivate):
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/OpenGLShims.cpp:
        (WebCore::getProcAddress):
        * platform/graphics/OpenGLShims.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::createVertexArrayOES):
        (WebCore::Extensions3DOpenGL::deleteVertexArrayOES):
        (WebCore::Extensions3DOpenGL::isVertexArrayOES):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::reshape):
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/network/ResourceHandle.h:
        * plugins/PluginPackage.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/PluginViewNone.cpp:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2014-01-21  Eric Carlson  <eric.carlson@apple.com>

        Add &lrm; &rlm; and &nbsp; to WebVTT parser
        https://bugs.webkit.org/show_bug.cgi?id=85112

        Reviewed by Jer Noble.

        No new tests, track-webvtt-tc022-entities.html was updated to test this.

        * html/track/WebVTTTokenizer.cpp:
        (WebCore::WebVTTTokenizer::nextToken): Support RLM, LRM, and NBSP entities.

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162354.
        http://trac.webkit.org/changeset/162354
        https://bugs.webkit.org/show_bug.cgi?id=127354

        Appears to have broken accessibility in a non-trivial way
        (Requested by ap on #webkit).

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2014-01-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162445.
        http://trac.webkit.org/changeset/162445
        https://bugs.webkit.org/show_bug.cgi?id=127351

        It broke the 32 bit GTK build (Requested by Ossy on #webkit).

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-21  László Langó  <llango.u-szeged@partner.samsung.com>

        Wrong struct size when CSS_IMAGE_ORIENTATION and CSS3_TEXT_DECORATION are enabled.
        https://bugs.webkit.org/show_bug.cgi?id=127346

        Efl build fix.

        Reviewed by Csaba Osztrogonác.

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-21  Antti Koivisto  <antti@apple.com>

        Delay initial layer flush during loading on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=127347

        Reviewed by Andreas Kling.

        To reduce unnecessary repaints enable the same behaviour as iOS already has.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        
            Set the initial state of m_layerFlushThrottlingEnabled correctly.

        (WebCore::RenderLayerCompositor::scheduleLayerFlush):
        (WebCore::RenderLayerCompositor::startInitialLayerFlushTimerIfNeeded):
        * rendering/RenderLayerCompositor.h:
        
            Enable initial layer flush delay on all platforms.

2014-01-21  Mihai Tica  <mitica@adobe.com>

        If you set a tiled cross-faded-image or a tiled gradient as
        a background layer, -webkit-background-blend-mode doesn't work.
        The problem consists in the blendMode parameter not being set
        for these specific drawing paths.

        https://bugs.webkit.org/show_bug.cgi?id=126888
        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-tiled-layers.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern): Add the blendMode parameter and pass it to ImageBuffer::drawPattern.
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::drawPattern): Add the blendMode parameter and pass it to ImageBuffer::drawPattern.
        * platform/graphics/ImageBuffer.h: Add a BlendMode parameter to the drawPattern method.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawPattern): Add the default BlendMode parameter to the method declaration.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::drawPattern): Add and use the blendMode parameter for all the code paths.
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::BufferedImage::drawPattern): Add the default BlendMode parameter to the method declaration.

2014-01-21  Gurpreet Kaur  <k.gurpreet@samsung.com>

        The WebCore.vcxproj.filters doesnot apply
        https://bugs.webkit.org/show_bug.cgi?id=127338

        Reviewed by Csaba Osztrogonác.

        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Modified the WebCore.vcxproj.filters so that it is applied when loading
        WebCore.vcxproj file.

2014-01-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix SVG animations which set rx or ry attributes
        https://bugs.webkit.org/show_bug.cgi?id=127337

        Reviewed by Dirk Schulze.

        Test: svg/stroke/animated-non-scaling-rxry.html

        Merged from Blink: https://src.chromium.org/viewvc/blink?revision=152376&view=revision

        * rendering/svg/RenderSVGRect.cpp:
        (WebCore::RenderSVGRect::updateShapeFromElement):
        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromRectElement):

2014-01-21  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-flowto through ATK_RELATION_FLOWS_TO
        https://bugs.webkit.org/show_bug.cgi?id=127291

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/aria-flowto.html

        Expose aria-flowto through ATK_RELATION_FLOWS_TO according to
        http://www.w3.org/TR/wai-aria-implementation/#mapping_state-property

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkRelationSetFromCoreObject):

2014-01-20  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Remove Nix from CMake scripts
        https://bugs.webkit.org/show_bug.cgi?id=127264

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Remove an unused PageGroup function
        https://bugs.webkit.org/show_bug.cgi?id=127327

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/PageGroup.cpp:
        * page/PageGroup.h:

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Move user style sheet handling to UserContentController
        https://bugs.webkit.org/show_bug.cgi?id=127322
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::updateInjectedStyleSheetCache):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserStyleSheet):
        (WebCore::UserContentController::removeUserStyleSheet):
        (WebCore::UserContentController::removeUserStyleSheets):
        (WebCore::UserContentController::removeAllUserContent):
        (WebCore::UserContentController::invalidateInjectedStyleSheetCacheInAllFrames):
        * page/UserContentController.h:
        (WebCore::UserContentController::userStyleSheets):

2014-01-20  Benjamin Poulain  <benjamin@webkit.org>

        Add a nicer way to iterate over all the attributes of an element
        https://bugs.webkit.org/show_bug.cgi?id=127266

        Reviewed by Geoffrey Garen.

        When using Element::attributeAt() in a loop, the compiler had to generate two kinds of
        accessor:
        -If the element data is unique, the length and data comes from the attribute Vector.
        -If the element data is shared, the data comes from the tail of elementData itself.

        The choice was done for every access, which caused the assembly to be a little
        hard to follow.
        This patch unify the data access by doing everything as a array pointer with offset (getting
        that data from Vector when necessary).

        To make it easier to do the right thing, a new iterator was added so that range-based loops
        can replace all the faulty cases.

        * css/SelectorChecker.cpp:
        (WebCore::anyAttributeMatches):
        * css/SelectorChecker.h:
        (WebCore::SelectorChecker::checkExactAttribute):
        * dom/DatasetDOMStringMap.cpp:
        (WebCore::DatasetDOMStringMap::getNames):
        (WebCore::DatasetDOMStringMap::item):
        (WebCore::DatasetDOMStringMap::contains):
        * dom/Element.cpp:
        (WebCore::Element::normalizeAttributes):
        (WebCore::Element::detachAllAttrNodesFromElement):
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Element.h:
        (WebCore::Element::attributesIterator):
        * dom/ElementData.cpp:
        (WebCore::ElementData::isEquivalent):
        (WebCore::ElementData::findAttributeIndexByNameSlowCase):
        * dom/ElementData.h:
        (WebCore::AttributeConstIterator::AttributeConstIterator):
        (WebCore::AttributeConstIterator::operator*):
        (WebCore::AttributeConstIterator::operator->):
        (WebCore::AttributeConstIterator::operator++):
        (WebCore::AttributeConstIterator::operator==):
        (WebCore::AttributeConstIterator::operator!=):
        (WebCore::AttributeIteratorAccessor::AttributeIteratorAccessor):
        (WebCore::AttributeIteratorAccessor::begin):
        (WebCore::AttributeIteratorAccessor::end):
        (WebCore::ElementData::attributesIterator):
        * dom/Node.cpp:
        (WebCore::Node::isDefaultNamespace):
        (WebCore::Node::lookupNamespaceURI):
        (WebCore::Node::lookupNamespacePrefix):
        (WebCore::Node::compareDocumentPosition):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::makePresentationAttributeCacheKey):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::appendElement):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        (WebCore::StyledMarkupAccumulator::appendElement):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parametersForPlugin):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::innerPatchNode):
        (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setAttributesAsText):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::matchesElement):
        * page/PageSerializer.cpp:
        (WebCore::isCharsetSpecifyingNode):
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2014-01-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Do refactor in collectGradientAttributes() and renderStyleForLengthResolve()
        https://bugs.webkit.org/show_bug.cgi?id=126869

        Reviewed by Dirk Schulze.

        Some SVG functions have done a first iteration by using a boolean flag. This is
        one of poor implementations. This patch fix it by extracting a logic into a new method.
        Additionally it would be good to use do-while() loop instead of using while() in
        renderStyleForLengthResolving() because a first condition is always true.

        Merge r165358 from blink.

        * svg/SVGLengthContext.cpp:
        (WebCore::renderStyleForLengthResolving):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::setGradientAttributes):
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        UserContentController should keep track of user scripts
        https://bugs.webkit.org/show_bug.cgi?id=127317
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        Move handling of user scripts from PageGroup to UserContentController.

        * page/Frame.cpp:
        (WebCore::Frame::injectUserScripts):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::removeUserScriptFromWorld):
        (WebCore::PageGroup::removeUserScriptsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addUserScript):
        (WebCore::UserContentController::removeUserScript):
        (WebCore::UserContentController::removeUserScripts):
        (WebCore::UserContentController::removeAllUserContent):
        * page/UserContentController.h:
        (WebCore::UserContentController::userScripts):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Give each page a UserContentController
        https://bugs.webkit.org/show_bug.cgi?id=127315
        <rdar://problem/15861296>

        Reviewed by Andreas Kling.

        Add a UserContentController object to PageGroup and have the page group set it on any
        pages that are added to the page group.

        This is another step towards moving handling of user content away from PageGroup and make it
        possible for each page to have different user content.

        * page/Page.cpp:
        (WebCore::Page::~Page):
        (WebCore::Page::setUserContentController):
        * page/Page.h:
        (WebCore::Page::userContentController):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::addPage):
        (WebCore::PageGroup::removePage):
        * page/PageGroup.h:
        * page/UserContentController.cpp:
        (WebCore::UserContentController::addPage):
        (WebCore::UserContentController::removePage):
        * page/UserContentController.h:

2014-01-20  Jeremy Jones  <jeremyj@apple.com>

        Add AVKit fullscreen video interface.
        https://bugs.webkit.org/show_bug.cgi?id=126818

        Reviewed by Eric Carlson.

        No new tests, no observable change in functionality.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        Add ability for fullscreen to borrow the AVPlayerLayer.
        * page/Settings.cpp:
        * page/Settings.h:
        (WebCore::Settings::setMediaPlaybackFullscreenAVKit):
        (WebCore::Settings::mediaPlaybackFullscreenAVKit):
        Add a disabled setting.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::supportsFullscreen):
        Enabled fullscreen for iOS.
        * platform/ios/WebVideoFullscreenControllerAVKit.h: Added.
        * platform/ios/WebVideoFullscreenControllerAVKit.mm: Added.
        (-[WebAVPlayerController init]):
        (-[WebAVPlayerController dealloc]):
        (-[WebAVPlayerController forwardingTargetForSelector:]):
        (-[WebAVPlayerController shouldDismissForDone]):
        (-[WebAVPlayerController play:]):
        (-[WebAVPlayerController pause:]):
        (-[WebAVPlayerController togglePlayback:]):
        (-[WebAVPlayerController isPlaying]):
        (-[WebAVPlayerController setPlaying:]):
        (+[WebAVPlayerController keyPathsForValuesAffectingPlaying]):
        (-[WebAVPlayerController seekToTime:]):
        (-[WebAVPlayerController updateTimingWithCurrentTime:]):
        (-[WebAVPlayerController effectiveRate]):
        (-[WebAVPlayerController setMediaElement:]):
        (-[WebAVPlayerController handleEvent:]):
        (-[WebVideoFullscreenController init]):
        (-[WebVideoFullscreenController dealloc]):
        (-[WebVideoFullscreenController setMediaElement:]):
        (-[WebVideoFullscreenController mediaElement]):
        (-[WebVideoFullscreenController enterFullscreen:]):
        (-[WebVideoFullscreenController exitFullscreen]):
        Add WebAVPlayerController for HTMLMediaElememt to interface with AVPlayerViewController.

2014-01-20  Zan Dobersek  <zdobersek@igalia.com>

        Replace uses of std::forward<T>(), std::unique_ptr<T>::clear() that landed in r162368
        https://bugs.webkit.org/show_bug.cgi?id=127306

        Reviewed by Darin Adler.

        Address the post-landing reviews of the r162368 commit that moved WebAudio source code to using std::unique_ptr.
        std::move() should be used instead of std::forward<T>() in HRTFKernel::create().
        Instead of calling std::unique_ptr<T>::reset(), nullptr should be assigned to that smart pointer to reset it.

        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::uninitialize):
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::uninitialize):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::uninitialize):
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::set):
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):

2014-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Modernize WebCore/inspector with nullptr
        https://bugs.webkit.org/show_bug.cgi?id=127303

        Reviewed by Anders Carlsson.

        Ran clang-modernize -use-nullptr over WebCore/inspector.

        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::findMagicComment):
        * inspector/DOMEditor.cpp:
        (WebCore::DOMEditor::SetOuterHTMLAction::SetOuterHTMLAction):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::assertFrameWithDocumentLoader):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::disable):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::disable):
        (WebCore::InspectorDOMDebuggerAgent::discardAgent):
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::~InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::setDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::removeDOMStorageItem):
        (WebCore::InspectorDOMStorageAgent::findStorageArea):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::~InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::findByFileName):
        (WebCore::InspectorDatabaseAgent::databaseForId):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::addMessageToConsole):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::InspectorFrontendHost::InspectorFrontendHost):
        (WebCore::InspectorFrontendHost::disconnectClient):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::~InspectorHeapProfilerAgent):
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::assertDocument):
        (WebCore::assertIDBFactory):
        (WebCore::InspectorIndexedDBAgent::requestData):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::frameForScriptExecutionContext):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::didReceiveResourceResponseButCanceledImpl):
        (WebCore::InspectorInstrumentation::consoleAgentEnabled):
        (WebCore::InspectorInstrumentation::unregisterInstrumentingAgents):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForPage):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForWorkerGlobalScope):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForNonDocumentContext):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::instrumentingAgentsForContext):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForFrame):
        (WebCore::InspectorInstrumentation::instrumentingAgentsForDocument):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::disable):
        * inspector/InspectorNodeFinder.cpp:
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::cachedResourceContent):
        (WebCore::InspectorPageAgent::sharedBufferContent):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::frameForId):
        (WebCore::InspectorPageAgent::findFrameWithSecurityOrigin):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorStyleSheet.cpp:
        (ParsedStyleSheet::ruleSourceDataAt):
        (WebCore::buildSourceRangeObject):
        (WebCore::asCSSRuleList):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::InspectorStyle::extractSourceData):
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::styleForId):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::asProtocolValue):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::willComposite):
        (WebCore::InspectorTimelineAgent::page):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::~InspectorWorkerAgent):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        (WebCore::InstrumentingAgents::reset):
        * inspector/NetworkResourcesData.cpp:
        (WebCore::NetworkResourcesData::ResourceData::ResourceData):
        (WebCore::NetworkResourcesData::xhrReplayData):
        (WebCore::NetworkResourcesData::removeCachedResource):
        (WebCore::NetworkResourcesData::resourceDataForRequestId):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::~PageConsoleAgent):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::disable):
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::~PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::globalState):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::~WorkerRuntimeAgent):

2014-01-20  Anders Carlsson  <andersca@apple.com>

        Add empty UserContentController class
        https://bugs.webkit.org/show_bug.cgi?id=127300
        <rdar://problem/15861296>

        Reviewed by Dan Bernstein.

        This is the first step towards moving handling of user scripts and style sheets from
        the page group to a separate objects and ultimately make them be settable per page instead of per page group.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * page/UserContentController.cpp: Added.
        (WebCore::UserContentController::create):
        (WebCore::UserContentController::UserContentController):
        (WebCore::UserContentController::~UserContentController):
        * page/UserContentController.h: Added.

2014-01-20  Joseph Pecoraro  <pecoraro@apple.com>

        Run clang-modernize and let it add a bunch of missing overrides in WebCore/inspector
        https://bugs.webkit.org/show_bug.cgi?id=127206

        Reviewed by Anders Carlsson.

        Let clang-modernize add overrides.

        * inspector/DOMEditor.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHistory.cpp:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.h:

2014-01-20  Zan Dobersek  <zdobersek@igalia.com>

        Move WebAudio source code to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=127274

        Reviewed by Eric Carlson.

        Move from using OwnPtr and PassOwnPtr to using std::unique_ptr and move semantics
        in the WebAudio module and the WebAudio code in the platform layer.

        * Modules/webaudio/AsyncAudioDecoder.cpp:
        * Modules/webaudio/AsyncAudioDecoder.h:
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::addInput):
        (WebCore::AudioNode::addOutput):
        (WebCore::AudioNode::checkNumberOfChannelsForInput):
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/BiquadFilterNode.cpp:
        (WebCore::BiquadFilterNode::BiquadFilterNode):
        * Modules/webaudio/BiquadProcessor.cpp:
        (WebCore::BiquadProcessor::createKernel):
        (WebCore::BiquadProcessor::getFrequencyResponse):
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.cpp:
        (WebCore::ChannelMergerNode::ChannelMergerNode):
        * Modules/webaudio/ChannelSplitterNode.cpp:
        (WebCore::ChannelSplitterNode::ChannelSplitterNode):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::ConvolverNode):
        (WebCore::ConvolverNode::uninitialize):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayNode.cpp:
        (WebCore::DelayNode::DelayNode):
        * Modules/webaudio/DelayProcessor.cpp:
        (WebCore::DelayProcessor::createKernel):
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DynamicsCompressorNode.cpp:
        (WebCore::DynamicsCompressorNode::DynamicsCompressorNode):
        (WebCore::DynamicsCompressorNode::initialize):
        (WebCore::DynamicsCompressorNode::uninitialize):
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.cpp:
        (WebCore::GainNode::GainNode):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::OscillatorNode):
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::PannerNode):
        (WebCore::PannerNode::uninitialize):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/PeriodicWave.cpp:
        (WebCore::PeriodicWave::createBandLimitedTables):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::RealtimeAnalyser):
        (WebCore::RealtimeAnalyser::setFftSize):
        * Modules/webaudio/RealtimeAnalyser.h:
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::lazyInitializeOversampling):
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::WaveShaperNode):
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::createKernel):
        * Modules/webaudio/WaveShaperProcessor.h:
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::AudioBus):
        (WebCore::AudioBus::copyWithGainFrom):
        * platform/audio/AudioBus.h:
        * platform/audio/AudioChannel.cpp:
        * platform/audio/AudioChannel.h:
        (WebCore::AudioChannel::AudioChannel):
        (WebCore::AudioChannel::set):
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/AudioDestination.h:
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::AudioResampler):
        (WebCore::AudioResampler::configureChannels):
        * platform/audio/AudioResampler.h:
        * platform/audio/AudioSession.h:
        * platform/audio/DynamicsCompressor.cpp:
        (WebCore::DynamicsCompressor::setNumberOfChannels):
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::setNumberOfChannels):
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::createInterpolatedFrame):
        * platform/audio/FFTFrame.h:
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::HRTFDatabase):
        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        (WebCore::HRTFDatabaseLoader::load):
        * platform/audio/HRTFDatabaseLoader.h:
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        * platform/audio/HRTFElevation.h:
        (WebCore::HRTFElevation::HRTFElevation):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createImpulseResponse):
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFKernel.h:
        (WebCore::HRTFKernel::create):
        (WebCore::HRTFKernel::HRTFKernel):
        * platform/audio/MultiChannelResampler.cpp:
        (WebCore::MultiChannelResampler::MultiChannelResampler):
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/Panner.h:
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        * platform/audio/ReverbConvolverStage.h:
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/ios/AudioSessionIOS.mm:
        (WebCore::AudioSession::AudioSession):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestination::create):
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/mac/AudioSessionMac.cpp:
        (WebCore::AudioSession::AudioSession):

2014-01-20  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: support explicit column breaks
        https://bugs.webkit.org/show_bug.cgi?id=123993

        Reviewed by David Hyatt.

        Merely supporting insertion of explicit (forced) column breaks in
        the region based multicol implementation is really simple: just
        hook up with what the CSS regions code is already doing.

        However, there is one complication: column balancing. In order to
        balance columns as nicely as possible when there are explicit
        breaks, we need to figure out between which explicit breaks the
        implicit breaks will occur (if there's room for any at all).

        Tests: fast/multicol/newmulticol/break-after.html
               fast/multicol/newmulticol/break-before.html
               fast/multicol/newmulticol/breaks-2-columns-3-no-balancing.html
               fast/multicol/newmulticol/breaks-2-columns-3.html
               fast/multicol/newmulticol/breaks-3-columns-3.html
               fast/multicol/newmulticol/fixed-height-fill-balance-2.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::applyBeforeBreak):
        (WebCore::RenderBlockFlow::applyAfterBreak): Use the already
        existing region breaking code when inserting breaks in region
        based multicol.
        * rendering/RenderFlowThread.h:
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::RenderMultiColumnBlock):
        (WebCore::RenderMultiColumnBlock::relayoutForPagination): Avoid
        re-balancing if the multicol's contents were not laid out. Apart
        from being good for performance, this is now necessary because of
        how explicit breaks are implemented.
        (WebCore::RenderMultiColumnBlock::layoutSpecialExcludedChild):
        Detect if the contents are going to be laid out, or skipped, so
        that we can tell if we need to (re-)balance the columns
        afterwards.
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.cpp:
        (WebCore::RenderMultiColumnFlowThread::addForcedRegionBreak):
        Locate the appropriate multi-column set and call its
        addForcedBreak().
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::RenderMultiColumnSet):
        (WebCore::RenderMultiColumnSet::findRunWithTallestColumns):
        (WebCore::RenderMultiColumnSet::distributeImplicitBreaks): Figure
        out how many implicit breaks each single "content run" should
        contain. The taller the content run, the more implicit breaks.
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight): This is
        now a const method that only does half of what the old
        calculateBalancedHeight() did. The rest (such as actually storing
        the new column height) is done by recalculateBalancedHeight().
        (WebCore::RenderMultiColumnSet::clearForcedBreaks): Needs to be
        called between each layout pass, to clear the list of "content
        runs".
        (WebCore::RenderMultiColumnSet::addForcedBreak): Only useful when
        columns are to be balanced. It receives explicit (forced) breaks
        and stores them as "content runs". When layout is done, we'll go
        through the list of content runs, and see where implicit breaks
        should be inserted (if there's room for any). The goal is to
        insert implicit breaks in such a way that the final columns become
        as short as possible.
        (WebCore::RenderMultiColumnSet::recalculateBalancedHeight):
        Calculates and sets a new balanced column height. This used to be
        done directly in calculateBalancedHeight(), but that method is now
        const and it now only calculates the new height and returns it.
        (WebCore::RenderMultiColumnSet::prepareForLayout):
        * rendering/RenderMultiColumnSet.h: Remove old data members
        intended for forced breaks (they were unused), and introduce a
        "content run" vector instead. A new content run is triggered by an
        explicit break. This is only used when column balancing is
        enabled. When not balanced, RenderMultiColumnSet doesn't need to
        do anything when explicit breaks are inserted.

2014-01-20  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict 'preload' behavior
        https://bugs.webkit.org/show_bug.cgi?id=127297

        Reviewed by Jer Noble.

        Tests: media/video-restricted-no-preload-auto.html
               media/video-restricted-no-preload-metadata.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Apply restrictions to preload attribute before
            passing to media engine.
        (WebCore::HTMLMediaElement::loadResource): Ditto.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::effectivePreloadForElement): New, limit preload according to restrictions.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSessionManager.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions): Limit preload to metadata only. Drive-by
            static deviceClass initialization cleanup.

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Support MetadataPreloadingNotPermitted and
            AutoPreloadingNotPermitted.

2014-01-20  Andreas Kling  <akling@apple.com>

        Let RenderImage construct its RenderImageResource.
        <https://webkit.org/b/127290>

        Everyone who creates a RenderImage immediately follows up with
        creating a RenderImageResource and assigning it to the image.

        Let the RenderImage constructor do this instead, and make the
        imageResource() accessors return references. This exposed a
        number of unnecessary null checks.

        Also modernized the touched code with std::unique_ptr.

        Reviewed by Antti Koivisto.

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createElementRenderer):
        (WebCore::HTMLImageElement::didAttachRenderers):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::didAttachRenderers):
        (WebCore::HTMLVideoElement::parseAttribute):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::createInputRenderer):
        (WebCore::ImageInputType::attach):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::renderImageResource):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::styleDidChange):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::updateIntrinsicSizeIfNeeded):
        (WebCore::RenderImage::updateInnerContentRect):
        (WebCore::RenderImage::imageDimensionsChanged):
        (WebCore::RenderImage::notifyFinished):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::foregroundIsKnownToBeOpaqueInRect):
        (WebCore::RenderImage::minimumReplacedHeight):
        (WebCore::RenderImage::computeIntrinsicRatioInformation):
        (WebCore::RenderImage::embeddedContentBox):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::imageResource):
        (WebCore::RenderImage::cachedImage):
        * rendering/RenderImageResource.h:
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::RenderSnapshottedPlugIn):
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createContentRenderer):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::~RenderSVGImage):
        (WebCore::RenderSVGImage::updateImageViewport):
        (WebCore::RenderSVGImage::paint):
        (WebCore::RenderSVGImage::paintForeground):
        * rendering/svg/RenderSVGImage.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::didAttachRenderers):

2014-01-20  Antti Koivisto  <antti@apple.com>

        Update overlay scrollbars in single pass
        https://bugs.webkit.org/show_bug.cgi?id=127289

        Reviewed by Anders Carlsson.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):
        
            Multi-pass scrollbar resolution is only needed for traditional scrollbars. Overlay scrollbars don't affect layout.

2014-01-20  Jochen Eisinger  <jochen@chromium.org>

        Never send a non-http(s) referrer header even with a referrer policy
        https://bugs.webkit.org/show_bug.cgi?id=127172

        Reviewed by Alexey Proskuryakov.

        This mirrors the code SecurityPolicy::shouldHideReferrer which is used
        for ReferrerPolicyDefault.

        No new tests, only affects an embedder that registers other schemes,
        e.g. chrome://

        * page/SecurityPolicy.cpp:
        (WebCore::SecurityPolicy::generateReferrerHeader):

2014-01-20  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Background layer with -webkit-cross-fade doesn't blend
        when having -webkit-background-blending applied. Turns out the problem was
        the blending parameter not being passed to WebCore::CrossfadeGeneratedImage::draw

        https://bugs.webkit.org/show_bug.cgi?id=126887

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-crossfade-image.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw): set blendMode on context.

2013-11-22  Sergio Villar Senin  <svillar@igalia.com>

        Null-pointer dereference in WebCore::CSSValue::isPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=124769

        Reviewed by Andreas Kling.

        Test: fast/gradients/crash-on-no-position-separator.html

        The function parseFillPosition() may not return valid values for
        centerX and centerY if the input data is malformed. We need to
        check that we get a valid pair of positions before checking that
        they're actually valid primitive values in the assertions.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseRadialGradient):

2014-01-20  Mihai Tica  <mitica@adobe.com>

        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-20  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: setSimpleLineLayoutEnabled() produces different layout when line position has CSS px fractions.
        https://bugs.webkit.org/show_bug.cgi?id=126892

        Reviewed by Antti Koivisto.

        SimpleLineLayout needs to copy normal linebox layout's subpixel rounding strategy to produce
        the same layout.

        Covered by existing tests.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2014-01-20  Gurpreet Kaur  <k.gurpreet@samsung.com>

        Col width is not honored when dynamically updated and it would make table narrower
        https://bugs.webkit.org/show_bug.cgi?id=104711

        Reviewed by Antti Koivisto.

        Increasing the table width by increasing the colgroup width
        was working but decreasing the table width by decreasing the
        colgroup width is not working.

        Test: fast/dom/HTMLTableColElement/resize-table-width-using-col-width.html

        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::styleDidChange):
        When colgroup width is defined table cell should adjust according to
        that. On decreasing colgroup width the cells maxPreferredLogicalWidth
        was still set to the earlier value. Setting the
        setPreferredLogicalWidthsDirty to true so that cells pref width is
        calculated again.

2014-01-20  Edit Balint  <edbalint@inf.u-szeged.hu>

        [CoordinatedGraphics] Segmentation fault at  CoordinatedGraphicsScene::clearImageBackingContents

        https://bugs.webkit.org/show_bug.cgi?id=125776

        Reviewed by Csaba Osztrogonác.

        Unexpected behavior occurs in some test cases which leads to segmentation fault.

        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::removeImageBacking):

2014-01-20  Morten Stenshorne  <mstensho@opera.com>

        Region based multicol: tall line causes taller multicol container than necessary
        https://bugs.webkit.org/show_bug.cgi?id=122550

        Detect and report all column breaks, also when there's no pagination strut involved.

        This may end up becoming the overall smallest space shortage in some cases,
        so we need to report it, to avoid column height over-stretching.

        Reviewed by David Hyatt.

        Test: fast/multicol/newmulticol/balance10.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):

2014-01-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GLIB] GVariant floating references are not correctly handled by GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=127246

        Reviewed by Martin Robinson.

        Do not adopt GVariant floating references, they will be converted
        to a full reference by GRefPtr.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillSelectionData):
        (WebCore::PasteboardHelper::fillDataObjectFromDropData):

2014-01-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Use unsigned type for the size of CSSParserValueList
        https://bugs.webkit.org/show_bug.cgi?id=127211

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp: Changed variable type from int to unsigned.
        (WebCore::CSSParser::parseValue):

2014-01-19  Jaehun Lim  <ljaehun.lim@samsung.com>

        Unreviewed build fix after r162293

        Fix debug build.

        [ 13%] Building CXX object Source/WebCore/CMakeFiles/WebCore.dir/html/parser/HTMLTreeBuilder.cpp.o
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp: In member function ‘void WebCore::HTMLTreeBuilder::processStartTagForInTable(WebCore::AtomicHTMLToken*)’:
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: error: no match for ‘operator!’ in ‘!(WebCore::HTMLTreeBuilder::InsertionMode)12’
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note: candidate is:
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note: operator!(bool) <built-in>
        /source/WebKit/Source/WebCore/html/parser/HTMLTreeBuilder.cpp:1037:40: note:   no known conversion for argument 1 from ‘WebCore::HTMLTreeBuilder::InsertionMode’ to ‘bool’
        make[2]: *** [Source/WebCore/CMakeFiles/WebCore.dir/html/parser/HTMLTreeBuilder.cpp.o] Error 1
        make[1]: *** [Source/WebCore/CMakeFiles/WebCore.dir/all] Error 2
        make: *** [all] Error 2

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Fix ASSERT.

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Stop using MutexTryLocker in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127254

        Reviewed by Andreas Kling.

        Instead use std::mutex and std::unique_lock with the std::try_to_lock constructor.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::insertEvent):
        (WebCore::AudioParamTimeline::cancelScheduledValues):
        (WebCore::AudioParamTimeline::valueForContextTime):
        (WebCore::AudioParamTimeline::valuesForTimeRange):
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioParamTimeline.h:
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::process):
        (WebCore::ConvolverNode::reset):
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        (WebCore::MediaElementAudioSourceNode::process):
        (WebCore::MediaElementAudioSourceNode::lock):
        (WebCore::MediaElementAudioSourceNode::unlock):
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):
        (WebCore::MediaStreamAudioSourceNode::process):
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OscillatorNode.cpp:
        (WebCore::OscillatorNode::process):
        (WebCore::OscillatorNode::setPeriodicWave):
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::process):
        (WebCore::PannerNode::setPanningModel):
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/WaveShaperProcessor.cpp:
        (WebCore::WaveShaperProcessor::setCurve):
        (WebCore::WaveShaperProcessor::setOversample):
        (WebCore::WaveShaperProcessor::process):
        * Modules/webaudio/WaveShaperProcessor.h:

2014-01-19  Alberto Garcia  <berto@igalia.com>

        Does not build with SVG disabled
        https://bugs.webkit.org/show_bug.cgi?id=127248

        Reviewed by Sam Weinig.

        Add missing #if ENABLE(SVG) guard.

        * dom/ElementData.h:

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Use a strong enum for HTMLTreeBuilder::InsertionMode
        https://bugs.webkit.org/show_bug.cgi?id=127252

        Reviewed by Antti Koivisto.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::constructTree):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processTemplateStartTag):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::closeTheCell):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::defaultForInitial):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Convert LoaderRunLoopCF.cpp and WebCoreThreadRun.cpp over to modern threading primitives
        https://bugs.webkit.org/show_bug.cgi?id=127251

        Reviewed by Antti Koivisto.

        Also add a condition to the loaderRunLoop() function to protect against spurious wake-ups.

        * platform/ios/wak/WebCoreThreadRun.cpp:
        * platform/network/cf/LoaderRunLoopCF.cpp:
        (WebCore::loaderRunLoopMutex):
        (WebCore::loaderRunLoopConditionVariable):
        (WebCore::runLoaderThread):
        (WebCore::loaderRunLoop):

2014-01-19  Anders Carlsson  <andersca@apple.com>

        Modernize ReverbConvolver
        https://bugs.webkit.org/show_bug.cgi?id=127250

        Reviewed by Andreas Kling.

        Use std::unique_ptr instead of OwnPtr and the STL threading primitives instead of the WTF ones.

        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::ReverbConvolver::~ReverbConvolver):
        (WebCore::ReverbConvolver::backgroundThreadEntry):
        (WebCore::ReverbConvolver::process):
        * platform/audio/ReverbConvolver.h:

2014-01-18  Andy Estes  <aestes@apple.com>

        [iOS] Rename GestureEventIOS.{cpp,h} to GestureEvent.{cpp,h} to fix the build

        InFilesCompiler.pm assumes that <interface name>.h exists for each
        interface it processes. We renamed GestureEvent.h to GestureEventIOS.h
        but kept the interface named GestureEvent, so a non-existant file was
        being referenced by InFilesCompiler.pm (this was hard to detect since
        GestureEvent.h still existed in the SDK due to not having submitted
        WebKitAdditions recently).

        Since we cannot rename the GestureEvent interface, and since there is
        no conflicting GestureEvent in open source, we can just rename
        GestureEventIOS.{cpp,h} back to GestureEvent.{cpp,h}.

        * dom/ios/TouchEvents.cpp: Updated to include GestureEvent.cpp.

2014-01-18  Alexey Proskuryakov  <ap@apple.com>

        Memory leak in JSSubtleCrypto::wrapKey
        https://bugs.webkit.org/show_bug.cgi?id=127241

        Reviewed by Sam Weinig.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::wrapKey):
        Delete algorithmPtr and parametersPtr that aren't smart pointers because of lambdas.

2014-01-18  Andy Estes  <aestes@apple.com>

        Fix the iOS Production build.

        * Configurations/WebCore.xcconfig:

2014-01-18  Alberto Garcia  <berto@igalia.com>

        [CodeGeneratorJS] Sort output of StructureFlags and function parameters

        https://bugs.webkit.org/show_bug.cgi?id=127226

        Reviewed by Alexey Proskuryakov.

        The order of the keys in a hash is undefined and subject to change
        between different Perl versions, so we have to sort them to make
        sure that the output is always the same.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateParametersCheckExpression):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        * bindings/scripts/test/JS/JSTestException.h:
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        * bindings/scripts/test/JS/JSTestNode.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        * bindings/scripts/test/JS/JSattribute.h:
        * bindings/scripts/test/JS/JSreadonly.h:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Replace a couple of uses of WTF::Function with std::function
        https://bugs.webkit.org/show_bug.cgi?id=127218

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatch):
        (WebCore::ScrollingThread::dispatchBarrier):
        (WebCore::ScrollingThread::shared):
        (WebCore::ScrollingThread::createThreadIfNeeded):
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        (WebCore::ScrollingThread::initializeRunLoop):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Modernize HTML parser code
        https://bugs.webkit.org/show_bug.cgi?id=127236

        Reviewed by Andreas Kling.

        * html/parser/AtomicHTMLToken.h:
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::detach):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::pushCommon):
        * html/parser/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::releaseNext):
        (WebCore::HTMLElementStack::ElementRecord::setNext):
        * html/parser/HTMLMetaCharsetParser.cpp:
        (WebCore::HTMLMetaCharsetParser::HTMLMetaCharsetParser):
        * html/parser/HTMLMetaCharsetParser.h:
        * html/parser/HTMLParserScheduler.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::StartTagScanner::createPreloadRequest):
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLResourcePreloader.cpp:
        (WebCore::HTMLResourcePreloader::takeAndPreload):
        (WebCore::HTMLResourcePreloader::preload):
        * html/parser/HTMLResourcePreloader.h:
        (WebCore::PreloadRequest::PreloadRequest):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLToken.h:
        (WebCore::HTMLToken::beginDOCTYPE):
        (WebCore::HTMLToken::releaseDoctypeData):
        * html/parser/HTMLTokenizer.h:
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):
        * html/parser/HTMLViewSourceParser.h:
        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::init):
        (WebCore::XSSAuditor::filterToken):
        * html/parser/XSSAuditor.h:
        * html/parser/XSSAuditorDelegate.h:
        (WebCore::XSSInfo::XSSInfo):
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::checkForHeadCharset):
        (WebCore::TextResourceDecoder::checkForMetaCharset):
        * loader/TextResourceDecoder.h:

2014-01-18  Benjamin Poulain  <benjamin@webkit.org>

        Make ElementData JIT friendly
        https://bugs.webkit.org/show_bug.cgi?id=127209

        Reviewed by Geoffrey Garen.

        The offsets of ElementData's flags were not accessible by the JIT. This patch
        refactor ElementData to use explicit flags so that they can be used from
        the code generators.

        * dom/Element.cpp:
        (WebCore::Element::synchronizeAllAttributes):
        (WebCore::Element::synchronizeAttribute):
        (WebCore::Element::attributeChanged):
        (WebCore::Element::removeAttribute):
        * dom/ElementData.cpp:
        (WebCore::ElementData::destroy):
        (WebCore::ElementData::ElementData):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::ShareableElementData::~ShareableElementData):
        (WebCore::ElementData::arraySizeAndFlagsFromOther):
        * dom/ElementData.h:
        (WebCore::ElementData::hasName):
        (WebCore::ElementData::isUnique):
        (WebCore::ElementData::updateFlag):
        (WebCore::ElementData::arraySize):
        (WebCore::ElementData::setHasNameAttribute):
        (WebCore::ElementData::styleAttributeIsDirty):
        (WebCore::ElementData::setStyleAttributeIsDirty):
        (WebCore::ElementData::presentationAttributeStyleIsDirty):
        (WebCore::ElementData::setPresentationAttributeStyleIsDirty):
        (WebCore::ElementData::animatedSVGAttributesAreDirty):
        (WebCore::ElementData::setAnimatedSVGAttributesAreDirty):
        (WebCore::ElementData::length):
        (WebCore::ElementData::attributeBase):
        (WebCore::ElementData::presentationAttributeStyle):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::synchronizeStyleAttributeInternal):
        (WebCore::StyledElement::attributeChanged):
        (WebCore::StyledElement::styleAttributeChanged):
        (WebCore::StyledElement::inlineStyleChanged):
        (WebCore::StyledElement::rebuildPresentationAttributeStyle):
        * dom/StyledElement.h:
        (WebCore::StyledElement::invalidateStyleAttribute):
        (WebCore::StyledElement::presentationAttributeStyle):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::synchronizeAnimatedSVGAttribute):
        * svg/SVGElement.h:
        (WebCore::SVGElement::invalidateSVGAttributes):

2014-01-18  Zalan Bujtas  <zalan@apple.com>

        Subpixel layout: IntRect::infiniteRect() overflows when subpixel layout is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=126899

        Reviewed by Tim Horton.

        Use LayoutUnits when setting the infinite values on IntRect::infiniteRect() to ensure
        it won't overflow later when the IntRect gets converted to LayoutRect.

        Covered by existing tests.

        * platform/graphics/IntRect.h:
        (WebCore::IntRect::infiniteRect):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove support for the viewsource attribute
        https://bugs.webkit.org/show_bug.cgi?id=127232

        Reviewed by Andreas Kling.

        The 'viewsource' attribute on frames is nonstandard, not used by anyone (the inspector has
        its own syntax highlighting) and not audited.

        This patch removes parsing of the viewsource attribute and the associated tests. A subsequent
        patch will remove the code as well.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseAttribute):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        XMLTreeViewer shouldn't use the view source mode
        https://bugs.webkit.org/show_bug.cgi?id=127229

        Reviewed by Andreas Kling.

        Add the relevant styles from view-source.css to XMLViewer.css.

        * xml/XMLTreeViewer.cpp:
        (WebCore::XMLTreeViewer::transformDocumentToTreeView):
        * xml/XMLViewer.css:
        (body):
        (.comment):
        (.tag):
        (.attribute-name):
        (.attribute-value):
        * xml/XMLViewer.js:
        (createComment):
        (createTag):
        (createAttribute):

2014-01-18  Andreas Kling  <akling@apple.com>

        Remove unused "touchDragDropEnabled" setting.
        <https://webkit.org/b/127227>

        Reviewed by Sam Weinig.

        * page/Settings.in:

2014-01-18  Brian Burg  <bburg@apple.com>

        Web Inspector: Page should use std::unique_ptr for InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=127068

        Reviewed by Joseph Pecoraro.

        Make Page and WorkerGlobalScope keep a std::unique_ptr to InspectorController
        and WorkerInspectorController. Store page references and return controller
        references where possible.

        Convert call sites to use an InspectorController reference.
        Convert instantiations of InspectorFrontendClient to use std::unique_ptr.
        Convert InspectorOverlay to keep Page references.

        * WebCore.exp.in:
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
        * dom/Node.cpp:
        (WebCore::Node::inspect):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::setInspectorFrontendClient):
        (WebCore::InspectorController::hasInspectorFrontendClient):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::inspectedPage):
        (WebCore::InspectorController::developerExtrasEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::canAttachWindow):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowWidth):
        (WebCore::InspectorFrontendClientLocal::openInNewTab):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::InspectorOverlay):
        (WebCore::InspectorOverlay::getHighlight):
        (WebCore::InspectorOverlay::highlightQuad):
        (WebCore::InspectorOverlay::update):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):
        (WebCore::InspectorOverlay::drawQuadHighlight):
        (WebCore::InspectorOverlay::overlayPage):
        (WebCore::InspectorOverlay::reset):
        * inspector/InspectorOverlay.h:
        * inspector/InstrumentingAgents.cpp:
        (WebCore::instrumentationForPage): remove null checks.
        (WebCore::instrumentationForWorkerGlobalScope): remove null checks.
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::dispatchDidClearWindowObjectInWorld):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenu):
        (WebCore::ContextMenuController::contextMenuItemSelected):
        (WebCore::ContextMenuController::populate):
        (WebCore::ContextMenuController::addInspectElementItem):
        * page/FrameView.cpp:
        (WebCore::FrameView::sendResizeEventIfNeeded):
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::inspectorController):
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::hasLocalDebugger):
        (WebCore::PageDebuggable::parentProcessIdentifier):
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        (WebCore::PageDebuggable::dispatchMessageFromRemoteFrontend):
        (WebCore::PageDebuggable::setIndicating):
        * platform/graphics/texmap/coordinated/CompositingCoordinator.cpp:
        (WebCore::CompositingCoordinator::syncDisplayState):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):
        (WebCore::Internals::emitInspectorDidBeginFrame):
        (WebCore::Internals::emitInspectorDidCancelFrame):
        (WebCore::Internals::openDummyInspectorFrontend):
        (WebCore::Internals::closeDummyInspectorFrontend):
        (WebCore::Internals::setInspectorResourcesDataSizeLimits):
        (WebCore::Internals::setJavaScriptProfilingEnabled):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::WorkerGlobalScope):
        * workers/WorkerGlobalScope.h: remove clearInspector(). 
        (WebCore::WorkerGlobalScope::workerInspectorController):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::connectToWorkerGlobalScopeInspectorTask):
        (WebCore::disconnectFromWorkerGlobalScopeInspectorTask):
        (WebCore::dispatchOnInspectorBackendTask):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownFinishTask::performTask):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove ENABLE_THREADED_HTML_PARSER defines everywhere
        https://bugs.webkit.org/show_bug.cgi?id=127225

        Reviewed by Andreas Kling.

        This concludes the removal of over 8.8 million lines of threaded parser code.

        * Configurations/FeatureDefines.xcconfig:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove the remaining threaded parser code
        https://bugs.webkit.org/show_bug.cgi?id=127224

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::decrementActiveParserCount):
        * html/parser/AtomicHTMLToken.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::detach):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::forcePlaintextForTextDocument):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::textPosition):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/HTMLParserIdioms.h:
        * html/parser/HTMLTokenizer.cpp:
        * html/parser/HTMLTokenizer.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoading):
        (WebCore::DocumentLoader::checkLoadComplete):
        * page/Settings.in:

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove threaded parser code from the preload scanners
        https://bugs.webkit.org/show_bug.cgi?id=127222

        Reviewed by Andreas Kling.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::CSSPreloadScanner):
        Use nullptr.

        (WebCore::CSSPreloadScanner::scan):
        Move scanCommon here and simplify the code.

        * html/parser/CSSPreloadScanner.h:
        Remove scanCommon.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::tagIdFor):
        TagId is a strong enum now, update enum values.

        (WebCore::TokenPreloadScanner::initiatorFor):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::processAttributes):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::match):
        Indent this.

        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
        TagId is a strong enum now, update enum values.

        (WebCore::TokenPreloadScanner::StartTagScanner::charset):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::resourceType):
        Ditto.

        (WebCore::TokenPreloadScanner::StartTagScanner::shouldPreload):
        Ditto.

        (WebCore::TokenPreloadScanner::scan):
        Merge scan and scanCommon.

        * html/parser/HTMLPreloadScanner.h:

2014-01-18  Lauro Neto  <lauro.neto@openbossa.org>

        Remove Nix files from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=127176

        Reviewed by Anders Carlsson.

        * PlatformNix.cmake: Removed.
        * css/mediaControlsNix.css: Removed.
        * css/mediaControlsNixFullscreen.css: Removed.
        * editing/nix/EditorNix.cpp: Removed.
        * page/nix/EventHandlerNix.cpp: Removed.
        * platform/audio/nix/AudioBusNix.cpp: Removed.
        * platform/audio/nix/AudioDestinationNix.cpp: Removed.
        * platform/audio/nix/AudioDestinationNix.h: Removed.
        * platform/audio/nix/FFTFrameNix.cpp: Removed.
        * platform/graphics/nix/IconNix.cpp: Removed.
        * platform/graphics/nix/ImageNix.cpp: Removed.
        * platform/nix/CursorNix.cpp: Removed.
        * platform/nix/DragDataNix.cpp: Removed.
        * platform/nix/DragImageNix.cpp: Removed.
        * platform/nix/ErrorsNix.cpp: Removed.
        * platform/nix/ErrorsNix.h: Removed.
        * platform/nix/FileSystemNix.cpp: Removed.
        * platform/nix/GamepadsNix.cpp: Removed.
        * platform/nix/LanguageNix.cpp: Removed.
        * platform/nix/LocalizedStringsNix.cpp: Removed.
        * platform/nix/MIMETypeRegistryNix.cpp: Removed.
        * platform/nix/NixKeyboardUtilities.cpp: Removed.
        * platform/nix/NixKeyboardUtilities.h: Removed.
        * platform/nix/PasteboardNix.cpp: Removed.
        * platform/nix/PlatformKeyboardEventNix.cpp: Removed.
        * platform/nix/PlatformScreenNix.cpp: Removed.
        * platform/nix/RenderThemeNix.cpp: Removed.
        * platform/nix/RenderThemeNix.h: Removed.
        * platform/nix/ScrollbarThemeNix.cpp: Removed.
        * platform/nix/ScrollbarThemeNix.h: Removed.
        * platform/nix/SharedTimerNix.cpp: Removed.
        * platform/nix/SoundNix.cpp: Removed.
        * platform/nix/TemporaryLinkStubs.cpp: Removed.
        * platform/nix/WidgetNix.cpp: Removed.
        * platform/nix/support/MultiChannelPCMData.cpp: Removed.
        * platform/text/nix/TextBreakIteratorInternalICUNix.cpp: Removed.

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove DocumentParser::pinToMainThread() and related code
        https://bugs.webkit.org/show_bug.cgi?id=127221

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::setContent):
        * dom/DocumentParser.h:
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLParserOptions.cpp:
        (WebCore::HTMLParserOptions::HTMLParserOptions):
        * html/parser/HTMLParserOptions.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove HTMLParserThread
        https://bugs.webkit.org/show_bug.cgi?id=127220

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLParserThread.cpp: Removed.
        * html/parser/HTMLParserThread.h: Removed.

2014-01-17  Andreas Kling  <akling@apple.com>

        GC soon after responding to fake memory pressure.
        <https://webkit.org/b/127210>

        Ask JSC to garbage collect "soon" after handling the fake memory
        pressure signal on Mac. This seems to stabilize the post-pressure
        numbers on Membuster3 a bit on my laptop. The difference is mostly
        made up of JSC::CodeBlock objects.

        Reviewed by Geoffrey Garen.

        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):

2014-01-18  Anders Carlsson  <andersca@apple.com>

        Remove files only used by the threaded HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=127219
        <rdar://problem/13331277>

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/AtomicHTMLToken.h:
        * html/parser/BackgroundHTMLInputStream.cpp: Removed.
        * html/parser/BackgroundHTMLInputStream.h: Removed.
        * html/parser/BackgroundHTMLParser.cpp: Removed.
        * html/parser/BackgroundHTMLParser.h: Removed.
        * html/parser/CompactHTMLToken.cpp: Removed.
        * html/parser/CompactHTMLToken.h: Removed.
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLIdentifier.cpp: Removed.
        * html/parser/HTMLIdentifier.h: Removed.
        * html/parser/HTMLParserIdioms.h:
        * html/parser/HTMLPreloadScanner.h:
        * html/parser/HTMLTreeBuilderSimulator.cpp: Removed.
        * html/parser/HTMLTreeBuilderSimulator.h: Removed.

2014-01-17  Andreas Kling  <akling@apple.com>

        Micro-optimize RenderBoxModelObject::computedCSSPadding().
        <https://webkit.org/b/127208>

        Make computedCSSPadding() take the Length as a const reference
        to avoid creating a temporary copy. This was showing up (0.2%)
        on DoYouEvenBench.

        Reviewed by Anders Carlsson.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::computedCSSPadding):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Add a callOnMainThreadAndWait variant in SocketStreamHandle
        https://bugs.webkit.org/show_bug.cgi?id=127180

        Reviewed by Geoffrey Garen.

        WTF::callOnMainThreadAndWait was only used inside SocketStreamHandleCFNet.cpp, 
        so add an improved version there which is implemented in terms of callOnMainThread and
        with the bonus of handling spurious wake-ups correctly (the old version didn't).

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::callOnMainThreadAndWait):
        (WebCore::SocketStreamHandle::pacExecutionCallback):
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Clean up PageCache classes
        https://bugs.webkit.org/show_bug.cgi?id=127202

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::~CachedFrameBase):
        (WebCore::CachedFrame::CachedFrame):
        (WebCore::CachedFrame::clear):
        (WebCore::CachedFrame::setCachedFramePlatformData):
        * history/CachedFrame.h:
        * history/CachedPage.cpp:
        (WebCore::CachedPage::CachedPage):
        * history/CachedPage.h:
        * history/HistoryItem.h:
        (WebCore::HistoryItem::isInPageCache):
        * history/PageCache.cpp:
        (WebCore::PageCache::add):
        (WebCore::PageCache::take):
        (WebCore::PageCache::remove):
        * history/PageCache.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::invalidateCurrentItemCachedPage):

2014-01-17  Andy Estes  <aestes@apple.com>

        Work around a preprocessor warning in mediaControlsApple.js
        https://bugs.webkit.org/show_bug.cgi?id=127204

        Reviewed by Dan Bernstein.

        * Modules/mediacontrols/mediaControlsApple.js: Changed '' to String().

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162184>
        (https://bugs.webkit.org/show_bug.cgi?id=126856)

        Remove symbol for WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(unsigned short const*, int).
        Add symbol for WebCore::NonSharedCharacterBreakIterator::NonSharedCharacterBreakIterator(WTF::StringView).

        * WebCore.exp.in:

2014-01-17  Andreas Kling  <akling@apple.com>

        Remove unused TOUCH_ADJUSTMENT code.
        <https://webkit.org/b/127181>

        There are no ports using the ENABLE(TOUCH_ADJUSTMENT) feature
        anymore, so nuke it from orbit.

        Reviewed by Anders Carlsson.

        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * page/Settings.in:
        * page/TouchAdjustment.cpp: Removed.
        * page/TouchAdjustment.h: Removed.
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-17  Beth Dakin  <bdakin@apple.com>

        Need a way to test the tile cache with margins enabled
        https://bugs.webkit.org/show_bug.cgi?id=127194
        -and corresponding-
        <rdar://problem/15571327>

        Reviewed by Tim Horton.

        This patch adds a new function to InternalSettings that will allow layout tests to 
        flip the setting Settings::setBackgroundShouldExtendBeyondPage(). This patch also         
        makes changing that setting take effect immediately. 

        To make this setting dynamic, we can no longer generate the Setting function, so 
        we have to export the symbol manually.
        * WebCore.exp.in:

        This new function on FrameView will call into RenderLayerBacking to add or remove 
        margins.
        * page/FrameView.cpp:
        (WebCore::FrameView::setBackgroundExtendsBeyondPage):
        * page/FrameView.h:

        Again, we’re no longer using the boiler-plate generated Setting functions, so now 
        we can call into FrameView to make the background extend.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setBackgroundShouldExtendBeyondPage):
        * page/Settings.h:
        (WebCore::Settings::backgroundShouldExtendBeyondPage):
        * page/Settings.in:

        Whenever tile margins are set, call setNeedsRevalidateTiles() to make the change 
        dynamic.
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setTileMargins):

        Move the call to TiledBacking::setTileMargins() into a helper function so that the 
        same code can be used for FrameView.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::RenderLayerBacking::setTiledBackingHasMargins):
        * rendering/RenderLayerBacking.h:

        New InternalSetting.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::setBackgroundShouldExtendBeyondPage):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Remove another unused FrameLoaderClient callback
        https://bugs.webkit.org/show_bug.cgi?id=127192

        Reviewed by Dan Bernstein.

        FrameLoaderClient::dispatchDocumentElementAvailable() was only used by the Chromium port, so remove it.

        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::dispatchDocumentElementAvailableIfNeeded):
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Remove FrameLoaderClient::didPerformFirstNavigation()
        https://bugs.webkit.org/show_bug.cgi?id=127191

        Reviewed by Dan Bernstein.

        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListClippedAtTarget):

2014-01-17  Anders Carlsson  <andersca@apple.com>

        Move didPerformFirstNavigation() logic to -[WebView _didCommitLoadForFrame:]
        https://bugs.webkit.org/show_bug.cgi?id=127189

        Reviewed by Dan Bernstein.

        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::didPerformFirstNavigation):
        Add an empty implementation of didPerformFirstNavigation() to make it easier to remove it from subclasses.

2014-01-17  Eric Carlson  <eric.carlson@apple.com>

        [iOS] HTMLMediaSession should set AudioSession category
        https://bugs.webkit.org/show_bug.cgi?id=127137

        Reviewed by Sam Weinig.

        * html/HTMLMediaSession.cpp:
        (WebCore::initializeAudioSession): New, set the audio session to "media" on iOS.
        (WebCore::HTMLMediaSession::HTMLMediaSession): Call initializeAudioSession.

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162178>
        (https://bugs.webkit.org/show_bug.cgi?id=127147)

        Declare WebMediaSessionHelper outside of namespace WebCore to resolve error that
        "Objective-C declarations may only appear in global scope".

        * platform/audio/ios/MediaSessionManagerIOS.mm:

2014-01-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Stacked floats with shape-outside should allow inline content to interact with the non-outermost float
        https://bugs.webkit.org/show_bug.cgi?id=122576

        Reviewed by David Hyatt.

        Make inline content interact with stacked floats with shape-outside
        per the spec. This means that content can interact with floats on the
        line that are not the outermost float.

        This refactors ComputeFloatOffsetAdapter into a superclass and two
        subclasses: one adaptor for determining the offset for float layout,
        and one for determining the offset for inline layout.

        The logic in LineWidth::shrinkAvailableWidthForNewFloatIfNeeded has
        been updated to handle stacked floats with shape-outside properly and
        has been considerably simplified in the process. It was previously
        doing a whole bunch of unnecessary work.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-stacked-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-stacked-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-stacked-002.html

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::~ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::~ComputeFloatOffsetForFloatLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter::~ComputeFloatOffsetForLineLayoutAdapter):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForFloatLayoutAdapter<FloatTypeValue>::heightRemaining):
        (WebCore::shapeInfoForFloat):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatLeft>::updateOffsetIfNeeded):
        (WebCore::ComputeFloatOffsetForLineLayoutAdapter<FloatingObject::FloatRight>::updateOffsetIfNeeded):
        * rendering/line/LineWidth.cpp:
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):
        * rendering/shapes/ShapeOutsideInfo.h:

2014-01-17  Zoltan Horvath  <zoltan@webkit.org>

        [CSS3] Add rendering support for -webkit-text-align-last
        https://bugs.webkit.org/show_bug.cgi?id=99584

        Reviewed by David Hyatt.

        Add support for the text-align-last CSS3 property, according to the latest specification:
        http://dev.w3.org/csswg/css-text-3/#text-align-last-property

        Tests: fast/css3-text/css3-text-align-last/text-align-last-with-text-align-justify.html
               fast/css3-text/css3-text-align-last/text-align-last-with-text-align-non-justify.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::textAlignmentForLine):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):

2014-01-17  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/162208>
        (https://bugs.webkit.org/show_bug.cgi?id=127139)

        __MAC_OS_X_VERSION_MIN_REQUIRED isn't defined when building for iOS. Instead, explicitly
        check that we're not PLATFORM(IOS) to avoid defining the enum value CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain.

        * platform/network/cf/CookieJarCFNet.cpp:

2014-01-17  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Basic shapes' computed position should be a horizontal and vertical offset
        https://bugs.webkit.org/show_bug.cgi?id=127010

        Reviewed by Rob Buis.

        This patch updates the computed position values used for blending to be a horizontal
        left offset and a vertical top offset. When positions include a center, bottom, or
        right position offset, it is converted to the appropriate top/left coordinate as
        a calc expression. Serialized values still use the original bottom/right directions
        when present, and also omit the top/left keywords where possible.

        Updated parsing and animation tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate): Use the simplified BasicShapeCenterCoordinate,
        which includes an offset and whether the direction is from the top/left or bottom/right.
        (WebCore::valueForBasicShape): Ditto.
        (WebCore::convertToCenterCoordinate): Ditto.
        (WebCore::basicShapeForValue): Ditto.
        (WebCore::floatValueForCenterCoordinate): Ditto.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Remove the RenderBox parameter, which is no longer needed.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeCenterCoordinate::updateComputedLength): Calculate the computed
        position offset for this center coordinate.
        (WebCore::BasicShapeRectangle::blend): Remove the RenderBox parameter.
        (WebCore::DeprecatedBasicShapeCircle::blend): Ditto.
        (WebCore::BasicShapeCircle::blend): Ditto.
        (WebCore::DeprecatedBasicShapeEllipse::blend): Ditto.
        (WebCore::BasicShapeEllipse::blend): Ditto.
        (WebCore::BasicShapePolygon::blend): Ditto.
        (WebCore::BasicShapeInsetRectangle::blend): Ditto.
        (WebCore::BasicShapeInset::blend): Ditto.
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::BasicShapeCenterCoordinate): Simplify
        BasicShapeCenterCoordinate to contain an offset and a direction. Also add a
        computed length, which is an offset from the top/left direction.
        (WebCore::BasicShapeCenterCoordinate::direction):
        (WebCore::BasicShapeCenterCoordinate::computedLength):
        (WebCore::BasicShapeCenterCoordinate::blend):

2014-01-17  Alexey Proskuryakov  <ap@apple.com>

        More non-Mac build fix.

        * platform/network/cf/CookieJarCFNet.cpp:

2014-01-16  Myles C. Maxfield  <mmaxfield@apple.com>

        Unprefix text-emphasis CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=127160

        Reviewed by Sam Weinig.

        Add synonym CSS properties. We don't want to delete the old ones because
        we've shipped with them included.

        Test: fast/css3-text/css3-text-decoration/text-decoration-unprefix.html

        * css/CSSPropertyNames.in:

2014-01-17  Alberto Garcia  <berto@igalia.com>

        [GTK] WebKitGtk/testcopyandpaste fails in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=127173

        Reviewed by Carlos Garcia Campos.

        Remove duplicate "PasteGlobalSelection" entry.

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceRequest harder.
        <https://webkit.org/b/126982>

        Re-arrange the members of ResourceRequest to reduce padding,
        shrinking it by 8 bytes.

        Reviewed by Anders Carlsson.

        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):

2014-01-17  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting deleted functions
        https://bugs.webkit.org/show_bug.cgi?id=127166

        Reviewed by Andreas Kling.

        * bindings/js/JSLazyEventListener.h:
        * dom/ContainerNode.h:
        * dom/Document.h:
        * dom/Element.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderElement.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameBase.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderVideo.h:
        * rendering/RenderWidget.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * xml/XPathValue.h:

2014-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [ATK] Modernize the for loops in ATK AX code
        https://bugs.webkit.org/show_bug.cgi?id=127120

        Reviewed by Mario Sanchez Prada.

        Update the for loops to be range-based in ATK accessibility code.
        This work is complementary to r161979.

        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (accessibilityTitle):
        (accessibilityDescription):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getNChildrenForTable):
        (getChildForTable):
        (getIndexInParentForCellInRow):

2014-01-17  Zan Dobersek  <zdobersek@igalia.com>

        [Soup] Remove unnecessary using-directives for the std namespace
        https://bugs.webkit.org/show_bug.cgi?id=127122

        Reviewed by Martin Robinson.

        * platform/network/soup/ResourceRequestSoup.cpp: Remove the unnecessary using-directive for the std namespace
        as no symbols from that namespace are in use in this implementation file.
        * platform/network/soup/ResourceResponseSoup.cpp: Ditto.

2014-01-16  Tim Horton  <timothy_horton@apple.com>

        On iOS, zooming in with a TileController-backed main frame makes hundreds of tiles
        https://bugs.webkit.org/show_bug.cgi?id=126531
        <rdar://problem/15745862>

        Reviewed by Anders Carlsson.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::scaledExposedRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Scale the FrameView-space exposedRect into document space, to match the visibleRect.

        Flipping on WKView's clipsToExposedRect now works correctly even in Safari
        or MiniBrowser with zooming.

2014-01-15  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Ryosuke Niwa.

        Change all the TextBreakIterator creation functions to take StringViews. Remove a few
        now unnecessary up-conversions to UTF-16 in the process.

        * dom/CharacterData.cpp:
        * editing/TextCheckingHelper.cpp:
        * editing/VisibleUnits.cpp:
        * platform/graphics/StringTruncator.cpp:
        * platform/graphics/mac/ComplexTextController.cpp:
        * platform/text/TextBoundaries.cpp:
        * platform/text/TextBreakIterator.cpp:
        * platform/text/TextBreakIterator.h:
        * rendering/RenderText.cpp:

2014-01-16  Anders Carlsson  <andersca@apple.com>

        Run clang-modernize and let it add a bunch of missing overrides.

        Rubber-stamped by Sam Weinig.

        * dom/BeforeLoadEvent.h:
        * dom/ClassNodeList.h:
        * dom/Comment.h:
        * dom/CompositionEvent.h:
        * dom/DecodedDataDocumentParser.h:
        * dom/DeviceMotionEvent.h:
        * dom/DeviceOrientationEvent.h:
        * dom/DocumentMarker.cpp:
        * dom/DocumentType.h:
        * dom/EntityReference.h:
        * dom/FocusEvent.h:
        * dom/HashChangeEvent.h:
        * dom/MessageEvent.h:
        * dom/MouseEvent.h:
        * dom/MouseRelatedEvent.h:
        * dom/MutationEvent.h:
        * dom/NameNodeList.h:
        * dom/Notation.h:
        * dom/OverflowEvent.h:
        * dom/PendingScript.h:
        * dom/PopStateEvent.h:
        * dom/ProcessingInstruction.h:
        * dom/ScriptElement.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/ScriptableDocumentParser.h:
        * dom/ScriptedAnimationController.h:
        * dom/StringCallback.cpp:
        * dom/WheelEvent.h:
        * html/FTPDirectoryDocument.h:
        * html/FileInputType.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLDocument.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLViewSourceDocument.h:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/MediaDocument.cpp:
        * html/MediaDocument.h:
        * html/MediaKeyEvent.h:
        * html/PluginDocument.cpp:
        * html/RadioNodeList.h:
        * html/TextDocument.h:
        * html/canvas/EXTDrawBuffers.h:
        * html/canvas/EXTTextureFilterAnisotropic.h:
        * html/canvas/OESElementIndexUint.h:
        * html/canvas/OESStandardDerivatives.h:
        * html/canvas/OESTextureFloat.h:
        * html/canvas/OESTextureFloatLinear.h:
        * html/canvas/OESTextureHalfFloat.h:
        * html/canvas/OESTextureHalfFloatLinear.h:
        * html/canvas/OESVertexArrayObject.h:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLCompressedTextureATC.h:
        * html/canvas/WebGLCompressedTexturePVRTC.h:
        * html/canvas/WebGLCompressedTextureS3TC.h:
        * html/canvas/WebGLContextEvent.h:
        * html/canvas/WebGLContextObject.h:
        * html/canvas/WebGLDebugRendererInfo.h:
        * html/canvas/WebGLDebugShaders.h:
        * html/canvas/WebGLDepthTexture.h:
        * html/canvas/WebGLFramebuffer.cpp:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLLoseContext.h:
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLSharedObject.h:
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLVertexArrayObjectOES.h:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLViewSourceParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TrackEvent.h:
        * svg/SVGAElement.h:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontData.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathBuilder.h:
        * svg/SVGPathByteStreamBuilder.h:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathSegArcAbs.h:
        * svg/SVGPathSegArcRel.h:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubicAbs.h:
        * svg/SVGPathSegCurvetoCubicRel.h:
        * svg/SVGPathSegCurvetoCubicSmoothAbs.h:
        * svg/SVGPathSegCurvetoCubicSmoothRel.h:
        * svg/SVGPathSegCurvetoQuadraticAbs.h:
        * svg/SVGPathSegCurvetoQuadraticRel.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.h:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.h:
        * svg/SVGPathSegLinetoAbs.h:
        * svg/SVGPathSegLinetoHorizontalAbs.h:
        * svg/SVGPathSegLinetoHorizontalRel.h:
        * svg/SVGPathSegLinetoRel.h:
        * svg/SVGPathSegLinetoVerticalAbs.h:
        * svg/SVGPathSegLinetoVerticalRel.h:
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathSegMovetoAbs.h:
        * svg/SVGPathSegMovetoRel.h:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathTraversalStateBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGZoomEvent.h:
        * svg/animation/SVGSMILElement.cpp:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImageChromeClient.h:
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilter.h:
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.h:

2014-01-16  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r162145): media/video-controls-visible-audio-only.html fails
        https://bugs.webkit.org/show_bug.cgi?id=127147

        Reviewed by Eric Carlson.

        Reset the MediaSessionManager's restrictions to their default values before
        each run.

        Add a new virtual method "resetRestrictions()" so that each port-specific
        MediaSessionManager can reset the restrictions to their default values.
        Call this from Internals::resetToConsistentState() so that tests which change
        the restrictions don't affect later tests.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::resetRestrictions):
        * platform/audio/MediaSessionManager.h:
        (WebCore::MediaSessionManager::~MediaSessionManager):
        * platform/audio/ios/MediaSessionManagerIOS.h:
        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::resetRestrictions):
        * testing/Internals.cpp:
        (WebCore::Internals::resetToConsistentState):

2014-01-16  Alex Christensen  <achristensen@webkit.org>

        Compile fix for WinCairo after r162138.
        https://bugs.webkit.org/show_bug.cgi?id=127140

        Reviewed by Beth Dakin.

        * page/FrameView.cpp:
        (WebCore::FrameView::extendedBackgroundRect):
        Use unscaledDocumentRect for extendedBackgroundRect without accelerated compositing.

2014-01-16  Brady Eidson  <beidson@apple.com>

        IDB: delete object store support
        <rdar://problem/15779641> and https://bugs.webkit.org/show_bug.cgi?id=127123

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::DeleteObjectStoreOperation::transaction):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        More non-Mac build fix.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        * platform/network/cf/CookieJarCFNet.cpp: Remove a spurious semicolon.

2014-01-16  Andy Estes  <aestes@apple.com>

        Another iOS build fix.

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::m_objcObserver):

2014-01-16  Alexey Proskuryakov  <ap@apple.com>

        [Mac] [iOS] Add support for CFHTTPCookieStorageAcceptPolicyExclusivelyFromMainDocumentDomain
        https://bugs.webkit.org/show_bug.cgi?id=127139

        Reviewed by Brady Eidson.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Pass first party URL down, because reading cookies depends on it when this policy
        in in action.

        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::copyCookiesForURLWithFirstPartyURL):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        Use a new CFNetwork API that takes first party URL.

        * platform/network/mac/CookieJarMac.mm:
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        Pass first party URL (and null in deleteCookie, as there is none).

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Removed a call to shouldRelaxThirdPartyCookiePolicy(), which no longer exists
        in trunk.

2014-01-16  Andy Estes  <aestes@apple.com>

        Fix the iOS build after r162150.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):

2014-01-16  Dean Jackson  <dino@apple.com>

        glReadPixels should use UNSIGNED_BYTE on iOS
        https://bugs.webkit.org/show_bug.cgi?id=127148

        Reviewed by Benjamin Poulain.

        We were incorrectly mapping GL_UNSIGNED_INT_8_8_8_8_REV to
        GL_RGBA on iOS. It's only used in glReadPixels, so should
        be GL_UNSIGNED_BYTE.

        This is covered by lots of tests in the Khronos test suite,
        that now pass on iOS.

        * platform/graphics/ios/GraphicsContext3DIOS.h:

2014-01-16  Anders Carlsson  <andersca@apple.com>

        Change all uses of FINAL to final now that all our compilers support it
        https://bugs.webkit.org/show_bug.cgi?id=127142

        Reviewed by Benjamin Poulain.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/VideoStreamTrack.h:
        * Modules/notifications/Notification.h:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/websockets/WebSocket.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.h:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:
        * css/CSSCanvasValue.h:
        * css/CSSFontSelector.h:
        * css/CSSStyleSheet.h:
        * dom/Attr.h:
        * dom/BeforeUnloadEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Clipboard.cpp:
        * dom/Comment.h:
        * dom/DatasetDOMStringMap.h:
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentEventQueue.h:
        * dom/DocumentType.h:
        * dom/Element.h:
        * dom/EntityReference.h:
        * dom/EventContext.h:
        * dom/EventTarget.h:
        * dom/FocusEvent.h:
        * dom/LiveNodeList.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/Node.h:
        * dom/Notation.h:
        * dom/ProcessingInstruction.h:
        * dom/PseudoElement.h:
        * dom/ShadowRoot.h:
        * dom/StaticNodeList.h:
        * dom/StyledElement.h:
        * dom/TemplateContentDocumentFragment.h:
        * dom/Text.h:
        * dom/WebKitNamedFlow.h:
        * editing/ios/EditorIOS.mm:
        * editing/mac/EditorMac.mm:
        * editing/markup.cpp:
        * fileapi/Blob.cpp:
        * fileapi/FileReader.h:
        * html/ClassList.h:
        * html/DOMSettableTokenList.h:
        * html/FTPDirectoryDocument.cpp:
        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        * html/HTMLAllCollection.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBDIElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLDListElement.h:
        * html/HTMLDataListElement.h:
        * html/HTMLDetailsElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDocument.h:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.cpp:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLModElement.h:
        * html/HTMLNameCollection.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOptionsCollection.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.h:
        * html/HTMLUnknownElement.h:
        * html/HTMLVideoElement.h:
        * html/HTMLViewSourceDocument.h:
        * html/ImageDocument.cpp:
        * html/ImageDocument.h:
        * html/LabelableElement.h:
        * html/LabelsNodeList.h:
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        * html/MediaDocument.h:
        * html/MediaFragmentURIParser.h:
        * html/PluginDocument.cpp:
        * html/PluginDocument.h:
        * html/RangeInputType.h:
        * html/TextDocument.h:
        * html/parser/TextDocumentParser.h:
        * html/parser/TextViewSourceParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.h:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TrackListBase.h:
        * html/track/WebVTTElement.h:
        * inspector/CommandLineAPIModule.h:
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/WorkerInspectorController.h:
        * loader/SinkDocument.cpp:
        * loader/SinkDocument.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/icon/IconLoader.h:
        * mathml/MathMLSelectElement.h:
        * page/DOMTimer.h:
        * page/DOMWindow.h:
        * page/EventSource.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/MainFrame.h:
        * page/PageDebuggable.h:
        * page/PageSerializer.cpp:
        * page/Performance.h:
        * page/SuspendableTimer.h:
        * page/animation/KeyframeAnimation.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * platform/ClockGeneric.h:
        * platform/efl/ScrollbarThemeEfl.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.h:
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/ios/WebSafeGCActivityCallbackIOS.h:
        * platform/ios/WebSafeIncrementalSweeperIOS.h:
        * platform/mac/PlatformClockCA.h:
        * platform/mac/PlatformClockCM.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/mac/MediaStreamCenterMac.h:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.h:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/text/LocaleNone.cpp:
        * platform/text/PlatformLocale.cpp:
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBox.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.cpp:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTextTrackCue.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/ContentData.h:
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextRunRenderingContext.h:
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.h:
        * svg/SVGDocument.h:
        * svg/SVGElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFilter.h:
        * workers/AbstractWorker.h:
        * workers/SharedWorker.h:
        * workers/Worker.h:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.h:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XSLStyleSheet.h:

2014-01-15  Myles C. Maxfield  <mmaxfield@apple.com>

        Draw all underline segments in a particular run in the same call
        https://bugs.webkit.org/show_bug.cgi?id=127082

        Reviewed by Simon Fraser.

        Instead of running CGContextFillRect() in a loop, we can instead call CGContextFillRects()

        In my tests, this seems to have about 0.5% speedup.

        This patch creates some redundant code, but I think that refactoring would make the code
        much less readable. I also am hesitant to make drawLineForText call drawLinesForText because
        of the overhead of the vector that would be needed.

        As there is no behavior change, no new tests are necessary

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLinesForText):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLinesForText):
        * rendering/InlineTextBox.cpp:
        (WebCore::drawSkipInkUnderline):

2014-01-16  Brady Eidson  <beidson@apple.com>

        Use KeyedCoding as a persistent storage mechanism for blobs
        https://bugs.webkit.org/show_bug.cgi?id=127012

        Reviewed by Anders Carlsson.

        Add basic KeyedDecoder interface that is the inverse of KeyedEncoder:
        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::decodeVerifiedEnum):
        (WebCore::KeyedDecoder::decodeObject):
        (WebCore::KeyedDecoder::decodeObjects):

        Use KeyedEncoder/Decoder to encode/decode IDBKeyPath:
        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::encode):
        (WebCore::IDBKeyPath::decode):
        * Modules/indexeddb/IDBKeyPath.h:

        * WebCore.exp.in:

2014-01-16  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict inline <video> playback
        https://bugs.webkit.org/show_bug.cgi?id=127113

        Reviewed by Jer Noble.

        Test: media/video-fullscreeen-only-playback.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updatePlayState): Drive-by change to not tell the media session that
            playback is starting if the media player is already playing. Enter fullscreen if the media
            session says it is required.

        * html/HTMLMediaSession.cpp:
        (WebCore::HTMLMediaSession::clientWillBeginPlayback): Make it const.
        (WebCore::HTMLMediaSession::requiresFullscreenForVideoPlayback): New, see if the specified
            media element must be played in fullscreen based on the media session settings, document
            settings, and attributes.
        * html/HTMLMediaSession.h:

        * platform/audio/MediaSession.h: pauseSession shouldn't be virtual.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): Return immediately if ConcurrentPlaybackNotPermitted
            is not set.
        (WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback): New.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.mm:
        (WebCore::MediaSessionManageriOS::MediaSessionManageriOS): Set InlineVideoPlaybackRestricted if
            running on an iPhone or iPod class device.

        * testing/Internals.cpp:
        (WebCore::Internals::setMediaSessionRestrictions): Support InlineVideoPlaybackRestricted.

2014-01-16  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Timothy Horton.

        Rename webGLPolicyForSite to webGLPolicyForURL.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForURL):

2014-01-16  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Guarding HTMLMediaSession with ENABLE(VIDEO)
        https://bugs.webkit.org/show_bug.cgi?id=127126

        Reviewed by Eric Carlson.

        No new tests needed.

        * html/HTMLMediaSession.cpp:
        * html/HTMLMediaSession.h:

2014-01-16  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove workaround for compilers not supporting explicit override control
        https://bugs.webkit.org/show_bug.cgi?id=127111

        Reviewed by Anders Carlsson.

        Now all compilers support explicit override control, this workaround can be removed.

        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.h:
        * Modules/encryptedmedia/CDMPrivateAVFoundation.mm:
        * Modules/encryptedmedia/MediaKeyMessageEvent.h:
        * Modules/encryptedmedia/MediaKeyNeededEvent.h:
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/DOMWindowIndexedDatabase.h:
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseCallbacksImpl.h:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:
        * Modules/indieui/UIRequestEvent.h:
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaConstraintsImpl.h:
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/MediaStreamTrackEvent.h:
        * Modules/mediastream/MediaStreamTrackSourcesRequest.h:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
        * Modules/mediastream/RTCStatsRequestImpl.h:
        * Modules/mediastream/RTCStatsResponse.h:
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/mediastream/VideoStreamTrack.h:
        * Modules/networkinfo/NetworkInfoConnection.h:
        * Modules/notifications/DOMWindowNotifications.h:
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * Modules/speech/SpeechRecognition.h:
        * Modules/speech/SpeechRecognitionError.h:
        * Modules/speech/SpeechRecognitionEvent.h:
        * Modules/speech/SpeechSynthesis.h:
        * Modules/speech/SpeechSynthesisUtterance.h:
        * Modules/webaudio/AnalyserNode.h:
        * Modules/webaudio/AudioBasicInspectorNode.h:
        * Modules/webaudio/AudioBasicProcessorNode.h:
        * Modules/webaudio/AudioBufferSourceNode.h:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioDestinationNode.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeInput.h:
        * Modules/webaudio/AudioParam.h:
        * Modules/webaudio/AudioProcessingEvent.h:
        * Modules/webaudio/BiquadDSPKernel.h:
        * Modules/webaudio/BiquadProcessor.h:
        * Modules/webaudio/ChannelMergerNode.h:
        * Modules/webaudio/ChannelSplitterNode.h:
        * Modules/webaudio/ConvolverNode.h:
        * Modules/webaudio/DefaultAudioDestinationNode.h:
        * Modules/webaudio/DelayDSPKernel.h:
        * Modules/webaudio/DelayProcessor.h:
        * Modules/webaudio/DynamicsCompressorNode.h:
        * Modules/webaudio/GainNode.h:
        * Modules/webaudio/MediaElementAudioSourceNode.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/MediaStreamAudioSourceNode.h:
        * Modules/webaudio/OfflineAudioCompletionEvent.h:
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        * Modules/webaudio/OscillatorNode.h:
        * Modules/webaudio/PannerNode.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webaudio/WaveShaperDSPKernel.h:
        * Modules/webaudio/WaveShaperProcessor.h:
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/SQLTransaction.h:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/websockets/CloseEvent.h:
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketDeflateFramer.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMediaControls.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityProgressIndicator.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySearchFieldButtons.h:
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableHeaderContainer.h:
        * accessibility/AccessibilityTableRow.h:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSEventListener.h:
        * bindings/js/JSLazyEventListener.h:
        * bindings/js/JSMutationCallback.h:
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WebCoreTypedArrayController.h:
        * bindings/js/WorkerScriptDebugServer.h:
        * bridge/c/c_class.h:
        * bridge/c/c_instance.h:
        * bridge/c/c_runtime.h:
        * bridge/runtime_root.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:
        * css/CSSBasicShapes.h:
        * css/CSSCanvasValue.h:
        * css/CSSCharsetRule.h:
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceRule.h:
        * css/CSSFontSelector.h:
        * css/CSSGroupingRule.h:
        * css/CSSHostRule.h:
        * css/CSSImportRule.h:
        * css/CSSMediaRule.h:
        * css/CSSPageRule.h:
        * css/CSSStyleRule.h:
        * css/CSSStyleSheet.h:
        * css/CSSSupportsRule.h:
        * css/CSSUnknownRule.h:
        * css/FontLoader.cpp:
        * css/FontLoader.h:
        * css/PropertySetCSSStyleDeclaration.h:
        * css/WebKitCSSFilterRule.h:
        * css/WebKitCSSKeyframeRule.h:
        * css/WebKitCSSKeyframesRule.h:
        * css/WebKitCSSRegionRule.h:
        * css/WebKitCSSViewportRule.h:
        * dom/Attr.h:
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.h:
        * dom/CDATASection.h:
        * dom/CharacterData.h:
        * dom/ChildNodeList.h:
        * dom/Clipboard.cpp:
        * dom/ClipboardEvent.h:
        * dom/ContainerNode.h:
        * dom/DOMImplementation.cpp:
        * dom/DatasetDOMStringMap.h:
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationController.h:
        * dom/Document.h:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentEventQueue.h:
        * dom/DocumentFragment.h:
        * dom/Element.h:
        * dom/ErrorEvent.h:
        * dom/EventContext.h:
        * dom/EventTarget.h:
        * dom/FocusEvent.h:
        * dom/KeyboardEvent.h:
        * dom/LiveNodeList.h:
        * dom/MessagePort.h:
        * dom/MouseEvent.h:
        * dom/MutationRecord.cpp:
        * dom/Node.h:
        * dom/PageTransitionEvent.h:
        * dom/ProcessingInstruction.h:
        * dom/ProgressEvent.h:
        * dom/PseudoElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/ShadowRoot.h:
        * dom/StaticNodeList.h:
        * dom/StyledElement.h:
        * dom/TagNodeList.h:
        * dom/TemplateContentDocumentFragment.h:
        * dom/Text.h:
        * dom/TextEvent.h:
        * dom/TouchEvent.h:
        * dom/TransitionEvent.h:
        * dom/UIEvent.h:
        * dom/WebKitAnimationEvent.h:
        * dom/WebKitNamedFlow.h:
        * dom/WebKitTransitionEvent.h:
        * editing/AppendNodeCommand.h:
        * editing/ApplyBlockElementCommand.h:
        * editing/ApplyStyleCommand.h:
        * editing/BreakBlockquoteCommand.h:
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteFromTextNodeCommand.h:
        * editing/EditCommand.h:
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertNodeBeforeCommand.h:
        * editing/InsertTextCommand.h:
        * editing/MergeIdenticalElementsCommand.h:
        * editing/RemoveCSSPropertyCommand.h:
        * editing/RemoveNodeCommand.h:
        * editing/ReplaceNodeWithSpanCommand.h:
        * editing/SetNodeAttributeCommand.h:
        * editing/SetSelectionCommand.h:
        * editing/SpellChecker.h:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SpellingCorrectionCommand.h:
        * editing/SplitElementCommand.h:
        * editing/SplitTextNodeCommand.h:
        * editing/WrapContentsInDummySpanCommand.h:
        * editing/ios/EditorIOS.mm:
        * editing/markup.cpp:
        * fileapi/Blob.cpp:
        * fileapi/Blob.h:
        * fileapi/File.h:
        * fileapi/FileReader.h:
        * fileapi/FileThreadTask.h:
        * history/BackForwardList.h:
        * html/BaseButtonInputType.h:
        * html/BaseCheckableInputType.h:
        * html/BaseChooserOnlyDateAndTimeInputType.h:
        * html/BaseClickableWithKeyInputType.h:
        * html/BaseDateAndTimeInputType.h:
        * html/BaseTextInputType.h:
        * html/ButtonInputType.h:
        * html/CheckboxInputType.h:
        * html/ClassList.h:
        * html/ColorInputType.h:
        * html/DOMSettableTokenList.h:
        * html/DateInputType.h:
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.h:
        * html/EmailInputType.h:
        * html/FTPDirectoryDocument.cpp:
        * html/FileInputType.h:
        * html/FormAssociatedElement.cpp:
        * html/FormAssociatedElement.h:
        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.h:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDetailsElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLDocument.h:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormControlElementWithState.h:
        * html/HTMLFormControlsCollection.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLImageLoader.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaSession.h:
        * html/HTMLMediaSource.h:
        * html/HTMLMetaElement.h:
        * html/HTMLMeterElement.h:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLOutputElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTablePartElement.h:
        * html/HTMLTableRowsCollection.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTemplateElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.h:
        * html/HTMLTitleElement.h:
        * html/HTMLTrackElement.h:
        * html/HTMLUListElement.h:
        * html/HTMLUnknownElement.h:
        * html/HTMLVideoElement.h:
        * html/HiddenInputType.h:
        * html/ImageDocument.cpp:
        * html/ImageInputType.h:
        * html/LabelableElement.h:
        * html/LabelsNodeList.h:
        * html/MediaController.h:
        * html/MonthInputType.h:
        * html/NumberInputType.h:
        * html/PasswordInputType.h:
        * html/PluginDocument.h:
        * html/RadioInputType.h:
        * html/RangeInputType.h:
        * html/ResetInputType.h:
        * html/SearchInputType.h:
        * html/SubmitInputType.h:
        * html/TelephoneInputType.h:
        * html/TextFieldInputType.h:
        * html/TextInputType.h:
        * html/TimeInputType.h:
        * html/URLInputType.h:
        * html/WeekInputType.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.h:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/TextDocumentParser.h:
        * html/shadow/DetailsMarkerControl.h:
        * html/shadow/InsertionPoint.h:
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.h:
        * html/shadow/MediaControlsApple.h:
        * html/shadow/MediaControlsGtk.h:
        * html/shadow/MeterShadowElement.h:
        * html/shadow/ProgressShadowElement.h:
        * html/shadow/SliderThumbElement.cpp:
        * html/shadow/SliderThumbElement.h:
        * html/shadow/SpinButtonElement.h:
        * html/shadow/TextControlInnerElements.h:
        * html/shadow/YouTubeEmbedShadowElement.h:
        * html/track/AudioTrack.h:
        * html/track/AudioTrackList.h:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandTextTrack.h:
        * html/track/InbandWebVTTTextTrack.h:
        * html/track/LoadableTextTrack.h:
        * html/track/TextTrack.h:
        * html/track/TextTrackCue.h:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackCueGeneric.h:
        * html/track/TextTrackList.h:
        * html/track/TrackListBase.h:
        * html/track/VideoTrack.h:
        * html/track/VideoTrackList.h:
        * html/track/WebVTTElement.h:
        * inspector/CommandLineAPIModule.h:
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageConsoleAgent.h:
        * inspector/PageInjectedScriptHost.h:
        * inspector/PageInjectedScriptManager.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.h:
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        * loader/FrameNetworkingContext.h:
        * loader/ImageLoader.h:
        * loader/NavigationScheduler.cpp:
        * loader/NetscapePlugInStreamLoader.h:
        * loader/PingLoader.h:
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.h:
        * loader/WorkerThreadableLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedFontClient.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedImageClient.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedRawResourceClient.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedSVGDocumentClient.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedStyleSheetClient.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/icon/IconLoader.h:
        * mathml/MathMLElement.h:
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLMathElement.h:
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.h:
        * page/CaptionUserPreferencesMediaAF.h:
        * page/Chrome.h:
        * page/DOMTimer.h:
        * page/DOMWindow.h:
        * page/DOMWindowExtension.h:
        * page/EventSource.h:
        * page/Frame.h:
        * page/FrameView.h:
        * page/PageDebuggable.h:
        * page/PageSerializer.cpp:
        * page/Performance.h:
        * page/SuspendableTimer.h:
        * page/animation/ImplicitAnimation.h:
        * page/animation/KeyframeAnimation.h:
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h:
        * page/scrolling/ios/ScrollingTreeIOS.h:
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * pdf/ios/PDFDocument.cpp:
        * pdf/ios/PDFDocument.h:
        * platform/CalculationValue.h:
        * platform/ClockGeneric.h:
        * platform/MainThreadTask.h:
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        * platform/RefCountedSupplement.h:
        * platform/ScrollView.h:
        * platform/Scrollbar.h:
        * platform/Timer.h:
        * platform/animation/TimingFunction.h:
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/EqualPowerPanner.h:
        * platform/audio/HRTFPanner.h:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/mac/AudioDestinationMac.h:
        * platform/audio/nix/AudioDestinationNix.h:
        * platform/efl/RenderThemeEfl.h:
        * platform/efl/ScrollbarEfl.h:
        * platform/efl/ScrollbarThemeEfl.h:
        * platform/graphics/AudioTrackPrivate.h:
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/InbandTextTrackPrivate.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/VideoTrackPrivate.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/VideoTrackPrivateAVF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateAVCF.h:
        * platform/graphics/avfoundation/cf/InbandTextTrackPrivateLegacyAVCF.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/win/LegacyCACFLayerTreeHost.h:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.h:
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/efl/GraphicsContext3DPrivate.h:
        * platform/graphics/egl/GLContextFromCurrentEGL.h:
        * platform/graphics/filters/DistantLightSource.h:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEDisplacementMap.h:
        * platform/graphics/filters/FEFlood.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/filters/PointLightSource.h:
        * platform/graphics/filters/SpotLightSource.h:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h:
        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        * platform/graphics/ios/TextTrackRepresentationIOS.h:
        * platform/graphics/surfaces/GLTransportSurface.h:
        * platform/graphics/surfaces/egl/EGLContext.h:
        * platform/graphics/surfaces/egl/EGLSurface.h:
        * platform/graphics/surfaces/egl/EGLXSurface.h:
        * platform/graphics/surfaces/glx/GLXContext.h:
        * platform/graphics/surfaces/glx/GLXSurface.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/TextureMapperGL.h:
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * platform/graphics/texmap/TextureMapperLayer.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:
        * platform/graphics/texmap/coordinated/CompositingCoordinator.h:
        * platform/graphics/texmap/coordinated/CoordinatedBackingStore.h:
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterProgram.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:
        * platform/graphics/texmap/coordinated/UpdateAtlas.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * platform/ios/DeviceMotionClientIOS.h:
        * platform/ios/DeviceOrientationClientIOS.h:
        * platform/ios/ScrollAnimatorIOS.h:
        * platform/ios/ScrollbarThemeIOS.h:
        * platform/ios/WebSafeGCActivityCallbackIOS.h:
        * platform/ios/WebSafeIncrementalSweeperIOS.h:
        * platform/mac/PlatformClockCA.h:
        * platform/mac/PlatformClockCM.h:
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollbarThemeMac.h:
        * platform/mediastream/MediaStreamTrackPrivate.h:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        * platform/mediastream/mac/AVAudioCaptureSource.h:
        * platform/mediastream/mac/AVMediaCaptureSource.h:
        * platform/mediastream/mac/AVVideoCaptureSource.h:
        * platform/mediastream/mac/MediaStreamCenterMac.h:
        * platform/mock/DeviceMotionClientMock.h:
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/mock/MockMediaStreamCenter.h:
        * platform/mock/RTCDataChannelHandlerMock.h:
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/BlobResourceHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:
        * platform/nix/RenderThemeNix.h:
        * platform/nix/ScrollbarThemeNix.h:
        * platform/text/LocaleICU.h:
        * platform/text/LocaleNone.cpp:
        * platform/text/PlatformLocale.cpp:
        * platform/text/mac/LocaleMac.h:
        * platform/text/win/LocaleWin.h:
        * platform/win/PopupMenuWin.h:
        * plugins/PluginView.h:
        * rendering/AutoTableLayout.h:
        * rendering/ClipPathOperation.h:
        * rendering/EllipsisBox.h:
        * rendering/FilterEffectRenderer.h:
        * rendering/FixedTableLayout.h:
        * rendering/InlineElementBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderElement.h:
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderGrid.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderImageResourceStyleImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.h:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderScrollbarTheme.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTextFragment.h:
        * rendering/RenderTextTrackCue.h:
        * rendering/RenderThemeIOS.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        * rendering/RootInlineBox.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFraction.h:
        * rendering/mathml/RenderMathMLMath.h:
        * rendering/mathml/RenderMathMLOperator.h:
        * rendering/mathml/RenderMathMLRoot.h:
        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLScripts.h:
        * rendering/mathml/RenderMathMLSpace.h:
        * rendering/mathml/RenderMathMLSquareRoot.h:
        * rendering/mathml/RenderMathMLUnderOver.h:
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.h:
        * rendering/style/ContentData.h:
        * rendering/style/StyleCachedImage.h:
        * rendering/style/StyleCachedImageSet.h:
        * rendering/style/StyleGeneratedImage.h:
        * rendering/style/StylePendingImage.h:
        * rendering/svg/RenderSVGBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.h:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:
        * rendering/svg/SVGTextRunRenderingContext.h:
        * storage/StorageAreaImpl.h:
        * storage/StorageNamespaceImpl.h:
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphDefElement.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAltGlyphItemElement.h:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGDocument.h:
        * svg/SVGElement.h:
        * svg/SVGElementInstance.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDropShadowElement.h:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGGlyphRefElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGGraphicsElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.h:
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.h:
        * svg/SVGTransformable.h:
        * svg/SVGUnknownElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.h:
        * svg/animation/SVGSMILElement.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:
        * svg/graphics/filters/SVGFilter.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h:
        * svg/properties/SVGListPropertyTearOff.h:
        * svg/properties/SVGPathSegListPropertyTearOff.h:
        * svg/properties/SVGPropertyTearOff.h:
        * testing/InternalSettings.cpp:
        * testing/Internals.cpp:
        * testing/MockCDM.cpp:
        * testing/MockCDM.h:
        * workers/AbstractWorker.h:
        * workers/DedicatedWorkerGlobalScope.h:
        * workers/DedicatedWorkerThread.h:
        * workers/SharedWorker.h:
        * workers/SharedWorkerGlobalScope.h:
        * workers/SharedWorkerThread.h:
        * workers/Worker.h:
        * workers/WorkerEventQueue.cpp:
        * workers/WorkerEventQueue.h:
        * workers/WorkerGlobalScope.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerObjectProxy.h:
        * workers/WorkerScriptLoader.h:
        * workers/WorkerThread.cpp:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathFunctions.cpp:
        * xml/XPathPath.h:
        * xml/XPathPredicate.h:
        * xml/XSLStyleSheet.h:

2014-01-16  Beth Dakin  <bdakin@apple.com>

        Speculative Win Cairo build fix.

        These need to be inside an ifdef.
        * page/FrameView.cpp:
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):

2014-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        text-emphasis-position CSS property doesn't recognize 'left' and 'right'
        https://bugs.webkit.org/show_bug.cgi?id=126611

        Reviewed by Simon Fraser.

        This patch allows the text-emphasis-position to accept the "left" and
        "right" CSS values. In horizontal writing modes, these values no not
        change behavior. In vertical writing modes, however, these values specify
        which side to place the emphasis mark. Similarly, in vertical writing
        modes, the "above" and "below" values should not change behavior.

        However, in order to keep existing behavior, if neither "left" nor "right"
        is specified, we should draw as if the appropriate value were
        specified ("over" -> "right" and "under" -> "left"). Note that this
        will have to be updated when we implement the
        "text-orientation: sideways-left" CSS property.

        Tests: fast/text/emphasis-horizontal-left-right.html
               fast/text/emphasis-vertical-over-right.html
               fast/text/emphasis-vertical-over-under.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderEmphasisPositionFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextEmphasisPosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::valueToEmphasisPosition):
        (WebCore::ApplyPropertyTextEmphasisPosition::applyValue):
        (WebCore::ApplyPropertyTextEmphasisPosition::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::emphasisMarkExistsAndIsAbove):
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * rendering/style/StyleRareInheritedData.h:

2014-01-16  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit is not firing AXMenuOpenedNotification
        https://bugs.webkit.org/show_bug.cgi?id=126993

        Reviewed by Mario Sanchez Prada.

        To monitor for menu open notifications, we need to know which children are added to
        the render tree, so the childrenChanged() method has been updated to allow for that.
        Once we know the new child, we can then check what kind of role it has.

        I also found a flakiness issue with DRT where posting a notification back to DRT
        would sometimes cause a new notification to be queued, which would then be lost when the
        queue was cleared. This was fixed by copying the notifications to post before iterating them.

        Test: platform/mac/accessibility/aria-menu-open-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::checkForOpenMenu):
        (WebCore::AXObjectCache::childrenChanged):
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::childrenChanged):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::insertChildInternal):
        (WebCore::RenderElement::styleWillChange):

2014-01-16  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit is not firing AXMenuItemSelectedNotification
        https://bugs.webkit.org/show_bug.cgi?id=127081

        Reviewed by Mario Sanchez Prada.

        Monitor for when a menu item either gains focus() or has aria-selected set,
        in which case, we need to fire a specific notification.

        Test: platform/mac/accessibility/aria-menu-item-selected-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):
            This method was declared in the header, but never implemented, leading to compilation issues.
        (WebCore::AXObjectCache::handleMenuItemSelected):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
            Allow the core class to handle focus changes first, then pass off to platform
        (WebCore::AXObjectCache::selectedChildrenChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::platformHandleFocusedUIElementChanged):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
            Allow menu items to expose a description attribute.

2014-01-16  Andy Estes  <aestes@apple.com>

        [iOS] Fix build issues with exported headers

        * Configurations/WebCore.xcconfig: Allowed UIKit to link against
        WebCore.
        * page/ios/WebEventRegion.h: Removed ENABLE(TOUCH_EVENTS), which are
        always enabled on iOS.

2014-01-16  Dirk Schulze  <krit@webkit.org>

        Rename functions in SVGDocumentExtension
        https://bugs.webkit.org/show_bug.cgi?id=127046

        Reviewed by Sam Weinig.

        Change some function names in SVGDocumentExtension
        to make them more descriptive.

        Simple refactoring. No new tests.

        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isIdOfPendingResource):
        (WebCore::SVGDocumentExtensions::isElementWithPendingResources):
        (WebCore::SVGDocumentExtensions::isPendingResource):
        (WebCore::SVGDocumentExtensions::clearHasPendingResourcesIfPossible):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResourceForRemoval):
        (WebCore::SVGDocumentExtensions::markPendingResourcesForRemoval):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResourcesForRemovalMap): The name is not great but a bit more descriptive.
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::buildPendingResourcesIfNeeded):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::buildPendingResource):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::buildPendingResource):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::buildPendingResource):

2014-01-15  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][EFL][NIX] Do not use PrintContext, Frame and DocumentLoader in Errors
        https://bugs.webkit.org/show_bug.cgi?id=127047

        Reviewed by Martin Robinson.

        Using PrintContext, Frame and DocumentLoader in platform is a
        layering violation.
        Change printing error methods to receive a failing URL instead of
        receiving a PrintContext that was used only to get the failing
        URL.

        * platform/efl/ErrorsEfl.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/efl/ErrorsEfl.h:
        * platform/gtk/ErrorsGtk.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/gtk/ErrorsGtk.h:
        * platform/nix/ErrorsNix.cpp:
        (WebCore::printError):
        (WebCore::printerNotFoundError):
        (WebCore::invalidPageRangeToPrint):
        * platform/nix/ErrorsNix.h:

2014-01-15  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Enable accelerated compositing for fixed elements in named flows
        https://bugs.webkit.org/show_bug.cgi?id=125144

        Reviewed by David Hyatt.

        Add support for compositing for fixed positioned element that are collected
        inside a named flow. Prior to this patch, the fixed positioned elements were
        positioned and sized properly but only in the non-compositing scenario.

        Tests: compositing/regions/abs-in-named-flow-from-fixed-in-named-flow.html
               compositing/regions/fixed-in-diff-named-flows-zIndex.html
               compositing/regions/fixed-in-named-flow-clip-descendant.html
               compositing/regions/fixed-in-named-flow-from-abs-in-named-flow.html
               compositing/regions/fixed-in-named-flow-from-outflow.html
               compositing/regions/fixed-in-named-flow-got-transformed-parent.html
               compositing/regions/fixed-in-named-flow-lost-transformed-parent.html
               compositing/regions/fixed-in-named-flow-overlap-composited.html
               compositing/regions/fixed-in-named-flow-position-changed.html
               compositing/regions/fixed-in-named-flow-transformed-parent.html
               compositing/regions/fixed-in-named-flow-zIndex.html
               compositing/regions/fixed-in-named-flow.html
               compositing/regions/fixed-transformed-in-named-flow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirementsForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTreeForNamedFlowFixed):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:

2014-01-15  Benjamin Poulain  <bpoulain@apple.com>

        Fix the iOS build after r162114

        Unreviewed.

        * WebCore.exp.in: Move the symbol to the right section and add the missing symbols for iOS.

2014-01-15  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix painting when the composited region has overflow:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124887

        Reviewed by Alexandru Chiculita.

        When the layer of the region is composited, the region receives a GraphicsLayer of its own
        so the clipping coordinates (caused by overflow:hidden) must be relative to the
        GraphicsLayer coordinates in which the region gets painted.

        Also, while the painting is done relative to the location of the region's content box, the
        clipping is bound to the padding box of the region.

        Tests: compositing/regions/paint-inside-composited-region-overflow-hidden-versus-div.html
               compositing/regions/paint-inside-composited-region-overflow-hidden-versus-region.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFlowThreadIfRegion):

2014-01-15  Benjamin Poulain  <bpoulain@apple.com>

        Move user agent code to WebCore and unify some code between OS X and iOS
        https://bugs.webkit.org/show_bug.cgi?id=127080

        Reviewed by Sam Weinig.

        Move the duplicated code from WebView and WebPageProxy to two files
        in WebCore: UserAgentMac and UserAgentIOS.

        * Configurations/WebCore.xcconfig:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/ios/UserAgentIOS.mm: Added.
        (WebCore::platformSystemRootDirectory):
        (WebCore::osMarketingVersion):
        (WebCore::standardUserAgentWithApplicationName):
        * page/mac/UserAgent.h: Added.
        * page/mac/UserAgentMac.mm: Added.
        (WebCore::systemMarketingVersionForUserAgentString):
        (WebCore::standardUserAgentWithApplicationName):
        * platform/ios/WebCoreSystemInterfaceIOS.h:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-01-15  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * platform/text/TextAllInOne.cpp:

2014-01-15  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Clean up REMOTE_INSPECTOR code in OpenSource after the iOS merge
        https://bugs.webkit.org/show_bug.cgi?id=127069

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in:

2014-01-15  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Ryosuke Niwa.

        Move the contents of TextBreakIteratorICU.cpp to TextBreakIterator.cpp and remove TextBreakIteratorICU.cpp.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/TextBreakIterator.cpp:
        * platform/text/TextBreakIteratorICU.cpp: Removed.

2014-01-15  Eric Carlson  <eric.carlson@apple.com>

        MediaSessionManager shouldn't use std::map
        https://bugs.webkit.org/show_bug.cgi?id=127003

        Reviewed by Sam Weinig.

        No new tests, no functional change.

        Use an array instead of std::map.
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager):
        (WebCore::MediaSessionManager::addRestriction):
        (WebCore::MediaSessionManager::removeRestriction):
        (WebCore::MediaSessionManager::restrictions):
        (WebCore::MediaSessionManager::sessionWillBeginPlayback):
        * platform/audio/MediaSessionManager.h:

2014-01-15  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Unreviewed rollout, this caused a regression.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setFocused):
        (WebCore::FocusController::setActive):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::setIsInWindow):
        (WebCore::Page::setIsVisuallyIdle):
        (WebCore::Page::setIsVisible):
        (WebCore::Page::visibilityState):
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):

2014-01-15  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Resizing and entering/exiting full screen draws garbage
        https://bugs.webkit.org/show_bug.cgi?id=127077

        Reviewed by Dean Jackson.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs): Simplified logic regarding FBO switching.
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Make sure a few things
        are turned off that might affect blitting data from one FBO to another.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Actually turn dithering off!
        (WebCore::GraphicsContext3D::reshape): Mark the context as dirty when resizing so that
        the GL view is redrawn during resizing events.

2014-01-15  Roger Fong  <roger_fong@apple.com>

        Remove unnecessary call to webGLContextCreated
        https://bugs.webkit.org/show_bug.cgi?id=127000

        Reviewed by Brent Fulgham.

        Note that the functionality of webGLContextCreated will be handled by webGLPolicyForSite now.

        Tests: Unskipping tests skipped in r162002.

        * html/HTMLCanvasElement.cpp: Remove webGLContextCreated call.
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        Have the returned load policy default to WebGLAllow so as to not break clients that don't implement the method.
        (WebCore::FrameLoaderClient::webGLPolicyForSite):
        webGLPolicyForSite is now assuming the role of webGLContextCreated as well, pass in the whole site URL instead of just the host.
        * page/ChromeClient.h: Remove webGLContextCreated method.
        (WebCore::ChromeClient::decrementActivePageCount):

2014-01-15  Beth Dakin  <bdakin@apple.com>

        Repeating background images should continue into margin tiles
        https://bugs.webkit.org/show_bug.cgi?id=127021
        -and corresponding-
        <rdar://problem/15571300>

        Reviewed by Simon Fraser.

        This patch makes repeating background images continue into margin tiles. 

        RenderObject::repaintRectangle() now takes an addition bool parameter which 
        indicates whether or not the repaint rect should be clipped to the layer size.
        * WebCore.exp.in:

        These new functions on FrameView provide a way for code in the render tree to know 
        if the TiledBacking has a margin. tiledBacking() is now const. It should have 
        always been const, and it needs to be const to make these new functions const.
        * page/FrameView.cpp:
        (WebCore::FrameView::tiledBacking):
        (WebCore::FrameView::hasExtendedBackground):
        (WebCore::FrameView::extendedBackgroundRect):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::tiledBacking):

        If we’re painting the root background and it is an extended background, we need to 
        inflate the repaint rect to span the extended background. 
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::repaintLayerRectsForImage):

        To get the phase right on repeated background images on a page with margin tiles, 
        we need to make sure we factor the size of the margin tiles into the left and top 
        values that we use when calculating background image geometry.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):

        setBackingNeedsRepaintInRect() now takes GraphicsLayer::ShouldClipToLayer as a 
        parameter, just like setBackingNeedsRepaint(). 
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):

        setContentsNeedDisplayInRect() also takes a GraphicsLayer::ShouldClipToLayer now, 
        and it passes that information down to the GraphicsLayer.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect):
        * rendering/RenderLayerBacking.h:

        These two RenderObject functions now take an optional bool parameter which 
        indicates whether or not the rect should be clipped to the layer size. They use a 
        bool instead of the GraphicsLayer enum in order to avoid including GraphicsLayer.h 
        from within RenderObject.h. This seems like a simpler solution than adding a new 
        stand-alone file for this very simple enum.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintUsingContainer):
        (WebCore::RenderObject::repaintRectangle):
        * rendering/RenderObject.h:

        RenderView::backgroundRect needs to return the extendedBackgroundRect when it had 
        one.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::backgroundRect):

2014-01-15  Brian Burg  <bburg@apple.com>

        Web Inspector: capture probe samples on the backend
        https://bugs.webkit.org/show_bug.cgi?id=126668

        Reviewed by Joseph Pecoraro.

        Test: inspector-protocol/debugger/setProbe-multiple-actions.html

        Add the probe breakpoint action type. A probe action
        evaluates an expression on the script call frame, and
        the result is aggregated on a per-probe basis. Each
        evaluated expression result is called a probe sample.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::evaluateBreakpointAction): Teach
        the debug server to evaluate a probe.

        (WebCore::ScriptDebugServer::dispatchDidSampleProbe): Added.
        (WebCore::ScriptDebugServer::handleBreakpointHit): Increment a hit count.
        (WebCore::ScriptDebugServer::getActionsForBreakpoint):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::objectGroupForBreakpointAction): Added. Create an object
        group for each breakpoint action. Currently only probes make objects.
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enable): Remove stale comment.
        (WebCore::breakpointActionTypeForString): Add new case.
        (WebCore::InspectorDebuggerAgent::breakpointActionsFromProtocol): Make
        this a member function instead of a static function, so it can increment
        the breakpoint action identifier counter.
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl): Propagate the
        assigned breakpoint action identifiers.
        (WebCore::InspectorDebuggerAgent::setBreakpoint): Propagate the
        assigned breakpoint action identifiers.
        (WebCore::InspectorDebuggerAgent::removeBreakpoint): Release object
        groups for any actions that were associated with the removed breakpoint.
        (WebCore::InspectorDebuggerAgent::didSampleProbe): Added.
        (WebCore::InspectorDebuggerAgent::clearResolvedBreakpointState): Renamed from clear().
        (WebCore::InspectorDebuggerAgent::didClearGlobalObject): Renamed from reset().
        * inspector/InspectorDebuggerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearMainFrameWindowObject):
        * inspector/ScriptBreakpoint.h:
        (WebCore::ScriptBreakpointAction::ScriptBreakpointAction): Add identifier member.
        * inspector/ScriptDebugListener.h:

2014-01-15  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Validation function for compressed formats incorrect
        https://bugs.webkit.org/show_bug.cgi?id=127023

        Reviewed by Dean Jackson.

        No new tests. Covered by existing WebGL compressed texture tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData): Revise to match specifications.

2014-01-15  Andreas Kling  <akling@apple.com>

        Remove the CSS selector profiler.
        <https://webkit.org/b/127039>

        The selector profiler was painting a mostly fictional picture of what
        selectors we were spending time on. It never really grokked the fast
        path selectors, nor did it understand recent additions like the extra
        cascading pass or the selector JIT.

        Somewhat ironically, this may end up making some selectors run faster
        since it removes a number of brances in hot code.

        Reviewed by Sam Weinig.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        * css/ElementRuleCollector.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/protocol/CSS.json:

2014-01-15  Frédéric Wang  <fred.wang@free.fr>

        [SVG] Accept HTML and MathML namespaces as valid requiredExtensions
        https://bugs.webkit.org/show_bug.cgi?id=88188

        Reviewed by Chris Fleizach.

        When HTML and MathML are used as foreign objects of an SVG image, it is
        important for Web authors to be able to specify a fallback content for
        SVG-only readers or browsers without MathML support. We rely on the
        requiredExtensions for that purpose and we use the XHTML/MathML
        namespaces as suggested in SVG Tiny 1.2 and implemented in Gecko.

        Tests: svg/custom/conditional-processing-1.svg
               svg/custom/conditional-processing-2.html
               svg/dom/SVGTests.html

        * svg/SVGSwitchElement.cpp: Remove an incorrect FIXME comment and replace it with a reference to bug 74749.
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp: Check if the list of required extensions contains only the XHTML/MathML namespaces.
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162066.
        http://trac.webkit.org/changeset/162066
        https://bugs.webkit.org/show_bug.cgi?id=127056

        The added test still fails on some bots (Requested by ap on
        #webkit).

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):

2014-01-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix intialization order of ResourceResponse constructor

        Fixes the following build failure:

            WebCore/platform/network/mac/ResourceResponseMac.mm:83:7: error: field 'm_nsResponse' will be initialized after field 'm_initLevel' [-Werror,-Wreorder]
                , m_nsResponse(nsResponse)
                  ^

        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::ResourceResponse): Reorder member
        initializers to match the order that they are defined in the
        header.

2014-01-15  Roger Fong  <roger_fong@apple.com>

        Unreviewed. Comment out part of r162036 which broke WebGL on many ports.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2014-01-15  Zoltan Horvath  <zoltan@webkit.org>

        WordMeasurement is a struct, not a class
        https://bugs.webkit.org/show_bug.cgi?id=125373

        Reviewed by Anders Carlsson.

        Change class to struct, because there is no reason for WordMeasurement to be a class.

        No new tests, no behavior change.

        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:

2014-01-15  Mihai Tica  <mitica@adobe.com>

        Reapplying:
        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-15  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Hit-testing goes through clipped layer in fast/regions/overflow-first-and-last-regions-in-container-hidden.html
        https://bugs.webkit.org/show_bug.cgi?id=126886

        Reviewed by Mihnea Ovidenie.

        Currently, when hit testing a location inside a flow thread we ignore the clipping rectangle of
        the region. This leads to false positives when the location is over the clipped out content of a
        flow thread. The patch verifies that the location is inside the clipping rectangle of the region before
        forwarding the hit test verification to the flow thread layer.

        Test: fast/regions/hover-and-js-in-visual-overflow-hidden.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):

2014-01-15  Antti Koivisto  <antti@apple.com>

        Suspend resource requests during computedStyle
        https://bugs.webkit.org/show_bug.cgi?id=127034

        Reviewed by Andreas Kling.

        We have some cases where getting computed style leads to crashes in loadPendingImages. 
        This is probably caused by load callbacks resulting in re-entering WebKit and killing the StyleResolver.
        
        As a speculative fix suspend resource loads (and so callbacks) when getting the computed style.
        We do similar suspension during style recalc for the same reason.

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * loader/ResourceLoadScheduler.h:
        (WebCore::ResourceLoadScheduler::Suspender::Suspender):
        (WebCore::ResourceLoadScheduler::Suspender::~Suspender):

2014-01-15  László Langó  <llango.u-szeged@partner.samsung.com>

        DocumentFragment should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115641

        Reviewed by Ryosuke Niwa.

        http://www.w3.org/TR/2013/WD-dom-20131107/#interface-documentfragment
        This allows us to do `new DocumentFragment` instead of
        `document.createDocumentFragment()`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/86855c44a5a127716840fb377281b1c428e5eb2d%5E%21

        Test: fast/dom/DocumentFragment/document-fragment-constructor.html

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::create):
        * dom/DocumentFragment.h:
        * dom/DocumentFragment.idl:

2014-01-14  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix after r161980.

        CachedResourcesLoader.h should not belong to the CSS_SHADERS flag since it is used
        out of the flag so it causes a compile failure when svg and css shaders are concurrently disabled.

        * css/StyleResolver.cpp:

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceResponse harder.
        <https://webkit.org/b/127005>

        Re-arrange the members of ResourceResponse to reduce padding,
        shrinking it by 8 bytes.

        This nudges CachedResource and CachedImage into smaller size
        classes, yielding a ~700 kB progression on Membuster3.

        Reviewed by Anders Carlsson.

        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):

2014-01-14  Dirk Schulze  <krit@webkit.org>

        Remove unnecessary WebkitCSSSVGDocumentValue
        https://bugs.webkit.org/show_bug.cgi?id=126997

        Reviewed by Andreas Kling.

        Removing redundant code path. WebkitCSSSVGDocumentValue
        can be expressed by a CSSPrimitiveValue.

        No new tests.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.order:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFilter):
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h:
        * css/WebKitCSSSVGDocumentValue.cpp: Removed.
        * css/WebKitCSSSVGDocumentValue.h: Removed.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/WebKitCSSFilterValue.cpp:
        (WebCore::WebKitCSSFilterValue::customCSSText):

2014-01-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect repaint of fixed element with transformed parent
        https://bugs.webkit.org/show_bug.cgi?id=125756

        Reviewed by Simon Fraser.

        When collecting the layers for fixed positioned elements with named flow
        as a containing block, use layers collection at named flow layer level
        instead of relying on the positioned elements collection.

        With this approach, there are situations with nested named flows laid out in
        auto-height regions and thus assuming 2 step layouts, in which is enough to lay
        out the inner named flow once instead of twice with a performance gain.
        In such situations, the layers lists for the inner named flow are not yet updated
        when collectFixedPositionedLayers is called to paint the fixed positioned layers.
        Therefore I called updateLayerListsIfNeeded for all named flows layers, via the flow thread controller, before inspecting the named flow layers to avoid hitting the assertions when
        accessing the named flows layers lists.

        Tests: fast/regions/repaint/fixed-in-named-flow-cb-changed.html
               fast/regions/repaint/fixed-in-named-flow-cb-changed2.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateNamedFlowsLayerListsIfNeeded):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/FlowThreadController.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed test fix.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions): Emit
        error state expected by Khronos test suite.

2014-01-14  Brady Eidson  <beidson@apple.com>

        IDB: create object store support
        <rdar://problem/15779639> and https://bugs.webkit.org/show_bug.cgi?id=127011

        Reviewed by Anders Carlsson.

        Split the 3 objects declared in IDBDatabaseMetadata into their own header files:
        * Modules/indexeddb/IDBDatabaseMetadata.h:
        * Modules/indexeddb/IDBIndexMetadata.h:
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        * Modules/indexeddb/IDBObjectStoreMetadata.h:
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):

        Add cross thread copying for IDBDatabaseMetadata:
        * platform/CrossThreadCopier.cpp:
        (WebCore::IDBIndexMetadata>::copy):
        (WebCore::IDBObjectStoreMetadata>::copy):
        * platform/CrossThreadCopier.h:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-14  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Crash in NavigatorBase::vendor loading apple.com
        https://bugs.webkit.org/show_bug.cgi?id=127028

        Reviewed by Daniel Bates.

        Export function pointers to be filled in with WebKitSystemInterface functions.

        * WebCore.exp.in:

2014-01-14  Jeffrey Pfau  <jpfau@apple.com>

        Build fix after r162034

        Rubber-stamped by Benjamin Poulain.

        * WebCore.exp.in:

2014-01-14  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Resource finish time is sometimes earlier than response received time.

        https://bugs.webkit.org/show_bug.cgi?id=127027

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didFinishLoading): Use currentTime() and not the
        passed in finishTime.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Follow up build fix attempt.

        * WebCore.exp.in:

2014-01-14  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Brent Fulgham.

        * WebCore.xcodeproj/project.pbxproj: Copy over HTMLCanvasElement.h to the private headers directory.
        * html/HTMLCanvasElement.cpp: Show the policy dialog and retrieve policies as necessary.
        (WebCore::HTMLCanvasElement::getContext): Make sure that WebGL is allowed on the site.
                                                  If it isn't, be sure to notify the frame loader client that
                                                  the site is trying to create a WebGL context.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForHost): Used to get the WebGL load policy for a site.
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::webGLContextCreated): Called when a site is creating a WebGL context.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Create separate progress tracker clients
        https://bugs.webkit.org/show_bug.cgi?id=127025

        Reviewed by Sam Weinig.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::~ProgressTracker):
        * loader/ProgressTrackerClient.h:

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] WebGLRenderingContext::validateCompressedTexDimensions improperly calculates values
        https://bugs.webkit.org/show_bug.cgi?id=126926

        Reviewed by Dean Jackson.

        Test coverage in fast/canvas/webgl/webgl-compressed-texture-size-limit.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Pass target to
        validation function.
        (WebCore::WebGLRenderingContext::validateCompressedTexDimensions): Revise
        calculation to also confirm size is in bounds.
        (WebCore::WebGLRenderingContext::validateCompressedTexSubDimensions): Pass
       target to validation function.
        * html/canvas/WebGLRenderingContext.h: Modify signature.

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        On iOS, we never want to make scrollbar layers
        https://bugs.webkit.org/show_bug.cgi?id=127024
        <rdar://problem/15745768>

        Reviewed by Dean Jackson.

        On platforms that delegate scrolling, don't try to make layers
        for scrollbars.
        
        This fixes a crash in RenderLayerCompositor::updateOverflowControlsLayers()
        where m_overflowControlsHostLayer is null.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldCompositeOverflowControls):

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Avoid PLATFORM() macros in exported headers.

        * platform/ios/WebEvent.h:

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Build fix for 32-bit simulator and device

        CGFloat is defined to be float, double for 32-bit, and 64-bit devices respectively.
        Because WebCore::createCGColorWithDeviceWhite() takes CGFloat arguments we need to
        list both the float and double-variants of this symbol in WebCore.exp.in. Currently
        we only list the version whose arguments are of type double.

        * WebCore.exp.in:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Clean up exports and headers for iOS.
        
        Don't use ENABLE() macro in an exported header.

        * platform/ios/wak/WAKResponder.h:

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Move symbol __ZN7WebCore34registerQLPreviewConverterIfNeededEP5NSURLP8NSStringP6NSData to
        section USE(QUICK_LOOK)

        * WebCore.exp.in:

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Clean up DNSResolveQueue
        https://bugs.webkit.org/show_bug.cgi?id=127007

        Reviewed by Geoffrey Garen.

        Move the shared() getter out of line and make it use NeverDestroyed.
        Add a Timer member variable instead of inheriting from TimerBase. 
        Use std::atomic<int> for the m_requestsInFlight member variable.

        * platform/network/DNSResolveQueue.cpp:
        (WebCore::DNSResolveQueue::shared):
        (WebCore::DNSResolveQueue::DNSResolveQueue):
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::timerFired):
        * platform/network/DNSResolveQueue.h:
        (WebCore::DNSResolveQueue::decrementRequestCount):

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Two more exports for iOS.

        * WebCore.exp.in:

2014-01-14  Csaba Osztrogonác  <ossy@webkit.org>

        One more buildfix after r161999.

        * Modules/webaudio/MediaStreamAudioSource.h:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        Export __ZN7WebCore11FileChooser16chooseMediaFilesERKN3WTF6VectorINS1_6StringELm0ENS1_15CrashOnOverflowEEERKS3_PNS_4IconE
        to fix WK1 iOS linking.

        * WebCore.exp.in:

2014-01-14  Simon Fraser  <simon.fraser@apple.com>

        iOS build fixing: export required by iOS WebKit1.

        * WebCore.exp.in:

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r162000.
        http://trac.webkit.org/changeset/162000
        https://bugs.webkit.org/show_bug.cgi?id=127009

        API versioning is wrong (Requested by rfong on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * loader/FrameLoaderClient.h:
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:

2014-01-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Move CSSPrimitiveValue <-> LayoutBox Conversion to CSSPrimitiveValueMappings
        https://bugs.webkit.org/show_bug.cgi?id=126719

        Reviewed by Dirk Schulze.

        The standard location for conversions to/from CSSPrimitiveValues is CSSPrimitiveValueMappings.
        This patch moves the conversion for LayoutBoxes from BasicShapeFunctions to
        CSSPrimitiveValueMappings.h.

        Refactoring, no new tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator LayoutBox):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):

2014-01-09  Roger Fong  <roger_fong@apple.com>

        Add support for handling WebGL load policies.
        https://bugs.webkit.org/show_bug.cgi?id=126935
        <rdar://problem/15790448>.

        Reviewed by Brent Fulgham.

        * WebCore.xcodeproj/project.pbxproj: Copy over HTMLCanvasElement.h to the private headers directory.
        * html/HTMLCanvasElement.cpp: Show the policy dialog and retrieve policies as necessary.
        (WebCore::HTMLCanvasElement::getContext): Make sure that WebGL is allowed on the site.
                                                  If it isn't, be sure to notify the frame loader client that
                                                  the site is trying to create a WebGL context.
        * loader/FrameLoaderClient.h:
        (WebCore::FrameLoaderClient::webGLPolicyForHost): Used to get the WebGL load policy for a site.
        * loader/FrameLoaderTypes.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::webGLContextCreated): Called when a site is creating a WebGL context.

2014-01-14  Anders Carlsson  <andersca@apple.com>

        Get rid of ThreadRestrictionVerifier
        https://bugs.webkit.org/show_bug.cgi?id=127004

        Reviewed by Sam Weinig.

        Remove now unneeded calls.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::defaultIcon):
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::getOrCreateIconRecord):
        (WebCore::IconDatabase::readFromDatabase):

2014-01-14  Daniel Bates  <dabates@apple.com>

        [iOS] Directly allocate NSMutableDictionary in QLPreviewConverterDictionary() and QLContentDictionary()
        https://bugs.webkit.org/show_bug.cgi?id=126999
        <rdar://problem/15810305>

        Reviewed by Joseph Pecoraro.

        Fixes an issue where we may crash when subsequently accessing WebCore::QLPreviewConverterDictionary()
        or WebCore::QLContentDictionary(). Currently neither of these functions retain'ed the NSMutable dictionary
        returned by [NSMutableDictionary dictionary]. Instead, we should allocate and initialize NSMutableDictionary
        directly to ensure that the dictionary is retained.

        * platform/network/ios/QuickLook.mm:
        (QLPreviewConverterDictionary):
        (QLContentDictionary):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-14  Mark Rowe  <mrowe@apple.com>

        WebCore icon database appears to leak sudden termination assertions
        <https://webkit.org/b/126971> / <rdar://problem/15808797>

        Introduce an RAII wrapper around disableSuddenTermination / enableSuddenTermination
        and adopt it in IconDatabase to address the incorrect management of sudden termination.

        IconDatabase now owns up to two SuddenTerminationDisabler objects. One ensures that
        sudden termination is disabled while we're waiting on the sync timer to fire. The second
        ensures that sudden termination is disabled while we're waiting on the sync thread to
        process any pending work.

        Reviewed by Alexey Proskuryakov.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::wakeSyncThread): Disable sudden termination until the sync thread
        has finished this unit of work.
        (WebCore::IconDatabase::scheduleOrDeferSyncTimer): Disable sudden termination until the
        sync timer has fired.
        (WebCore::IconDatabase::syncTimerFired): Clear the member variable to reenable sudden termination.
        (WebCore::IconDatabase::syncThreadMainLoop): Taken ownership of the SuddenTerminationDisabler
        instance when we start processing a unit of work. Discard the object when our work is complete.
        * loader/icon/IconDatabase.h:
        * platform/SuddenTermination.h:
        (WebCore::SuddenTerminationDisabler::SuddenTerminationDisabler): Disable sudden termination when created.
        (WebCore::SuddenTerminationDisabler::~SuddenTerminationDisabler): Enable it when destroyed.

2014-01-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: For Remote Inspection link WebProcess's to their parent UIProcess
        https://bugs.webkit.org/show_bug.cgi?id=126995

        Reviewed by Timothy Hatcher.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::parentProcessIdentifier):
        Client method intended for WebKit2 so a WebProcess can link to its UIProcess.

        * page/PageDebuggable.h:
        * page/PageDebuggable.cpp:
        (WebCore::PageDebuggable::parentProcessIdentifier):
        Provide parent process identifier if there is one.

2014-01-14  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes, part 2

        * WebCore.exp.in:
        Export some more symbols.

2014-01-14  Brian J. Burg  <burg@cs.washington.edu>

        Add ENABLE(WEB_REPLAY) feature flag to the build system
        https://bugs.webkit.org/show_bug.cgi?id=126949

        Reviewed by Joseph Pecoraro.

        * Configurations/FeatureDefines.xcconfig:

2014-01-10  Jer Noble  <jer.noble@apple.com>

        Crash in WebCore::MediaSourcePrivateAVFObjC::hasAudio const + 13
        https://bugs.webkit.org/show_bug.cgi?id=126768

        Reviewed by Eric Carlson.

        Null-check m_mediaSourcePrivate before calling.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasVideo):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAudio):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):

2014-01-14  Piotr Grad  <p.grad@samsung.com>

        [GStreamer] Playback rate is not set when pipeline is not ready.
        https://bugs.webkit.org/show_bug.cgi?id=126692

        Reviewed by Philippe Normand.

        No new tests. Covered by existing tests.

        Added new method updatePlaybackRate which is called when playback rate change is possible.
        Added m_lastPlaybackRate in order to retrieve last correct playback rate and notify upper
        layers about that setting playback rate failed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::updatePlaybackRate):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161978.
        http://trac.webkit.org/changeset/161978
        https://bugs.webkit.org/show_bug.cgi?id=126992

        Test case causes crash on some hardware (Requested by bfulgham
        on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):

2014-01-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161964 and r161965.
        http://trac.webkit.org/changeset/161964
        http://trac.webkit.org/changeset/161965
        https://bugs.webkit.org/show_bug.cgi?id=126988

        Tests do not pass on the bots because of slight color
        differences. The tests should be redone with squared results
        and blending that leads to stable colors. (Requested by krit_
        on #webkit).

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern):

2014-01-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Shape images are now <image> types, not just URIs
        https://bugs.webkit.org/show_bug.cgi?id=125224

        Reviewed by Andreas Kling.

        Added support for image-set valued shapes. Added an optional ResourceLoaderOptions
        parameter to CSSImageSetValue::cachedImageSet() to enable CORS-enabled fetch of
        image-set images. This change is based on a similar patch for ordinary shape image values:
        https://bugs.webkit.org/show_bug.cgi?id=123114.

        Tests: fast/shapes/shape-inside/shape-inside-image-set.html
               fast/shapes/shape-outside-floats/shape-outside-image-set.html

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::cachedImageSet):
        * css/CSSImageSetValue.h:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage):
        (WebCore::StyleResolver::loadPendingShapeImage):
        * css/StyleResolver.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):

2014-01-13  Chris Fleizach  <cfleizach@apple.com>

        AX: Modernize AccessibilityChildrenVector loops
        https://bugs.webkit.org/show_bug.cgi?id=126915

        Reviewed by Anders Carlsson.

        Change appropriate for loops to use the new style.
        Use auto where appropriate.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        (WebCore::AccessibilityARIAGridRow::parentTable):
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::addChildren):
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::listBoxOptionIndex):
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::addChildren):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::selectedRadioButton):
        (WebCore::AccessibilityNodeObject::selectedTabItem):
        (WebCore::AccessibilityNodeObject::ariaLabeledByText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::clearChildren):
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        (WebCore::AccessibilityObject::elementAccessibilityHitTest):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::ariaFlowToElements):
        (WebCore::AccessibilityRenderObject::isTabItemSelected):
        (WebCore::AccessibilityRenderObject::setSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaOwnsElements):
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        (WebCore::AccessibilityRenderObject::updateAttachmentViewParents):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::ariaSelectedRows):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::mathRadicandObject):
        (WebCore::AccessibilityRenderObject::mathRootIndexObject):
        (WebCore::AccessibilityRenderObject::mathNumeratorObject):
        (WebCore::AccessibilityRenderObject::mathDenominatorObject):
        (WebCore::AccessibilityRenderObject::mathUnderObject):
        (WebCore::AccessibilityRenderObject::mathOverObject):
        (WebCore::AccessibilityRenderObject::mathBaseObject):
        (WebCore::AccessibilityRenderObject::mathSubscriptObject):
        (WebCore::AccessibilityRenderObject::mathSuperscriptObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::visibleRows):
        (WebCore::AccessibilityTable::cells):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertMathPairsToNSArray):
        (-[WebAccessibilityObjectWrapperBase accessibilityTitle]):
        (-[WebAccessibilityObjectWrapperBase accessibilityDescription]):
        (-[WebAccessibilityObjectWrapperBase accessibilityHelpText]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (convertToNSArray):
        (convertStringsToNSArray):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2014-01-14  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] SoupNetworkSession::setAcceptLanguages should receive a const reference
        https://bugs.webkit.org/show_bug.cgi?id=126966

        Reviewed by Gustavo Noronha Silva.

        We don't really need to modify the Vector just to ignore the C
        locale.

        * platform/network/soup/SoupNetworkSession.cpp:
        (WebCore::buildAcceptLanguages): Rework it to not modify the
        passed vector to ignore the C locale when it's present.
        (WebCore::SoupNetworkSession::setAcceptLanguages): Use const Vector<String>&.
        * platform/network/soup/SoupNetworkSession.h:

2014-01-14  Piotr Grad  <p.grad@samsung.com>

        HTMLMediaElement::potentiallyPlaying can be more simple.
        https://bugs.webkit.org/show_bug.cgi?id=111

        Reviewed by Eric Carlson.

        Tests: No new tests, just refactorings.

        Expression is simplified because the first 'if' statement depends on the same condition
        as pausedToBuffer value.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-14  Andreas Kling  <akling@apple.com>

        Remove deprecated DeferrableOneShotTimer constructor.
        <https://webkit.org/b/126984>

        Remove the deprecated constructor for callback functions that take
        the timer by pointer instead of by reference.

        This shrinks DeferrableOneShotTimer by 8 bytes.

        Reviewed by Anders Carlsson.

        * platform/Timer.h:
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):

2014-01-14  Dirk Schulze  <krit@webkit.org>

        Make CachedSVGDocument independent of CSS Filters
        https://bugs.webkit.org/show_bug.cgi?id=126133

        Reviewed by Antti Koivisto.

        Clean-up the pendingSVGDocuments code in StyleResolver.
        CachedSVGDocumentReference is responsible for requesting the
        SVG document instead of WebKitCSSSVGDocumentValue.
        CachedSVGDocumentReference can be used by other SVG resource like
        clip-path and mask now so that these may load external resources
        as well.
        WebKitCSSSVGDocumentValue does not provide any further value
        and will be removed in the next patch.

        Refactoring, no new test cases.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::createFilterOperations):
        * css/StyleResolver.h: Replace Map with a Set.
        (WebCore::StyleResolver::State::pendingSVGDocuments): Use the Set from now on.
        * loader/cache/CachedSVGDocumentReference.cpp:
        (WebCore::CachedSVGDocumentReference::CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::~CachedSVGDocumentReference):
        (WebCore::CachedSVGDocumentReference::load):
        * loader/cache/CachedSVGDocumentReference.h: Is responsible for 
            requesting the SVG document.
        (WebCore::CachedSVGDocumentReference::create):
        (WebCore::CachedSVGDocumentReference::loadRequested):
        * platform/graphics/filters/FilterOperation.cpp:
        (WebCore::ReferenceFilterOperation::createCachedSVGDocumentReference):
        * platform/graphics/filters/FilterOperation.h:

2014-01-14  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] AXChildrenChanged notification handling is a performance black hole
        https://bugs.webkit.org/show_bug.cgi?id=126970

        Reviewed by Gustavo Noronha Silva.

        Remove code that is causing a huge performance problem when
        loading big pages, just to be able to emit the children-changed:add
        signal at the exact time a child is added.

        This removal does not imply that the signal won't be ever emitted,
        just that it will be emitted a bit later (when the new child is
        asynchronously added to the tree), which should be good enough
        anyway for Accessible Technologies, without impacting perfformance
        in such a negative way.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Removed
        extremely expensive referring loop when AXChildrenChanged is received.

2014-01-14  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Background layer with -webkit-cross-fade doesn't blend
        when having -webkit-background-blending applied. Turns out the problem was
        the blending parameter not being passed to WebCore::CrossfadeGeneratedImage::draw

        https://bugs.webkit.org/show_bug.cgi?id=126887

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-crossfade-image.html

        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw): set blendMode on context.

2014-01-14  Mihai Tica  <mitica@adobe.com>

        Background-blend-mode doesn't work for an element with an
        SVG image as background and border-style or padding set.
        The problem consisted in the drawing path using the default
        blending parameter at all times.
        https://bugs.webkit.org/show_bug.cgi?id=118894

        Reviewed by Dirk Schulze.

        Test: css3/compositing/background-blend-mode-data-uri-svg-image.html

        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawPatternForContainer): Pass blendMode to Image::drawPattern.
        * svg/graphics/SVGImage.h: Add a blendMode parameter to drawPatternForContainer.
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::drawPattern): Pass blendMode to drawPatternForContainer call.

2014-01-14  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove accidentally added PLATFORM(QT) from Source/WebCore/editing/EditorCommand.cpp after r161638
        https://bugs.webkit.org/show_bug.cgi?id=126980

        Reviewed by Andreas Kling.

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):

2014-01-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] The list of fixed positioned layers in named flows should be sorted by z-index
        https://bugs.webkit.org/show_bug.cgi?id=126978

        Reviewed by Antti Koivisto.

        Return the list of fixed positioned layers sorted by z-index from
        FlowThreadController::collectFixedPositionedLayers instead of manually sort it
        every time we need it (RenderLayer::paintFixedLayersInNamedFlows, RenderLayer::hitTestFixedLayersInNamedFlows).
        Refactoring covered by existing regions tests.

        * rendering/FlowThreadController.cpp:
        (WebCore::compareZIndex):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceLoaderOptions harder.
        <https://webkit.org/b/126972>

        Make all ResourceLoaderOptions members bitfields to reduce padding,
        shrinking it from 28 to 4 bytes.

        Reviewed by Antti Koivisto.

        * loader/ResourceLoaderOptions.h:

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack ResourceError harder.
        <https://webkit.org/b/126969>

        Re-arrange the members of ResourceError to reduce padding,
        shrinking it by 8 bytes.

        Reviewed by Antti Koivisto.

        * platform/network/ResourceErrorBase.h:
        (WebCore::ResourceErrorBase::ResourceErrorBase):

2014-01-14  Andreas Kling  <akling@apple.com>

        Pack RenderLayer harder.
        <https://webkit.org/b/126967>

        Re-arrange the members of ScrollableArea a bit so that RenderLayer
        can combine its bitfields with the ones in ScrollableArea.
        This makes RenderLayer fit into a snugger size class, saving 32 bytes
        per layer.

        296 kB progression on Membuster3.

        Reviewed by Antti Koivisto.

        * platform/ScrollableArea.cpp:
        * platform/ScrollableArea.h:

            Put bitfield members at the end of ScrollableArea so inheriting
            classes can synergize with the padding.

        * rendering/RenderLayer.h:

            Make m_blendMode a bitfield to avoid bloating the class.

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebCore build fixes

        Add WebKit and WebKit2 as allowable clients of WebCore.

        * Configurations/WebCore.xcconfig:

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes, part 1

        * WebCore.xcodeproj/project.pbxproj:
        Move some headers to 'private', from 'project'.

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161907.
        http://trac.webkit.org/changeset/161907
        https://bugs.webkit.org/show_bug.cgi?id=126963

        fast/canvas/webgl/webgl-compressed-texture-size-limit.html
        fails on many bots (Requested by ap on #webkit).

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel):

2014-01-13  David Kilzer  <ddkilzer@apple.com>

        Fix typedef of DragDataRef from id back to id<NSDraggingInfo>
        <http://webkit.org/b/126958>
        <rdar://problem/14814649>

        Reviewed by Mark Rowe.

        * WebCore.exp.in: Export different symbols based on
        __has_feature(objc_protocol_qualifier_mangling) since clang
        mangles the type differently with that change.

        * platform/DragData.h:
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::DragData):
        - Revert r154493 by switching back to id<NSDraggingInfo>.

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161939.
        http://trac.webkit.org/changeset/161939
        https://bugs.webkit.org/show_bug.cgi?id=126956

        didn't work with mac, of course (Requested by thorton on
        #webkit).

        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Tim Horton  <timothy_horton@apple.com>

        iOS WebKit2 build fixes

        * WebCore.xcodeproj/project.pbxproj:
        Make some headers private instead of project for WK2's use.

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Make NetworkStateNotifier.h a private header, needed by iOS.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        More work towards getting iOS WK1 building.

        Some more Private headers for iOS.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Highlighting password field then making a Sticky Note via Safari Services exposes password
        https://bugs.webkit.org/show_bug.cgi?id=126946

        Reviewed by Enrica Casucci.

        Using the Services menu has a slightly different codepath than Editor::copy() does. This
        patch duplicates the canCopy() check that Editor::copy() does.

        Testing is not possible because the Services menu is not accessible to our tests.

        * editing/mac/EditorMac.mm:
        (WebCore::Editor::stringSelectionForPasteboard):
        (WebCore::Editor::stringSelectionForPasteboardWithImageAltText):
        (WebCore::Editor::dataSelectionForPasteboard):

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Crash due to forceLostContext
        https://bugs.webkit.org/show_bug.cgi?id=126947

        Reviewed by Dean Jackson.

        Covered by webgl/conformance/textures/origin-clean-conformance.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::isContextLost): Make const.
        (WebCore::WebGLRenderingContext::platformLayer): Don't attempt to use
        a lost context.
        * html/canvas/WebGLRenderingContext.h: isContextLost should be const.

2014-01-13  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] WebCorePlatform build can sometimes fail due to missing generated headers
        https://bugs.webkit.org/show_bug.cgi?id=126911

        Reviewed by Daniel Bates.

        * PlatformGTK.cmake: Add an explicit dependency from WebCorePlatform to WebCore.

2014-01-13  Benjamin Poulain  <benjamin@webkit.org>

        Use the Selector Code Generator for resolving style
        https://bugs.webkit.org/show_bug.cgi?id=126199

        Reviewed by Ryosuke Niwa.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/RuleSet.h:

2014-01-13  Benjamin Poulain  <benjamin@webkit.org>

        Update the SelectorQuery code using compiled selector after r161196
        https://bugs.webkit.org/show_bug.cgi?id=126860

        Reviewed by Andreas Kling.

        Update tree traversal code to the current traversal functions.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithContext):

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Various iOS WebKit1 build fixes.

        * WebCore.xcodeproj/project.pbxproj: iOS WebKit1 needs various
        headers to be Private.

2014-01-13  Andreas Kling  <akling@apple.com>

        Map RootInlineBox to containing region via bit+hashmap.
        <https://webkit.org/b/126917>

        The vas majority of RootInlineBox objects don't have a containing
        RenderRegion, so let's store that in a bit+hashmap configuration
        instead of having a dedicated pointer member for it.

        148 kB progression on Membuster3.

        Reviewed by Antti Koivisto.

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):

            Added m_hasContainingRegion bit.

        (WebCore::containingRegionMap):

            Global map between RootInlineBox and RenderRegion.

        (WebCore::RootInlineBox::~RootInlineBox):

            Remove self from aforementioned global map if needed.

        (WebCore::RootInlineBox::paint):

            Tweak a condition to avoid double hash lookup.

        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::clearContainingRegion):
        (WebCore::RootInlineBox::setContainingRegion):

            Store the containing region in a bit+hashmap.

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Invalid range checking in WebGLRenderingContext::validateTexFuncLevel
        https://bugs.webkit.org/show_bug.cgi?id=126925

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/webgl-compressed-texture-size-limit.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncLevel): Avoid off-by-one error

2014-01-13  Daniel Bates  <dabates@apple.com>

        Add uint8_t specialization for WebCore::writeLittleEndian()
        https://bugs.webkit.org/show_bug.cgi?id=126924

        Reviewed by Darin Adler.

        Specialize WebCore::writeLittleEndian() for datatype uint8_t so as to avoid
        a compiler warning when right shifting a uint8_t by 8 because the result of
        such a computation is undefined.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian<uint8_t>): Added.

2014-01-13  Daniel Bates  <dabates@apple.com>

        r161638 broke the Windows build
        https://bugs.webkit.org/show_bug.cgi?id=126916

        * DerivedSources.make:

2014-01-13  Eric Carlson  <eric.carlson@apple.com>

        Allow MediaSessionManager to restrict media playback
        https://bugs.webkit.org/show_bug.cgi?id=126780

        Reviewed by Jer Noble.

        Test: media/video-concurrent-playback.html

        * WebCore.exp.in: Export functions needed by Internals.

        Add HTMLMediaSession.
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        Add a media session object to manage HTMLMediaElement restrictions.
        * html/HTMLMediaSession.cpp: Added.
        * html/HTMLMediaSession.h: Added.

        Move media restriction management to a MediaSession.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Use the media session to manage restrictions.
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        (WebCore::HTMLMediaElement::insertedInto): Ditto.
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        (WebCore::HTMLMediaElement::loadInternal): Ditto.
        (WebCore::HTMLMediaElement::loadResource): Ditto.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::autoplay): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::pause): Ditto
        (WebCore::HTMLMediaElement::pauseInternal): Ditto
        (WebCore::HTMLMediaElement::suspend): Ditto
        (WebCore::HTMLMediaElement::resume): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Tell media session playback is about to start.
        (WebCore::HTMLMediaElement::deliverNotification): Ditto.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerIsFullscreenPermitted): Ditto.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Ditto.
        (WebCore::HTMLMediaElement::pausePlayback): New, allows the media session to pause playback.
        * html/HTMLMediaElement.h:

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::webkitEnterFullscreen): Use the media session to manage restrictions.

        * platform/audio/MediaSession.cpp:
        (WebCore::MediaSession::beginInterruption): Add logging.
        (WebCore::MediaSession::endInterruption): Ditto.
        (WebCore::MediaSession::pauseSession): New, allows the session manager to pause playback.
        * platform/audio/MediaSession.h:

        Add per-media type restrictions.
        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Initialize restrictions.
        (WebCore::MediaSessionManager::addRestriction): New.
        (WebCore::MediaSessionManager::removeRestriction): New.
        (WebCore::MediaSessionManager::restrictions): New.
        (WebCore::MediaSessionManager::sessionWillBeginPlayback): New. If only one session if the same
            type is allowed to play, pause all others.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/ios/MediaSessionManagerIOS.h: Added.
        * platform/audio/ios/MediaSessionManagerIOS.mm: Added.
        (WebCore::MediaSessionManager::sharedManager):
        (WebCore::m_objcObserver):
        (-[WebAVAudioSessionHelper initWithCallback:]):
        (-[WebAVAudioSessionHelper dealloc]):
        (-[WebAVAudioSessionHelper interruption:]):

        * platform/audio/mac/AudioDestinationMac.h: Add pausePlayback.

        Allow tests to set media session restrictions.
        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-13  Alexey Proskuryakov  <ap@apple.com>

        Fix the build more.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):

2014-01-13  Alexey Proskuryakov  <ap@apple.com>

        Fix the build.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):

2014-01-13  Simon Fraser  <simon.fraser@apple.com>

        Fix copy of SystemMemory.h in iOS WebKit build.
        
        Move SystemMemory.h from platform/SystemMemory.h to platform/ios/SystemMemory.h.
        Add it to the project file.
        Make it a Private header.
        Add PLATFORM(IOS) #idfefs around its contents.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/SystemMemory.h: Renamed from Source/WebCore/platform/SystemMemory.h.

2014-01-13  Youenn Fablet  <youennf@gmail.com>

        Dispatch a progress event before dispatching abort, error or timeout event
        https://bugs.webkit.org/show_bug.cgi?id=126575

        Reviewed by Alexey Proskuryakov.

        Added sending of progress event after readystatechange event (switching to DONE state) in case of abort, error or timeout. 
        Fixed assertions in XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::dispatchErrorEvents): added sending of progress event before the specific error event
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): fixed assertion
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent): fixed assertion

2014-01-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Add SoupNetworkSession class to wrap a SoupSession
        https://bugs.webkit.org/show_bug.cgi?id=126813

        Reviewed by Gustavo Noronha Silva.

        Add SoupNetworkSession class that wraps a SoupSession and move all
        the code related to the SoupSession from ResourceHandle to
        SoupNetworkSession, including the static methods to get the
        default session and create testing and private sessions.

        * GNUmakefile.list.am: Add new files to compilation.
        * PlatformEfl.cmake: Ditto.
        * PlatformGTK.cmake: Ditto.
        * platform/network/NetworkStorageSession.h: Use SoupNetworkSession
        instead of SoupSession.
        * platform/network/ResourceHandle.h:
        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::cookieJarForSession): Use SoupNetworkSession to get the
        SoupSession.
        * platform/network/soup/DNSSoup.cpp:
        (WebCore::DNSResolveQueue::platformResolve): Ditto.
        * platform/network/soup/NetworkStorageSessionSoup.cpp:
        (WebCore::NetworkStorageSession::NetworkStorageSession): Use
        SoupNetworkSession instead of SoupSession.
        (WebCore::NetworkStorageSession::~NetworkStorageSession):
        (WebCore::NetworkStorageSession::defaultStorageSession): Create a
        NetworkStorageSession with a NULL SoupNetworkSession which means
        that the default SoupNetworkSession will be used.
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession):
        Call SoupNetworkSession::createPrivateBrowsingSession() to create
        the private session.
        (WebCore::NetworkStorageSession::switchToNewTestingSession): Call
        SoupNetworkSession::createTestingSession() to create the testing
        session.
        (WebCore::NetworkStorageSession::soupNetworkSession): Return the
        SoupNetworkSession or the default one.
        (WebCore::NetworkStorageSession::setSoupNetworkSession): Set a new
        SoupNetworkSession.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sessionFromContext): Use SoupNetworkSession to get the
        SoupSession.
        (WebCore::ResourceHandleInternal::soupSession): Simply call
        sessionFromContext(), since ensureSessionIsInitialized() is no
        longer needed, because the SoupSession are now initialized in the
        SoupNetworkSession constructor.
        (WebCore::ResourceHandle::didStartRequest): Function to notify the
        ResourceHandle that current request has just started for web timing.
        * platform/network/soup/SoupNetworkSession.cpp: Added.
        (WebCore::soupLogPrinter): Logger callback.
        (WebCore::SoupNetworkSession::defaultSession): Return a reference
        to the default SoupNetworkSession.
        (WebCore::SoupNetworkSession::createPrivateBrowsingSession):
        Create a new private session.
        (WebCore::SoupNetworkSession::createTestingSession): Create a new
        testing session.
        (WebCore::SoupNetworkSession::createForSoupSession): Create a new
        SoupNetworkSession for the given SoupSession.
        (WebCore::authenticateCallback): Callback emitted by the
        SoupSession when the request needs authentication.
        (WebCore::requestStartedCallback): Callback emitted by the
        SoupSession when as request has just started.
        (WebCore::SoupNetworkSession::SoupNetworkSession):
        (WebCore::SoupNetworkSession::~SoupNetworkSession):
        (WebCore::SoupNetworkSession::setupLogger): Helper private
        function to setup the logger.
        (WebCore::SoupNetworkSession::setCookieJar): Set a new CookieJar
        in the session replacing the existing one.
        (WebCore::SoupNetworkSession::cookieJar): Return the current
        CookieJar of the session.
        (WebCore::SoupNetworkSession::setCache): Set a disk cache.
        (WebCore::SoupNetworkSession::cache): Return the current disk cache.
        (WebCore::SoupNetworkSession::setSSLPolicy): Set the SSL policy.
        (WebCore::SoupNetworkSession::sslPolicy): Get the current SSL policy.
        (WebCore::SoupNetworkSession::setHTTPProxy): Set the HTTP proxy.
        (WebCore::SoupNetworkSession::httpProxy): Get the current HTTP proxy.
        (WebCore::SoupNetworkSession::setupHTTPProxyFromEnvironment): Set
        the HTTP proxy using the environment variables.
        (WebCore::buildAcceptLanguages): Helper function build the accept
        language string in the format expected by soup (RFC 2616).
        (WebCore::SoupNetworkSession::setAcceptLanguages): Set the accept
        language for the given list of languages.
        * platform/network/soup/SoupNetworkSession.h: Added.
        (WebCore::SoupNetworkSession::soupSession): Return the SoupSession.

2014-01-13  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Error messages should use source code labels, not internal mangled symbols.
        https://bugs.webkit.org/show_bug.cgi?id=126832

        Reviewed by Dean Jackson.

        Revised fast/canvas/webgl/glsl-conformance.html.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo): Correct missing 'break'.
        (WebCore::ANGLEWebKitBridge::compileShaderSource): Call 'getSymbolInfo'
        for SH_VARYINGS.
        * platform/graphics/GraphicsContext3D.h: Add new declarations.
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp: Add case
        for SHADER_SYMBOL_TYPE_VARYING. This is a no-op to match existing
        behavior.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader): Demangle log output.
        (WebCore::GraphicsContext3D::mappedSymbolName): Added.
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Added.
        (WebCore::GraphicsContext3D::getProgramInfoLog): Demangle log output.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Demangle log output.

2014-01-13  David Kilzer  <ddkilzer@apple.com>

        [iOS] Include RenderElement.h to fix BaseChooserOnlyDateAndTimeInputType.cpp

        Fixes the following build failure:

            Undefined symbols for architecture x86_64:
              "__ZNK7WebCore13ContainerNode8rendererEv", referenced from:
                  __ZN7WebCore35BaseChooserOnlyDateAndTimeInputType22handleDOMActivateEventEPNS_5EventE in BaseChooserOnlyDateAndTimeInputType.o

        * html/BaseChooserOnlyDateAndTimeInputType.cpp: Include
        RenderElement.h.

2014-01-13  Andy Estes  <aestes@apple.com>

        [iOS] Build Fix: copy iOS-specific generated headers

        * Configurations/WebCore.xcconfig: Excluded DOMTouch* and DOMGesture* headers on Mac.
        * WebCore.xcodeproj/project.pbxproj:

2014-01-13  Zalan Bujtas  <zalan@apple.com>

        Enable SUBPIXEL_LAYOUT on Mac
        <https://webkit.org/b/126283>

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

2014-01-13  Tibor Meszaros  <tmeszaros.u-szeged@partner.samsung.com>

        REGRESSION(r161715): Use of uninitialized value $ENV{"PLATFORM_NAME"}
        https://bugs.webkit.org/show_bug.cgi?id=126873

        Reviewed by Csaba Osztrogonác.

        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2014-01-13  Andreas Kling  <akling@apple.com>

        CTTE: Autoscroll renderer is always a RenderBox.
        <https://webkit.org/b/126884>

        Reviewed by Antti Koivisto.

        * page/EventHandler.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::autoscrollRenderer):

            Make autoscrollRenderer() return a RenderBox*.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::willBeDestroyed):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::willBeDestroyed):

            Only check if the autoscroll renderer is being torn down
            in RenderBox::willBeDestroyed() since it's not relevant for
            other renderer types.

2014-01-13  László Langó  <llango.u-szeged@partner.samsung.com>

        Text should be constructable.
        https://bugs.webkit.org/show_bug.cgi?id=115640

        Reviewed by Csaba Osztrogonác.

        http://dom.spec.whatwg.org/#interface-text
        Make Text constructable so that one can do "new Text('abc')"
        instead of "document.createTexte('abc')".

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/cdd5a914daf3862379a5ce4596149bd690d0fa08

        Test: fast/dom/Text/text-constructor.html

        * dom/Text.cpp:
        (WebCore::Text::create):
        * dom/Text.h:
        * dom/Text.idl:

2014-01-13  Zan Dobersek  <zdobersek@igalia.com>

        Avoid unnecessary copies of AccessibilityObject::AccessibilityChildrenVector
        https://bugs.webkit.org/show_bug.cgi?id=126876

        Reviewed by Andreas Kling.

        AccessibilityObject::children() returns a reference to the Vector of that AccessibilityObject's children.
        The majority of callsites stores the return value in a temporary value instead of a reference, causing
        a copy each time. A reference to the return value should be used instead.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::headerObject):
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::insertChild):
        (WebCore::AccessibilityNodeObject::selectedRadioButton):
        (WebCore::AccessibilityNodeObject::selectedTabItem):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::appendChildrenToArray):
        (WebCore::AccessibilityObject::ariaTreeRows):
        (WebCore::AccessibilityObject::ariaTreeItemContent):
        (WebCore::AccessibilityObject::ariaTreeItemDisclosedRows):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest):
        (WebCore::AccessibilityRenderObject::addRemoteSVGChildren):
        (WebCore::AccessibilityRenderObject::addHiddenChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxSelectedChildren):
        (WebCore::AccessibilityRenderObject::ariaListboxVisibleChildren):
        (WebCore::AccessibilityRenderObject::tabChildren):
        (WebCore::AccessibilityRenderObject::mathRadicandObject):
        (WebCore::AccessibilityRenderObject::mathRootIndexObject):
        (WebCore::AccessibilityRenderObject::mathNumeratorObject):
        (WebCore::AccessibilityRenderObject::mathDenominatorObject):
        (WebCore::AccessibilityRenderObject::mathUnderObject):
        (WebCore::AccessibilityRenderObject::mathOverObject):
        (WebCore::AccessibilityRenderObject::mathBaseObject):
        (WebCore::AccessibilityRenderObject::mathSubscriptObject):
        (WebCore::AccessibilityRenderObject::mathSuperscriptObject):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObject):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::getListObject):
        (WebCore::notifyChildrenSelectionChange):
        * accessibility/atk/WebKitAccessibleInterfaceHypertext.cpp:
        (webkitAccessibleHypertextGetLink):
        (webkitAccessibleHypertextGetNLinks):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (listObjectForSelection):
        (optionFromList):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (getNChildrenForTable):
        (getChildForTable):
        (webkitAccessibleRefChild):
        (getIndexInParentForCellInRow):
        (getInterfaceMaskFromObject):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityElementAtIndex:]):
        (-[WebAccessibilityObjectWrapper indexOfAccessibilityElement:]):
        (-[WebAccessibilityObjectWrapper containsUnnaturallySegmentedChildren]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2014-01-13  László Langó  <llango.u-szeged@partner.samsung.com>

        Comment should be consructable.
        https://bugs.webkit.org/show_bug.cgi?id=115642

        Reviewed by Andreas Kling.

        http://dom.spec.whatwg.org/#comment
        This allows us to do `new Comment('abc')` instead of `document.createComment('abc')`.

        Backported from Blink: https://chromium.googlesource.com/chromium/blink/+/06e4a37f6b11348606de5405edac1ada97499d2a%5E%21

        Test: fast/dom/Comment/comment-constructor.html

        * dom/Comment.cpp:
        (WebCore::Comment::create):
        * dom/Comment.h:
        * dom/Comment.idl:

2014-01-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161808.
        http://trac.webkit.org/changeset/161808
        https://bugs.webkit.org/show_bug.cgi?id=126874

        This patch make several files to be always regenerated on
        every make (Requested by KaL on #webkit).

        * GNUmakefile.am:
        * bindings/gobject/GNUmakefile.am:

2014-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161843.
        http://trac.webkit.org/changeset/161843
        https://bugs.webkit.org/show_bug.cgi?id=126871

        Caused CSS custom filter tests to assert (Requested by smfr on
        #webkit).

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderInfoLog):

2014-01-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161840.
        http://trac.webkit.org/changeset/161840
        https://bugs.webkit.org/show_bug.cgi?id=126870

        Caused jsscore and layout test failures (Requested by smfr on
        #webkit).

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        (WebCore::parseHTMLNonNegativeInteger):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::createSearchRegexSource):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters):
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty):
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash):
        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        (WebCore::Color::Color):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate):
        * xml/XPathNodeSet.h:

2014-01-12  Jinwoo Song  <jinwoo7.song@samsung.com>

        Fix build warnings by unused parameter
        https://bugs.webkit.org/show_bug.cgi?id=126867

        Reviewed by Gyuyoung Kim.

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp: 
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion): Remove unused parameter 'operation'.

2014-01-12  Brent Fulgham  <bfulgham@apple.com>

        Unreviewed build fix for WinCairo.

        * WebCore.vcxproj/WebCoreCairo.props: Add missing include path
        to locate SelectorCompiler.h.

2014-01-12  Maciej Stachowiak  <mjs@apple.com>

        Fix iOS build breakage from http://trac.webkit.org/changeset/161844
        https://bugs.webkit.org/show_bug.cgi?id=126866

        Reviewed by Simon Fraser.

        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::cursorMovementIterator): Use initializeIterator instead of createSharedIterator,
        which does not exist.

2014-01-12  Darin Adler  <darin@apple.com>

        Add PLATFORM(COCOA) and USE(FOUNDATION)
        https://bugs.webkit.org/show_bug.cgi?id=126859

        Reviewed by Anders Carlsson.

        * config.h: Use PLATFORM(COCOA) instead of PLATFORM(MAC) || PLATFORM(IOS)
        to set USE(FILE_LOCK). Would be nice to use OS(DARWIN), but that would be
        a change in behavior that might be incorrect. Removed bogus comments in
        the USE(NEW_THEME) setting code. Removed redundant code to set USE(CA),
        which exactly duplicates code that already exists in Platform.h.

2014-01-12  Darin Adler  <darin@apple.com>

        Add deprecatedCharacters as a synonym for characters and convert most call sites
        https://bugs.webkit.org/show_bug.cgi?id=126858

        Reviewed by Anders Carlsson.

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPathLexer::IDBKeyPathLexer):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::setSubprotocol):
        (WebCore::ThreadableWebSocketChannelClientWrapper::setExtensions):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasMisspelling):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::write):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        * dom/Document.cpp:
        (WebCore::Document::parseQualifiedName):
        * editing/Editor.cpp:
        (WebCore::Editor::misspelledWordAtCaretOrRange):
        (WebCore::Editor::misspelledSelectionString):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        * editing/TextCheckingHelper.h:
        (WebCore::TextCheckingParagraph::textDeprecatedCharacters):
        * editing/TextIterator.cpp:
        (WebCore::collapsedSpaceLength):
        (WebCore::SimplifiedBackwardsTextIterator::handleTextNode):
        (WebCore::containsKanaLetters):
        (WebCore::SearchBuffer::SearchBuffer):
        * editing/TextIterator.h:
        (WebCore::TextIterator::characters):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::characterAfter):
        * editing/VisibleUnits.cpp:
        (WebCore::wordBreakIteratorForMinOffsetBoundary):
        (WebCore::wordBreakIteratorForMaxOffsetBoundary):
        (WebCore::visualWordPosition):
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        * fileapi/WebKitBlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeSpaces):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseImagesWithScaleFromSrcsetAttribute):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::isSourceListNone):
        (WebCore::CSPSourceList::parse):
        (WebCore::NonceDirective::parse):
        (WebCore::MediaListDirective::parse):
        (WebCore::CSPDirectiveList::parse):
        (WebCore::CSPDirectiveList::parseReportURI):
        (WebCore::CSPDirectiveList::parseReflectedXSS):
        (WebCore::ContentSecurityPolicy::didReceiveHeader):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        (WebCore::PageSerializer::serializeCSSStyleSheet):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        (WebCore::newLengthArray):
        * platform/LinkHash.cpp:
        (WebCore::visitedURL):
        (WebCore::visitedLinkHash):
        * platform/SharedBuffer.cpp:
        (WebCore::utf8Buffer):
        * platform/URL.cpp:
        (WebCore::URL::port):
        (WebCore::encodeHostnames):
        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::rightClipToCharacterBuffer):
        (WebCore::rightClipToWordBuffer):
        (WebCore::leftTruncateToBuffer):
        (WebCore::truncateString):
        (WebCore::StringTruncator::width):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForLoadingOfResource):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::addFilenameToMultiPartHeader):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::bindBlob):
        (WebCore::SQLiteStatement::bindText):
        * platform/text/DecodeEscapeSequences.h:
        (WebCore::decodeEscapeSequences):
        * platform/text/TextBreakIterator.cpp:
        (WebCore::numGraphemeClusters):
        (WebCore::numCharactersInGraphemeClusters):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIteratorWithRules):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::encode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderText.cpp:
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::computeCanUseSimpleFontCodePath):
        * rendering/RenderText.h:
        (WebCore::RenderText::characters):
        (WebCore::RenderText::deprecatedCharacters):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::tryHyphenating):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::processRenderSVGInlineText):
        * rendering/svg/SVGTextLayoutEngine.cpp:
        (WebCore::SVGTextLayoutEngine::layoutTextOnLineOrPath):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::measureCharacterRange):
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextMetricsBuilder.cpp:
        (WebCore::SVGTextMetricsBuilder::initializeMeasurementWithTextRenderer):
        * svg/SVGAngle.cpp:
        (WebCore::SVGAngle::setValueAsString):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::parsePoint):
        * svg/SVGAnimationElement.cpp:
        (WebCore::parseKeySplines):
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::applySVGGlyphSelection):
        * svg/SVGGlyphMap.h:
        (WebCore::SVGGlyphMap::addGlyph):
        (WebCore::SVGGlyphMap::collectGlyphsForString):
        * svg/SVGGlyphRefElement.cpp:
        (WebCore::SVGGlyphRefElement::parseAttribute):
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::setValueAsString):
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::parse):
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::parse):
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseNumberFromString):
        (WebCore::parseNumberOptionalNumber):
        (WebCore::parseRect):
        (WebCore::pointsListFromSVGData):
        (WebCore::parseGlyphName):
        (WebCore::parseKerningUnicodeString):
        (WebCore::parseDelimitedString):
        * svg/SVGPreserveAspectRatio.cpp:
        (WebCore::SVGPreserveAspectRatio::parse):
        * svg/SVGStringList.cpp:
        (WebCore::SVGStringList::parse):
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::parse):
        * svg/SVGTransformable.cpp:
        (WebCore::SVGTransformable::parseTransformType):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGZoomAndPan.h:
        (WebCore::SVGZoomAndPan::parseAttribute):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTUnicodeSort.cpp:
        (WebCore::xsltUnicodeSortFunction):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::parseAttributes):
        Use deprecatedCharacters instead of characters.

2014-01-12  Darin Adler  <darin@apple.com>

        Add type checking to isEqual methods
        https://bugs.webkit.org/show_bug.cgi?id=126862

        Reviewed by Anders Carlsson.

        * page/ios/WebEventRegion.mm:
        (-[WebEventRegion isEqual:]): Add type checking on the argument.
        Add a FIXME about the lack of a hash method override. Formatted to match
        the usual WebKit coding style.

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Try to fix the 32-bit build.

        * platform/text/icu/UTextProviderLatin1.cpp:
        (WebCore::uTextLatin1Clone):
        (WebCore::uTextLatin1Extract):
        (WebCore::uTextLatin1MapNativeIndexToUTF16):

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Remove all uses of AtomicallyInitializedStatic from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126861

        Reviewed by Darin Adler.

        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
        (WebCore::transactions):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::originMap):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::encodingRegistryMutex):
        (WebCore::newTextCodec):
        (WebCore::atomicCanonicalTextEncodingName):
        (WebCore::dumpTextEncodingNameMap):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::DefaultSharedWorkerRepository::instance):

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Use an std::atomic<uint32_t> when computing IDBDatabase transaction IDs
        https://bugs.webkit.org/show_bug.cgi?id=126853

        Reviewed by Sam Weinig.

        * Modules/indexeddb/IDBDatabase.cpp:
        (WebCore::IDBDatabase::nextTransactionId):

2014-01-12  Sam Weinig  <sam@webkit.org>

        TextBreakIterator's should support Latin-1 for all iterator types (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=126856

        Reviewed by Darin Adler.

        - Do some initial cleanup before adding complete Latin-1 support.

        * platform/text/TextBreakIterator.cpp:
        Remove non-ICU acquireLineBreakIterator() implementation.

        * platform/text/TextBreakIterator.h:
        - Changes acquireLineBreakIterator() to take a StringView.

        * platform/text/TextBreakIteratorICU.cpp:
        - Refactor iterator initialization and setting of text on the iterator.
        - Add support for using a Latin-1 provider (this is not currently used).

        * platform/text/icu/UTextProviderLatin1.cpp:
        * platform/text/icu/UTextProviderLatin1.h:
        - Add back non-context aware Latin-1 provider (from r129662).
        - Rename context aware provider.

        * platform/text/icu/UTextProviderUTF16.cpp:
        * platform/text/icu/UTextProviderUTF16.h:
        - Rename context aware provider.

2014-01-12  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Error messages should use source code labels, not internal mangled symbols.
        https://bugs.webkit.org/show_bug.cgi?id=126832

        Reviewed by Dean Jackson.

        Revised fast/canvas/webgl/glsl-conformance.html.

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::getSymbolInfo): Correct missing 'break'.
        (WebCore::ANGLEWebKitBridge::compileShaderSource): Call 'getSymbolInfo'
        for SH_VARYINGS.
        * platform/graphics/GraphicsContext3D.h: Add new declarations.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::compileShader): Demangle log output.
        (WebCore::GraphicsContext3D::mappedSymbolName): Added.
        (WebCore::GraphicsContext3D::getUnmangledInfoLog): Added.
        (WebCore::GraphicsContext3D::getProgramInfoLog): Demangle log output.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Demangle log output.

2014-01-12  Dan Bernstein  <mitz@apple.com>

        Try to fix the Windows build after r161839.

        * WebCore.vcxproj/WebCoreCommon.props:

2014-01-12  Darin Adler  <darin@apple.com>

        Reduce use of String::characters
        https://bugs.webkit.org/show_bug.cgi?id=126854

        Reviewed by Sam Weinig.

        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:JSC::originRootObject:rootObject:]):
        Get rid of unneeded code to turn a WTF::String into an NSString, since that's
        built into the WTF::String class.

        * editing/CompositeEditCommand.cpp:
        (WebCore::containsOnlyWhitespace): Use WTF::String's [] operator instead of
        an explicit call to the characters function. Small performance cost.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Ditto.

        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph): Use reverseFind instead of writing our own loop.
        (WebCore::endOfParagraph): Use find instead of writing our own loop.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces): Use characters16 instead of
        characters since we have already checked is8Bit.
        (WebCore::parseHTMLNonNegativeInteger): Ditto. Replace the length check with
        a check of isNull since a zero length string could be 8 bit, but it's not
        safe to call is8Bit on a null WTF::String. (That should probably be fixed.)

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::createSearchRegexSource): Use StringBuilder
        instead of String in code that builds up a string one character at a time.
        The old way was ridiculously slow because it allocated a new string for every
        character; the new way still isn't all that efficient, but it's better. Also
        changed to use strchr instead of WTF::String::find for special characters.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::newLineAndWhitespaceDelimiters): Use WTF::String's
        [] operator instead of an explicit call to the characters function.
        * inspector/InspectorStyleTextEditor.cpp:
        (WebCore::InspectorStyleTextEditor::insertProperty): Ditto.
        (WebCore::InspectorStyleTextEditor::internalReplaceProperty): Ditto.
        * platform/Length.cpp:
        (WebCore::newCoordsArray): Ditto.

        * platform/LinkHash.cpp:
        (WebCore::visitedLinkHash): Use characters16 instead of characters since
        we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor): Use characters16 since we already checked is8Bit.
        (WebCore::Color::Color): Ditto.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun): Use characters16 instead of characters since
        we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::atomicCanonicalTextEncodingName): Use characters16 instead of
        characters since we already checked is8Bit. Also use isEmpty instead of !length.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::constructTextRun): Use characters16 instead of characters
        since we have already checked is8Bit. Replace the length check with a check of
        isNull (as above in parseHTMLNonNegativeInteger).

        * rendering/RenderCombineText.cpp:
        (WebCore::RenderCombineText::width): Check for zero length instead of checking
        for null characters.

        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::registerLigaturesInGlyphCache): Rewrite ligatures
        for loop and give local variables a better name. Construct the substring with
        the substring function. Still a really inefficient approach -- allocating a new
        string for every character is absurdly expensive.

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunId::evaluate): Use String instead of StringBuilder. Still
        not all that efficient, but better than before. Use substring to construct the
        substring.

        * xml/XPathNodeSet.h: Added begin and end functions so we can use a C++11 for
        loop with this class.

2014-01-12  Benjamin Poulain  <benjamin@webkit.org>

        Use the Selector Code Generator for matching in SelectorQuery
        https://bugs.webkit.org/show_bug.cgi?id=126185

        Reviewed by Ryosuke Niwa.

        Compile selectors on demand and use the generated binary to perform
        element matching in SelectorQuery.

        Tests: fast/selectors/querySelector-long-adjacent-backtracking.html
               fast/selectors/querySelector-long-child-backtracking.html
               fast/selectors/querySelector-mixed-child-adjacent-backtracking.html
               fast/selectors/querySelector-multiple-simple-child-backtracking.html
               fast/selectors/querySelector-simple-adjacent-backtracking.html
               fast/selectors/querySelector-simple-child-backtracking.html

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::executeCompiledSimpleSelectorChecker):
        (WebCore::SelectorDataList::executeCompiledSelectorCheckerWithContext):
        (WebCore::SelectorDataList::execute):
        * dom/SelectorQuery.h:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Simplify creation of XMLHttpRequestStaticData
        https://bugs.webkit.org/show_bug.cgi?id=126852

        Reviewed by Sam Weinig.

        Add a staticData() getter that does the initialization and get rid of the explicit
        calls to initializeXMLHttpRequestStaticData().

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequestStaticData::XMLHttpRequestStaticData):
        (WebCore::staticData):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::isAllowedHTTPHeader):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Final WebCore link error: update a symbol in WebCoreSystemInterfaceIOS.mm.

        * platform/ios/WebCoreSystemInterfaceIOS.mm:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Use std::call_once instead of AtomicallyInitializedStatic in DatabaseBackendBase
        https://bugs.webkit.org/show_bug.cgi?id=126851

        Reviewed by Sam Weinig.

        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::guidForOriginAndName):
        (WebCore::DatabaseBackendBase::DatabaseBackendBase):
        (WebCore::DatabaseBackendBase::closeDatabase):
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::getCachedVersion):
        (WebCore::DatabaseBackendBase::setCachedVersion):

2014-01-12  Dan Bernstein  <mitz@apple.com>

        Try to fix the Windows build after r161830.

        * platform/network/NetworkStateNotifier.h:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Don't build JSTouch* and JSGesture* files on Mac.

        * Configurations/WebCore.xcconfig:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Clean up NetworkStateNotifier class
        https://bugs.webkit.org/show_bug.cgi?id=126850

        Reviewed by Andreas Kling.

        Use std::call_once instead of AtomicallyInitializedStatic and a std::function
        instead of a custom function pointer typedef.

        * platform/network/NetworkStateNotifier.cpp:
        (WebCore::networkStateNotifier):
        (WebCore::NetworkStateNotifier::addNetworkStateChangeListener):
        (WebCore::NetworkStateNotifier::notifyNetworkStateChange):
        * platform/network/NetworkStateNotifier.h:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add implementations of Frame::viewportArguments() and
        Frame::setViewportArguments().

        * page/ios/FrameIOS.mm:
        (WebCore::Frame::viewportArguments):
        (WebCore::Frame::setViewportArguments):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add JSWebKitPlaybackTargetAvailabilityEvent.* to the project.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Stub out some DragImage functions for iOS.
        
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/DragImageIOS.mm: Added.
        (WebCore::dragImageSize):
        (WebCore::scaleDragImage):
        (WebCore::createDragImageFromImage):

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        We need DragImage.cpp code even when ENABLE_DRAG_SUPPORT is
        not defined, because these are actually generic snapshotting
        functions.

        * platform/DragImage.cpp:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix linker errors: add DateTimeFormat.cpp to the project,
        and make DateInputType::DateInputType not inline.

        * WebCore.xcodeproj/project.pbxproj:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::DateInputType):
        * platform/DragImage.cpp:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix a bunch of linker errors related to exported functions.
        I removed some iOS symbols from the .exp.in file; we may have
        to add some back.

        * WebCore.exp.in:

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Add generated JSTouch* and JSGestureEvent.* files to the project.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        Move implementation of AuthenticationChallenge::setAuthenticationClient() to source file for USE(CFNETWORK)
        <http://webkit.org/b/126848>

        Reviewed by Simon Fraser.

        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::AuthenticationChallenge::setAuthenticationClient):
        Move implementation to here...
        * platform/network/cf/AuthenticationChallenge.h: ...from here.
        Remove duplicate header definitions inside USE(CFNETWORK).

2014-01-12  Sam Weinig  <sam@webkit.org>

        Fix windows.

        * WebCore.vcxproj/WebCore.vcxproj:

2014-01-12  Anders Carlsson  <andersca@apple.com>

        Replace more uses of AtomicallyInitializedStatic with std::call_once
        https://bugs.webkit.org/show_bug.cgi?id=126847

        Reviewed by Sam Weinig.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::shared):
        (WebCore::registryMutex):
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoAlgorithmRegistry.h:
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::~WorkerDebuggerAgent):
        (WebCore::WorkerDebuggerAgent::interruptAndDispatchInspectorCommands):
        * workers/WorkerThread.cpp:
        (WebCore::threadSetMutex):
        (WebCore::workerThreads):
        (WebCore::WorkerThread::workerThreadCount):
        (WebCore::WorkerThread::WorkerThread):
        (WebCore::WorkerThread::~WorkerThread):
        (WebCore::WorkerThread::releaseFastMallocFreeMemoryInAllThreads):

2014-01-11  Sam Weinig  <sam@webkit.org>

        Split ICU UText providers out into their own files
        https://bugs.webkit.org/show_bug.cgi?id=126834

        Reviewed by Anders Carlsson.

        Moves the implementation of our custom UText providers out into
        their own files.
        - UTextProviderLatin1.h/cpp contains the Latin-1 provider.
        - UTextProviderUTF16.h/cpp contains the UTF-16 provider.
        - UTextProvider.h/cpp contains code common to all the providers.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/TextAllInOne.cpp:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::setUpIterator):
        (WebCore::wordBreakIterator):
        (WebCore::acquireLineBreakIterator):
        (WebCore::sentenceBreakIterator):
        (WebCore::setUpIteratorWithRules):
        * platform/text/icu: Added.
        * platform/text/icu/UTextProvider.cpp: Added.
        (WebCore::fixPointer):
        (WebCore::uTextCloneImpl):
        * platform/text/icu/UTextProvider.h: Added.
        (WebCore::uTextProviderContext):
        (WebCore::uTextInitialize):
        (WebCore::uTextAccessPinIndex):
        (WebCore::uTextAccessInChunkOrOutOfRange):
        * platform/text/icu/UTextProviderLatin1.cpp: Added.
        * platform/text/icu/UTextProviderLatin1.h: Added.
        * platform/text/icu/UTextProviderUTF16.cpp: Added.
        * platform/text/icu/UTextProviderUTF16.h: Added.

2014-01-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

2014-01-12  Simon Fraser  <simon.fraser@apple.com>

        Fix some CoreVideo linker errors on iOS by softlinking with more CoreVideo
        symbols.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

2014-01-12  Andreas Kling  <akling@apple.com>

        REGRESSION(r160806): line-height is not applied when only present in :link style.
        <http://webkit.org/b/126839>
        <rdar://problem/15799899>

        Reviewed by Antti Koivisto.

        Test: fast/css/line-height-link-style.html

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::Property::apply):

            Use the CSSValue for SelectorChecker::MatchLink when applying
            style inside a link.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix link errors for iOS: Part 3

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.
        * WebCore.xcodeproj/project.pbxproj:
        - Add missing references to AuthenticationCF.cpp and
          CookieJarCFNet.cpp.

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Remove unsafe uses of AtomicallyInitializedStatic
        https://bugs.webkit.org/show_bug.cgi?id=126838

        Reviewed by Andreas Kling.

        AtomicStrings are per thread so any static initialization of them is potentially dangerous
        unless it's certain that they're only ever used from the same thread.
        
        This goes against using them with AtomicallyInitializedStatic, so just create AtomicStrings where needed.
        (This is highly unlikely to have any real negative performance impact since these two functions
        aren't called very frequently).

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * page/PerformanceResourceTiming.cpp:
        (WebCore::passesTimingAllowCheck):

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix link errors for iOS: Part 2

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] First of many iOS fixes to WebCore.exp.in

        * WebCore.exp.in:
        - Move some Mac-only symbols to Mac-only section.
        - Upstream some changes to iOS-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Don't link to Mac-only frameworks when building iOS
        <http://webkit.org/b/126841>

        * Configurations/WebCore.xcconfig:
        (OTHER_LDFLAGS_iphonesimulator): Remove common frameworks that
        are already in the Xcode project.
        (OTHER_LDFLAGS_macosx): Add Mac-only frameworks removed from the
        Xcode project.
        * Configurations/WebCoreTestShim.xcconfig:
        (OTHER_LDFLAGS[sdk=macosx*]): Link to Carbon.framework for Mac
        since it was removed from the Xcode project.
        * WebCore.xcodeproj/project.pbxproj: Remove Mac-only frameworks.

2014-01-12  Tobias Mueller  <tobiasmue@gnome.org>

        --disable-dependency-tracking causes build failure due to missing directories
        https://bugs.webkit.org/show_bug.cgi?id=94488
        
        Reviewed by Gustavo Noronha Silva.

        Ensure output directory existing
        before generating DerivedSources. This allows for
        --disable-dependency-tracking to be run.

        * GNUmakefile.am: Added new target DerivedSources/ANGLE which is a directory to be created
        * bindings/gobject/GNUmakefile.am: Added new target DerivedSources/webkitdom which is a directory to be created

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] WebFontCache is Mac-only

        * WebCore.exp.in: Move export to Mac-only section.

2014-01-12  David Kilzer  <ddkilzer@apple.com>

        [iOS] Upstream WebEventRegion.{h|mm} to fix the build

        * WebCore.xcodeproj/project.pbxproj: Add to project.
        * page/ios/WebEventRegion.h: Added.
        * page/ios/WebEventRegion.mm: Added.
        (-[WebEventRegion initWithPoints::::]):
        (-[WebEventRegion copyWithZone:]):
        (-[WebEventRegion description]):
        (-[WebEventRegion hitTest:]):
        (-[WebEventRegion isEqual:]):
        (-[WebEventRegion quad]):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Use std::call_once instead of AtomicallyInitializedStatic when creating a HTTP header set
        https://bugs.webkit.org/show_bug.cgi?id=126837

        Reviewed by Sam Weinig.

        Use std::call_once when constructing the HTTPHeaderSet.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::isOnAccessControlResponseHeaderWhitelist):

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Do not link to ApplicationServices.framework for iOS
        <http://webkit.org/b/126835>

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig:
        (OTHER_LDFLAGS_macosx): Add -framework ApplicationServices.
        * WebCore.xcodeproj/project.pbxproj: Remove reference to
        ApplicationServices.framework.

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Build fix for StyleResolver.cpp

        * rendering/style/RenderStyle.h:
        (WebCore::RenderStyle::setCompositionFillColor): Added.

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build of RenderLayerCompositor::registerAllViewportConstrainedLayers()

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers):
        Fix use of std::make_unique<>() and add an adoptPtr() call.

2014-01-11  Alexey Proskuryakov  <ap@apple.com>

        [Mac] [Windows] Stop scheduling network requests in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126789
        <rdar://problem/15114727>

        Reviewed by Sam Weinig.

        We'll just send all requests to CFNetwork now, along with associated priorities.

        * WebCore.exp.in: WebKitSystemInterface functions are changing to support priorities
        for more than just pipelining.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/network/ResourceHandle.h: For syncronous requests, make it so that they
        don't count against HTTP connection limit, to avoid the possibility of hanging the process.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):
        (WebCore::initializeHTTPConnectionSettingsOnStartup):
        * platform/network/cf/ResourceRequestCFNet.h:
        (WebCore::toPlatformRequestPriority):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build failure in WebCore::findEndWordBoundary()

        Filed Bug 126830 for the proper fix:
        <http://webkit.org/b/126830>

        * editing/VisibleUnits.cpp:
        (WebCore::endWordBoundary): Switch back to using
        WebCore::findWordBoundary() on iOS.

        * platform/text/mac/TextBoundaries.mm:
        (WebCore::findEndWordBoundary): Add FIXME for iOS implementation
        that doesn't use NSAttributedString.

2014-01-11  Andy Estes  <aestes@apple.com>

        [iOS] Move text autosizing code from RenderBlock to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=126829

        Reviewed by Sam Weinig.

        Some newly-upstreamed iOS text autosizing code needs to move to
        RenderBlockFlow in order to build.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::isVisibleRenderText):
        (WebCore::resizeTextPermitted):
        (WebCore::RenderBlockFlow::immediateLineCount):
        (WebCore::isNonBlocksOrNonFixedHeightListItems):
        (WebCore::oneLineTextMultiplier):
        (WebCore::textMultiplier):
        (WebCore::RenderBlockFlow::adjustComputedFontSizes):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::resetComputedFontSize):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustComputedFontSizesOnBlocks):
        (WebCore::RenderObject::resetTextAutosizing):

2014-01-11  Daniel Bates  <dabates@apple.com>

        [iOS] Fix the build

        Only call CGContextFlush() when building for OS X < 10.9.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::deallocate):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        InspectorAgentRegistry should use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=126826

        Reviewed by Sam Weinig.

        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::create):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        * inspector/WorkerRuntimeAgent.h:

2014-01-11  Sam Weinig  <sam@webkit.org>

        Extract the FormatConverter class out of GraphicsContext3D.cpp and into its own file
        https://bugs.webkit.org/show_bug.cgi?id=126820

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FormatConverter.cpp: Copied from Source/WebCore/platform/graphics/GraphicsContext3D.cpp.
        (WebCore::convertFloatToHalfFloat):
        (WebCore::FormatConverter::convert):
        * platform/graphics/FormatConverter.h: Copied from Source/WebCore/platform/graphics/GraphicsContext3D.cpp.
        (WebCore::FormatConverter::FormatConverter):
        (WebCore::FormatConverter::success):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        (WebCore::GraphicsContext3D::computeImageSizeInBytes):
        (WebCore::GraphicsContext3D::packImageData):
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::extractTextureData):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::hasAlpha):
        (WebCore::GraphicsContext3D::hasColor):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix updateScrollingLayerWithClient() for iOS.
        
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::updateScrollingLayerWithClient):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Unfork GraphicsContext::drawNativeImage for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126824

        Reviewed by Dean Jackson.

        GraphicsContext::drawNativeImage had a different signature for iOS,
        which required #ifdefs at all the call sites. Unfork by passing the "scale"
        parameter everywhere (it's only used on iOS).

        * WebCore.exp.in:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/ios/IconIOS.mm:
        (WebCore::Icon::paint):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Work around USE(CFNETWORK) build failure on iOS.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix LegacyWebArchive.cpp:567:91: error: calling 'utf8' with incomplete return type 'WTF::CString'
        
        * loader/archive/cf/LegacyWebArchive.cpp:

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix the easy half of the build errors in RenderBlock.cpp

        * rendering/RenderBlock.cpp:
        (WebCore::isNonBlocksOrNonFixedHeightListItems):
        (WebCore::oneLineTextMultiplier):
        (WebCore::textMultiplier):
        (WebCore::RenderBlock::adjustComputedFontSizes):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Change touch-related headers to include WebKitAdditions headers,
        which have been renamed to have IOS suffixes.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ios/TouchConstructors.cpp:
        * dom/Touch.h:
        * dom/TouchEvent.h:
        * dom/TouchList.h:
        * dom/ios/TouchEvents.cpp:

2014-01-11  Anders Carlsson  <andersca@apple.com>

        ScriptDebugServer should use a separate member function for its timer handler
        https://bugs.webkit.org/show_bug.cgi?id=126819

        Reviewed by Sam Weinig.

        It's weird to have subclasses override a timer handler and sometimes invoke 
        the timer handler directly so make it a separate member function instead.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::recompileAllJSFunctionsTimerFired):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::addListener):
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::start):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        Simplify Timer and DeferrableOneShotTimer using std::function
        https://bugs.webkit.org/show_bug.cgi?id=126816

        Reviewed by Sam Weinig.

        * platform/Timer.h:
        (WebCore::Timer::Timer):

2014-01-11  Anders Carlsson  <andersca@apple.com>

        CTTE Timer and DeferrableOneShotTimer
        https://bugs.webkit.org/show_bug.cgi?id=126814

        Reviewed by Antti Koivisto.

        Add new Timer and DeferrableOneShotTimer constructors whose member function pointers
        take a reference instead of a pointer.
        Also, convert a bunch of classes over to using these new constructors.

        * Modules/encryptedmedia/MediaKeySession.cpp:
        (WebCore::MediaKeySession::keyRequestTimerFired):
        (WebCore::MediaKeySession::addKeyTimerFired):
        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::timerFired):
        (WebCore::Geolocation::resumeTimerFired):
        * Modules/geolocation/Geolocation.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::taskTimerFired):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::NotificationRequestCallback::timerFired):
        * Modules/notifications/NotificationCenter.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AXObjectCache.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::evictionTimerFired):
        * css/CSSImageGeneratorValue.h:
        * dom/Document.cpp:
        (WebCore::Document::visualUpdatesSuppressionTimerFired):
        (WebCore::Document::styleRecalcTimerFired):
        (WebCore::Document::optimizedStyleSheetUpdateTimerFired):
        (WebCore::Document::sharedObjectPoolClearTimerFired):
        (WebCore::Document::styleResolverThrowawayTimerFired):
        (WebCore::Document::updateFocusAppearanceTimerFired):
        (WebCore::Document::resetHiddenFocusElementTimer):
        (WebCore::Document::pendingTasksTimerFired):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::loadEventDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        * dom/GenericEventQueue.cpp:
        (WebCore::GenericEventQueue::timerFired):
        * dom/GenericEventQueue.h:
        * dom/ScriptRunner.cpp:
        (WebCore::ScriptRunner::timerFired):
        * dom/ScriptRunner.h:
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::animationTimerFired):
        * dom/ScriptedAnimationController.h:
        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired):
        * editing/AlternativeTextController.h:
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::caretBlinkTimerFired):
        * editing/FrameSelection.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::swapRendererTimerFired):
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::removeSnapshotTimerFired):
        (WebCore::HTMLPlugInImageElement::simulatedMouseClickTimerFired):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::errorEventTimerFired):
        * html/HTMLSourceElement.h:
        * html/HTMLTrackElement.cpp:
        (WebCore::HTMLTrackElement::loadTimerFired):
        * html/HTMLTrackElement.h:
        * html/MediaController.cpp:
        (MediaController::asyncEventTimerFired):
        (MediaController::clearPositionTimerFired):
        (MediaController::timeupdateTimerFired):
        * html/MediaController.h:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/MediaDocument.h:
        * html/parser/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
        * html/parser/HTMLParserScheduler.h:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        * html/shadow/MediaControlElementTypes.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlPanelElement::transitionTimerFired):
        (WebCore::MediaControlTextTrackContainerElement::updateTimerFired):
        * html/shadow/MediaControlElements.h:
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::hideFullscreenControlsTimerFired):
        * html/shadow/MediaControls.h:
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::loadTimerFired):
        * html/track/LoadableTextTrack.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::UpdateRegionLayoutTask::UpdateRegionLayoutTask):
        (WebCore::UpdateRegionLayoutTask::timerFired):
        (WebCore::ChangeRegionOversetTask::ChangeRegionOversetTask):
        (WebCore::ChangeRegionOversetTask::timerFired):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::RevalidateStyleAttributeTask):
        (WebCore::RevalidateStyleAttributeTask::timerFired):
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorBackendDispatchTask::InspectorBackendDispatchTask):
        (WebCore::InspectorBackendDispatchTask::timerFired):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkTimerFired):
        * loader/FrameLoader.h:
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::timerFired):
        * loader/ImageLoader.h:
        * loader/LinkLoader.cpp:
        (WebCore::LinkLoader::linkLoadTimerFired):
        (WebCore::LinkLoader::linkLoadingErrorTimerFired):
        * loader/LinkLoader.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::timerFired):
        * loader/NavigationScheduler.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:
        (WebCore::PingLoader::timeoutTimerFired):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::requestTimerFired):
        * loader/ResourceLoadScheduler.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::decodedDataDeletionTimerFired):
        (WebCore::CachedResource::CachedResourceCallback::timerFired):
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::garbageCollectDocumentResourcesTimerFired):
        * loader/cache/CachedResourceLoader.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::syncTimerFired):
        * loader/icon/IconDatabase.h:
        * page/AutoscrollController.cpp:
        (WebCore::AutoscrollController::autoscrollTimerFired):
        * page/AutoscrollController.h:
        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::timerFired):
        * page/CaptionUserPreferences.h:
        * page/DeviceController.cpp:
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::cursorUpdateTimerFired):
        (WebCore::EventHandler::autoHideCursorTimerFired):
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        (WebCore::EventHandler::hoverTimerFired):
        * page/EventHandler.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::connectTimerFired):
        * page/EventSource.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::deferredRepaintTimerFired):
        (WebCore::FrameView::layoutTimerFired):
        (WebCore::FrameView::postLayoutTimerFired):
        * page/FrameView.h:
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::throttleHysteresisTimerFired):
        * page/PageThrottler.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::updateStyleIfNeededDispatcherFired):
        (WebCore::AnimationControllerPrivate::animationTimerFired):
        * page/animation/AnimationControllerPrivate.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::autoscrollTimerFired):
        * platform/Scrollbar.h:
        * platform/Timer.h:
        (WebCore::Timer::Timer):
        (WebCore::DeferrableOneShotTimer::DeferrableOneShotTimer):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::advanceAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::reloadTimerFired):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/LayerPool.mm:
        (WebCore::LayerPool::pruneTimerFired):
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::timerFired):
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:
        * platform/graphics/cg/SubimageCacheWithTimer.cpp:
        (WebCore::SubimageCacheWithTimer::invalidateCacheTimerFired):
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::snapRubberBandTimerFired):
        (WebCore::ScrollAnimatorMac::initialScrollbarPaintTimerFired):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):
        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::timerFired):
        * platform/mock/DeviceOrientationClientMock.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::failureTimerFired):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::networkStateChangeTimerFired):
        * rendering/ImageQualityController.cpp:
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        * rendering/ImageQualityController.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::timerFired):
        * rendering/RenderButton.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::layerFlushTimerFired):
        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMarquee.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::regionLayoutUpdateEventTimerFired):
        (WebCore::RenderNamedFlowThread::regionOversetChangeEventTimerFired):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::animationTimerFired):
        * rendering/RenderProgress.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        #ifdef out the contents of Touch* files for iOS.
        
        * dom/Touch.h:
        * dom/TouchEvent.h:
        * dom/TouchList.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        No need to include <ApplicationServices/ApplicationServices.h> in
        the header. Can use <CoreGraphics/CoreGraphics.h> in the .cpp file.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix DOM headers: TARGET_OS_EMBEDDED -> TARGET_OS_IPHONE
        and a drive-by cleanup of DOMUIKitExtensions.mm #includes.

        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMUIKitExtensions.h:
        * bindings/objc/DOMUIKitExtensions.mm:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix use of GL_HALF_FLOAT_ARB on iOS.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix build of SourceBufferPrivateAVFObjC.mm on iOS.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-11  Simon Fraser  <simon.fraser@apple.com>

        Fix use of nonexistent kCGColorSpaceSRGB on iOS.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):

2014-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some ScriptDebugServer Cleanup
        https://bugs.webkit.org/show_bug.cgi?id=126793

        Reviewed by Timothy Hatcher.

        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::didContinue):
        (WebCore::PageScriptDebugServer::runEventLoopWhilePaused):
        Move the special iOS WebThread EventLoop nesting handling here.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        Remove unused headers and functions.

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Add USE(IOSURFACE_CANVAS_BACKING_STORE) to fix build

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer): The 'width' and 'height'
        variables are only used by code protected by
        USE(IOSURFACE_CANVAS_BACKING_STORE).

2014-01-11  David Kilzer  <ddkilzer@apple.com>

        [iOS] Multisampling is not available on iOS

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build for HTMLImageElement::willRespondToMouseClickEvents()

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::willRespondToMouseClickEvents):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Fix test crashes.
        
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::~ProgressTracker):
        Comment out the call to progressTrackerDestroyed for now.

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build for RenderEmbeddedObject::canHaveChildren()

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::canHaveChildren):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tweak ProgressTrackerClient functions
        https://bugs.webkit.org/show_bug.cgi?id=126808

        Reviewed by Sam Weinig.

        Rename the three progress state related member functions since it's up to the various
        WebKit implementations to decide what to do - not everyone wants to post a notification.
        Also add an originating progress frame parameter since WebKit2 doesn't report progress for
        subframe navigation and we need to be able to keep track of that.
        
        Finally, tweak ProgressTracker::completeProgress to get rid of an unnecessary hash lookup.

        * loader/EmptyClients.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressItem::ProgressItem):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        (WebCore::ProgressTracker::completeProgress):
        * loader/ProgressTrackerClient.h:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix COMPILE_ASSERT by updating struct SameSizeAsStyleRareInheritedData

        * rendering/style/StyleRareInheritedData.cpp:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix build of SubframeLoader.cpp

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::loadPlugin):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix Mac after r161747. One part of that is iOS specific.

        Unreviewed build fix.

        * bindings/js/GCController.cpp:
        (WebCore::GCController::releaseExecutableMemory):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Fix GCController::releaseExecutableMemory
        https://bugs.webkit.org/show_bug.cgi?id=126805

        Reviewed by Sam Weinig and Mark Lam.

        VM::dynamicGlobalObject has since been replaced by VMEntryScope.
        Update to check entryScope instead of the dynamicGlobalObject.
        Also, make this non-iOS only.

        * bindings/js/GCController.h:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::releaseExecutableMemory):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix HTMLMediaElement.o for iOS. Unreviewed build fix.

        There is now local variable mediaElement. Just call the
        functions since they are methods on this class.

        Fix RequireUserGestureToShowPlaybackTargetPickerRestriction typos.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Move progress tracking functions from FrameLoaderClient to a new ProgressTrackerClient
        https://bugs.webkit.org/show_bug.cgi?id=126801

        Reviewed by Sam Weinig.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients):
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::ProgressTracker):
        (WebCore::ProgressTracker::~ProgressTracker):
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::finalProgressComplete):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:
        * loader/ProgressTrackerClient.h: Added.
        (WebCore::ProgressTrackerClient::~ProgressTrackerClient):
        (WebCore::ProgressTrackerClient::progressTrackerDestroyed):
        (WebCore::ProgressTrackerClient::willChangeEstimatedProgress):
        (WebCore::ProgressTrackerClient::didChangeEstimatedProgress):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::PageClients::PageClients):
        * page/Page.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderObject.o for iOS. Unreviewed build fix.

        r156285 renamed firstChild() to firstChildSlow(), so update
        occurances in IOS_TEXT_AUTOSIZING code. Also account for a
        RenderObject::style reference / pointer change.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::traverseNext):
        (WebCore::includeNonFixedHeight):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MediaPlayerPrivateMediaSourceAVFObjC.o for iOS. Unreviewed build fix.

        Import CALayer, which Mac must have been getting some other way.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix TileGrid.o for iOS. Unreviewed build fix.

        Explicitly use namespace std in std::pair.

        * platform/ios/TileGrid.mm:
        (WebCore::isFartherAway):
        (WebCore::TileGrid::dropDistantTiles):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderImage.o for iOS. Unreviewed build fix.

        inlineBoxWrapper() returns an InlineElementBox type, which is an InlineBox but
        without including InlineElementBox.h, iOS didn't know what an InlineElementBox was!

        * rendering/RenderImage.cpp:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Fix macros in Scrollbar::supportsUpdateOnSecondaryThread()

        Fixes the following build error:

            WebCore/platform/Scrollbar.cpp:552:22: error: '__MAC_OS_X_VERSION_MIN_REQUIRED' is not defined, evaluates to 0 [-Werror,-Wundef]
            #if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101000 && ENABLE(ASYNC_SCROLLING)
                                 ^

        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderFileUploadControl.o for iOS. Unreviewed build fix.

        WebCore::theme() returns a reference now, not a pointer.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix HTMLPlugInImageElement.o for iOS. Unreviewed build fix.

        Forgot to upstream YouTubeEmbedShadowElement.*. Do so and
        add the files to the Xcode project so they build.

        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/YouTubeEmbedShadowElement.cpp: Added.
        (WebCore::YouTubeEmbedShadowElement::create):
        (WebCore::YouTubeEmbedShadowElement::YouTubeEmbedShadowElement):
        (WebCore::YouTubeEmbedShadowElement::pluginElement):
        (WebCore::YouTubeEmbedShadowElement::shadowPseudoId):
        * html/shadow/YouTubeEmbedShadowElement.h: Added.

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Update EditorIOS.mm to switch from pointers to references

        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        (WebCore::Editor::insertParagraphSeparatorInQuotedContent):
        (WebCore::styleForSelectionStart):
        (WebCore::Editor::selectionInWebArchiveFormat):
        (WebCore::Editor::writeImageToPasteboard):
        (WebCore::Editor::WebContentReader::readWebArchive):
        (WebCore::Editor::WebContentReader::readRTFD):
        (WebCore::Editor::WebContentReader::readRTF):
        (WebCore::uniqueURLWithRelativePart):
        (WebCore::Editor::WebContentReader::readPlainText):
        (WebCore::Editor::webContentFromPasteboard):
        (WebCore::Editor::createFragmentAndAddResources):
        (WebCore::Editor::createFragmentForImageResourceAndAddResource):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push InspectorAgent down into JSC, give JSC an InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=126763

        Reviewed by Timothy Hatcher.

        No new tests, no observable change in functionality.

        * CMakeLists.txt:
        * ForwardingHeaders/inspector/agent/InspectorAgent.h: Added.
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        InspectorAgent moved to JavaScriptCore. Include forwarding header.

        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        (WebCore::PageConsoleAgent::~PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        InspectorAgent was not used by these files, remove it.

        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        (WebCore::CommandLineAPIHost::init):
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::inspectorAgent):
        (WebCore::InstrumentingAgents::setInspectorAgent):
        Switch to Inspector::InspectorAgent where applicable.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        Manually add InspectorAgent to the InstrumentingAgents. It is one
        of the agents that is always available in InstrumentingAgents.

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

       Add TextAutoSizing.* for iOS, and fix DeviceOrientationController creation.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * rendering/TextAutoSizing.cpp: Added.
        (WebCore::cloneRenderStyleWithState):
        (WebCore::TextAutoSizingKey::TextAutoSizingKey):
        (WebCore::TextAutoSizingKey::~TextAutoSizingKey):
        (WebCore::TextAutoSizingKey::operator=):
        (WebCore::TextAutoSizingKey::ref):
        (WebCore::TextAutoSizingKey::deref):
        (WebCore::TextAutoSizingValue::numNodes):
        (WebCore::TextAutoSizingValue::addNode):
        (WebCore::TextAutoSizingValue::adjustNodeSizes):
        (WebCore::TextAutoSizingValue::reset):
        * rendering/TextAutoSizing.h: Added.
        (WebCore::TextAutoSizingKey::doc):
        (WebCore::TextAutoSizingKey::style):
        (WebCore::TextAutoSizingKey::isValidDoc):
        (WebCore::TextAutoSizingKey::isValidStyle):
        (WebCore::TextAutoSizingKey::deletedKeyDoc):
        (WebCore::TextAutoSizingKey::deletedKeyStyle):
        (WebCore::operator==):
        (WebCore::TextAutoSizingHash::hash):
        (WebCore::TextAutoSizingHash::equal):
        (WebCore::TextAutoSizingValue::create):
        (WebCore::TextAutoSizingValue::TextAutoSizingValue):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix GraphicsLayerCA.o for iOS. Unreviewed build fix.

        Use of systemMemoryLevel was missing include of SystemMemory.h.

        * platform/graphics/ca/GraphicsLayerCA.cpp:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.

        * bindings/objc/DOM.mm:
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        * bindings/objc/DOMExtensions.h:
        * platform/DragImage.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.
        
        Generated DOMTouch* and DOMGesture* files need to be in the project.
        Exclude them on Mac via EXCLUDED_SOURCE_FILE_NAMES_macosx.
        
        Use TARGET_OS_IPHONE instead of TARGET_OS_EMBEDDED in DOMPrivate.h

        * Configurations/WebCore.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOMPrivate.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderThemeIOS.o for iOS. Unreviewed build fix.

        Typo referring to generated name. Should be "iOS" not "IOS".

        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix WebAccessibilityObjectWrapperIOS.o for iOS. Unreviewed build fix.

        The upstreamed WebAccessibilityObjectWrapperIOS.mm was out of date, e.g.
        it was using GSFonts. Just upstream a newer version of the file. Also
        explicitly namespace qualify std::pair.

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (AXAttributeStringSetStyle):

2014-01-10  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove willRespondToTouchEvents() which was used by chromium port
        https://bugs.webkit.org/show_bug.cgi?id=126739

        Reviewed by Alexey Proskuryakov.

        willRespondToTouchEvents() was added to check if a node listens to touch events in r126945.
        However, it is not used anywhere after chromium port is removed.

        * dom/Node.cpp:
        * dom/Node.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix SystemVersionMac.o for iOS. Unreviewed build fix.

        Add missing expected function. Maybe we can avoid including
        this file entirely on iOS, there was already a FIXME.

        * platform/mac/SystemVersionMac.mm:
        (WebCore::systemMarketingVersion):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix JSDOMWindowBase.o for iOS. Unreviewed build fix.

        Add missing iOS method declarations.

        * bindings/js/JSDOMWindowBase.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix InputType.o for iOS. Unreviewed build fix.

        The RuntimeEnabledFeatures function pointer type should have a
        const qualifier, because the implementations are all const.

        * html/InputType.cpp:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MediaPlayerPrivateIOS.o for iOS. Unreviewed build fix.

        Add missing MediaPlayerProxy Objective C methods and forward declarations.

        * platform/graphics/mac/MediaPlayerProxy.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix FrameSelection.o for iOS. Unreviewed build fix.

        r160966 renamed rendererIsEditable to hasEditableStyle.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setSelectionFromNone):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix DragData.o for iOS. Unreviewed build fix.

        String m_pasteboardName is unused on iOS, so ifdef it out.

        * platform/DragData.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix FrameIOS.o for iOS. Unreviewed build fix.

        Remove stale include to file that no longer exists. It was not needed.

        * page/ios/FrameIOS.mm:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MonthInputType.o for iOS. Unreviewed build fix.

        When ENABLE_INPUT_MULTIPLE_FIELDS_UI was removed in r150876,
        the wrong class name lingered. Fix it to be the base class.

        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::TimeInputType):

2014-01-10  Andy Estes  <aestes@apple.com>

        [iOS] Build fix: make sure WTF_PLATFORM_IOS is defined when preprocessing

        * DerivedSources.make:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Use TARGET_OS_IPHONE in this API file, and #if TARGET_OS_MAC
        for a non-iOS function.

        * bindings/objc/DOMExtensions.h:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        Clean up architectures in xcconfig files
        <http://webkit.org/b/126794>

        Reviewed by Andy Estes.

        * Configurations/Base.xcconfig:
        * Configurations/WebCore.xcconfig: Remove armv6.
        * DerivedSources.make: Remove armv6, armv7f. Sort.
        - Add new arch.

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build

        * Configurations/WebCore.xcconfig:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLineHeightForIOSTextAutosizing::applyValue):

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.
        
        * html/DateTimeLocalInputType.h:
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * loader/ios/DiskImageCacheIOS.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        iOS build fix: add StyleRareInheritedData::compositionFillColor

        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix MonthInputType.o for iOS. Unreviewed build fix.

        When ENABLE_INPUT_MULTIPLE_FIELDS_UI was removed in r150876, the
        BaseMonthInputType typedef was removed. However a use of it lingered.
        Changing to match the base class name.

        * html/MonthInputType.h:
        (WebCore::MonthInputType::MonthInputType):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix RenderButton.o for iOS. Unreviewed build fix.

        Missing prototype in header for override of the layout method.

        * rendering/RenderButton.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        A couple of iOS build fixes.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Fix PlatformScreenIOS.mm for iOS. Unreviewed build fix.

        PlatformScreen.h removed screenVerticalDPI and screenHorizontalDPI in r132419,
        so remove the stale implementations on iOS. Also, add a notImplemented version
        of screenColorProfile, which matches Mac and is unused in WebCore for this port.

        * platform/ios/PlatformScreenIOS.mm:
        (WebCore::screenColorProfile):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE FrameTree
        https://bugs.webkit.org/show_bug.cgi?id=126795

        Reviewed by Tim Horton.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::transferChild):
        (WebCore::FrameTree::appendChild):
        (WebCore::FrameTree::actuallyAppendChild):
        (WebCore::FrameTree::uniqueChildName):
        (WebCore::FrameTree::scopedChild):
        (WebCore::FrameTree::scopedChildCount):
        (WebCore::FrameTree::child):
        (WebCore::FrameTree::find):
        (WebCore::FrameTree::isDescendantOf):
        (WebCore::FrameTree::traverseNext):
        (WebCore::FrameTree::traverseNextWithWrap):
        (WebCore::FrameTree::traversePreviousWithWrap):
        (WebCore::FrameTree::deepLastChild):
        (WebCore::FrameTree::top):
        * page/FrameTree.h:
        (WebCore::FrameTree::FrameTree):

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.

        * loader/ResourceLoader.h:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix iOS build.

        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::acceleratedImageDecodingEnabled):
        (WebCore::ImageSource::setAcceleratedImageDecodingEnabled):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed EFL build fix after r161678.

        static_cast a size_t to unsigned long for %lu format string.

        * page/Console.cpp:
        (WebCore::internalAddMessage):

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):
        * platform/graphics/ImageBuffer.cpp:
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/NativeImagePtr.h:
        * platform/graphics/OpenGLESShims.h:
        * platform/graphics/Path.cpp:
        (WebCore::Path::addPathForRoundedRect):
        * platform/graphics/Path.h:
        * platform/graphics/PlatformLayer.h:
        * platform/graphics/filters/CustomFilterValidatedProgram.cpp:
        * platform/graphics/filters/CustomFilterValidatedProgram.h:
        * platform/graphics/filters/FilterOperation.h:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::getGraphicsResetStatusARB):
        * platform/graphics/opengl/Extensions3DOpenGLES.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::readPixelsAndConvertToBGRAIfNecessary):
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/ResourceRequestBase.cpp:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix CharsetData.cpp build for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126792

        Reviewed by Mark Rowe.

        CharsetData.cpp should have an empty CharsetTable list for iOS.
        Achieve this with an iOS-specific encodings.txt file.

        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/mac/ios-encodings.txt: Added.

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE in NavigationScheduler
        https://bugs.webkit.org/show_bug.cgi?id=126788

        Reviewed by Tim Horton.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameScheduledNavigationImpl):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigationImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameScheduledNavigation):
        (WebCore::InspectorInstrumentation::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        * inspector/InspectorPageAgent.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::shouldStartTimer):
        (WebCore::ScheduledNavigation::didStartTimer):
        (WebCore::ScheduledNavigation::didStopTimer):
        (WebCore::NavigationScheduler::NavigationScheduler):
        (WebCore::NavigationScheduler::clear):
        (WebCore::NavigationScheduler::shouldScheduleNavigation):
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::mustLockBackForwardList):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        (WebCore::NavigationScheduler::scheduleRefresh):
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::schedule):
        (WebCore::NavigationScheduler::startTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/NavigationScheduler.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame):

2014-01-10  Myles C. Maxfield  <mmaxfield@apple.com>

        CSS word-spacing property does not obey percentages
        https://bugs.webkit.org/show_bug.cgi?id=126674

        Reviewed by Simon Fraser.

        One change between CSS2.1 and CSS3 is that the word-spacing CSS property can
        take percentages (of the width of the space character) in CSS3. In order to
        implement this, the datatype must be changed from a float to a Length, which
        can hold percentage values. Then, during layout, we can query the width of
        the space character and update the Font's word-spacing value appropriately.
        However, the RenderStyle still holds on to the Length (as a rare inherited
        value).

        Tests: fast/css3-text/css3-word-spacing-percentage/word-spacing-change-font.html
               fast/css3-text/css3-word-spacing-percentage/word-spacing-percentage-parse.html
               fast/css3-text/css3-word-spacing-percentage/word-spacing-percentage.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Use Font's computed value instead
        of style's Length value.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): word-spacing and letter-spacing no longer are
        parsed the same way.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyWordSpacing::applyValue): Construct a length from a given
        CSSValue and set the style's word spacing with it.
        (WebCore::ApplyPropertyWordSpacing::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Use ApplyPropertyWordSpacing.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Use Font's computed value instead
        of style's Length value.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::computePreferredLogicalWidths): Ditto.
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): Opt-out of the SimpleLineLayout
        if either the percentage or the length is nonzero.
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText): Use Font's computed value instead
        of style's Length value.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::wordSpacing):
        (WebCore::RenderStyle::setWordSpacing): Consult the Font's space with to compute
        percentage values, but hold on to the original Length.
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        * rendering/style/StyleRareInheritedData.h: Hold on to the specified Length

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        Fix the iOS build.

        * platform/audio/mac/MediaSessionManagerMac.cpp:

2014-01-10  Simon Fraser  <simon.fraser@apple.com>

        iOS doesn't have <OpenGL/gl.h>; fix iOS build.

        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp:

2014-01-10  Andy Estes  <aestes@apple.com>

        [iOS] Build Fix: Properly add $SDKROOT/usr/local/include/ to the search path when building PublicDOMInterfaces.h

        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unimplemented or static ScriptDebugServer features
        https://bugs.webkit.org/show_bug.cgi?id=126784

        Reviewed by Timothy Hatcher.

        These features are unimplemented in the backend, and unused by the
        current frontend. Most deal with features that were supported by v8
        and are as yet unimplemented by JSC. If we decide to add such features
        we can reimplement without conforming to an old implementation.

        * bindings/js/ScriptDebugServer.cpp:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfiler.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::disable):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::reload):
        (WebCore::InspectorPageAgent::frameNavigated):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::didClearMainFrameWindowObject):
        * inspector/protocol/Page.json:
        * inspector/protocol/Profiler.json:

2014-01-10  David Kilzer  <ddkilzer@apple.com>

        [iOS] Remove unused variable from TileGrid::dropTilesBetweenRects()

        Fixes the following build error:

            WebCore/platform/ios/TileGrid.mm:88:23: error: unused variable 'end' [-Werror,-Wunused-variable]
                TileMap::iterator end = m_tiles.end();
                                  ^

        * platform/ios/TileGrid.mm:
        (WebCore::TileGrid::dropTilesBetweenRects): Remove unused
        variable now that the for loop uses an auto iterator.

2014-01-10  Dean Jackson  <dino@apple.com>

        Implement OES texture half float linear
        https://bugs.webkit.org/show_bug.cgi?id=125060

        Reviewed by Brent Fulgham.

        Test: fast/canvas/webgl/oes-texture-half-float-linear.html

        * CMakeLists.txt: Add new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Generate new file from IDL.
        * GNUmakefile.list.am: Add new files.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: New files for OESTextureHalfFloatLinear.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Map from extension name to native object.

        * html/canvas/OESTextureHalfFloatLinear.cpp: Added. New files. These are boiler-plate.
        * html/canvas/OESTextureHalfFloatLinear.h: Added.
        * html/canvas/OESTextureHalfFloatLinear.idl: Added.

        * html/canvas/WebGLExtension.h: Add new enum for the new extension.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getExtension): Create the extension object if the
        context is asked for one.
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add the new extension to the
        list of supported extensions. Actually remember to do it this time :)
        (WebCore::WebGLRenderingContext::checkTextureCompleteness): Need to check for the half-float
        extension as well, and update the log message.
        * html/canvas/WebGLRenderingContext.h: New extension object.

        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::needToUseBlackTexture): Check for half-float type.
        (WebCore::WebGLTexture::update): Mark a texture as half-float if necessary.
        * html/canvas/WebGLTexture.h:

        * platform/graphics/Extensions3D.h: Add a comment about the new extension.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): This extension is available
        when GL_ARB_texture_float is supported, so add the name to the translation.

2014-01-10  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Correct uniform input validation for texture sampler uniform
        https://bugs.webkit.org/show_bug.cgi?id=126775

        Reviewed by Dean Jackson.

        Added fast/canvas/webgl/uniform-samplers-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::uniform1iv): Access Int32Array data properly.

2014-01-10  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Unreviewed build fix after r161644.

        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::setFormat):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Remove an unused FrameLoader function
        https://bugs.webkit.org/show_bug.cgi?id=126785

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setState):
        * loader/FrameLoader.h:

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        * platform/PlatformMouseEvent.h:
        * platform/PlatformTouchEvent.h:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/PlatformTouchPoint.h:
        * platform/ScrollAnimatorNone.cpp:
        (WebCore::ScrollAnimator::create):
        * platform/URL.cpp:
        (WebCore::URL::parse):
        (WebCore::portAllowed):
        * platform/Widget.h:
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/DisplayRefreshMonitor.cpp:
        (WebCore::DisplayRefreshMonitor::DisplayRefreshMonitor):
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Clean up and fix some issues with stdout formatting of console messages.

        * Fix URLs not printing line numbers unless column number is > 0.
        * Change "CONSOLEAPI" to "CONSOLE" for the source.
        * Clean up how console.trace outputs and print URL, line and column for each frame.
        * Print "(unknown)" for anonymous and native code call frames.

        https://bugs.webkit.org/show_bug.cgi?id=126767

        Reviewed by Joseph Pecoraro.

        * page/Console.cpp:
        (WebCore::internalAddMessage):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printSourceURLAndPosition):
        (WebCore::PageConsole::printMessageSourceAndLevelPrefix):
        * page/PageConsole.h:

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [iOS] Fill in missing WebCoreThread function pointers
        https://bugs.webkit.org/show_bug.cgi?id=126776

        Reviewed by Timothy Hatcher.

        * platform/ios/wak/WebCoreThreadSystemInterface.cpp:
        (InitWebCoreThreadSystemInterface):

2014-01-10  Yongjun Zhang  <yongjun_zhang@apple.com>

        Clear unparented tiled layers on memory pressure.
        https://bugs.webkit.org/show_bug.cgi?id=126737

        Reviewed by Simon Fraser.

        TileController hold unparented tiles for a short period of time (1 -3 sec); we should clear these unparented
        tiles immediately if we are under memory pressure.
        
        The patch does 3 things to improve the behavior:
        1) When the system free memory is low (<35%), reduce the tiling threshold.  This could reduce
        the peak memory usage when system is under low memory since we will convert more web layers into
        tiled backing.
        2) Under memory pressure, immediately clear all unparented tiles.
        3) Add a cap (16 tiles) to limit the total number of unparented tiles in TileController's.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Add a new class TileControllerMemoryHandler.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::requiresTiledLayer):  Use a smaller tiling threshold if the system free memory is low.
        * platform/graphics/ca/mac/TileController.h:
        (WebCore::TileController::numberOfUnparentedTiles):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::startedNewCohort):
        (WebCore::TileController::removeUnparentedTilesNow): Remove all unparentd tiles.
        * platform/ios/MemoryPressureHandlerIOS.mm:
        * platform/ios/TileControllerMemoryHandlerIOS.cpp: Added.
        (WebCore::TileControllerMemoryHandler::removeTileController):
        (WebCore::TileControllerMemoryHandler::totalUnparentedTiledLayers):
        (WebCore::TileControllerMemoryHandler::tileControllerGainUnparentedTiles):
        (WebCore::TileControllerMemoryHandler::trimUnparentedTilesToTarget): Trims the number of unparented tiles until
            it reaches the target.
        (WebCore::tileControllerMemoryHandler):
        * platform/ios/TileControllerMemoryHandlerIOS.h: Added.
        (WebCore::TileControllerMemoryHandler::TileControllerMemoryHandler):

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [CSS Blending] Log blending as a layer creation reason in the WI
        https://bugs.webkit.org/show_bug.cgi?id=126159

        Reviewed by Timothy Hatcher.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/protocol/LayerTree.json:

2014-01-10  Andy Estes  <aestes@apple.com>

        Fix some iOS build errors during bindings generation.

        * bindings/objc/PublicDOMInterfaces.h: Included
        WebKitAdditions/PublicDOMInterfacesIOS.h and change
        -[DOMRGBColor color] to return a CGColorRef on iOS.

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Prevent some resources from showing up in Web Inspector as years in duration.

        No WebKit port passed a monotonic time to InspectorInstrumentation::didFinishLoading -- except Chromium.

        https://bugs.webkit.org/show_bug.cgi?id=126760

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishLoadingImpl):
        Revert part of r102961 to use finishTime as-is and not expect a monotonic time.

2014-01-10  Dirk Schulze  <krit@webkit.org>

        Make clipping path from basic-shapes relative to <box> value
        https://bugs.webkit.org/show_bug.cgi?id=126206

        Reviewed by Simon Fraser.

        Tests: css3/masking/clip-path-circle-border-box.html
               css3/masking/clip-path-circle-bounding-box.html
               css3/masking/clip-path-circle-content-box.html
               css3/masking/clip-path-circle-margin-box.html
               css3/masking/clip-path-circle-padding-box.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupClipPath): Add switch to differ between boxes
            and use different reference boxes to size the clipping path.

2014-01-10  Youenn Fablet  <youennf@gmail.com>


        Correctly set XHR loadend attributes (loaded and total).
        https://bugs.webkit.org/show_bug.cgi?id=120828

        Reviewed by Alexey Proskuryakov.
        
        Added correct initialization of lengthComputable, loaded and total attributes 
        to XHR ProgressEvent events (load, loadstart, loadend, abort, error and timeout).

        XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload now keep persistent knowledge 
        of m_loaded and m_total values with this patch.
        
        Code refactoring to handle event dispatching in case of error in a single manner.
        XMLHttpRequestProgressEventThrottle::dispatchProgressEvent is renamed as dispatchThrottledProgressEvent
        XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadend is replaced by dispatchProgressEvent(const AtomicString&)
        
        Fixed assertion issues over bug 120828 patch

        Tests: http/tests/xmlhttprequest/loadstart-event-init.html
               http/tests/xmlhttprequest/onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/onload-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onload-progressevent-attributes.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): changed readystatechange event from ProgressEvent to Event (not cancellable, not bubblable) to better match the spec 
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::networkError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::abortError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::dispatchErrorEvents): dispatch progress events in case of error
        (WebCore::XMLHttpRequest::didTimeout): code refactoring to handle error event dispatching in a single way
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: before the patch, the fact that a progress event is being throttled is stored indirectly (m_loaded or m_total not equal to zero). With the patch, this information is stored in m_hasThrottledProgressEvent. The m_loaded and m_total values are no longer set back to zero after a progress event is dispatched. This allows using these values to correctly initialize other ProgressEvent events (in particular loadend, abort, timeout...) 
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent): always update the new m_loaded and m_total values. If progress event is not sent as part of the function call, store the fact that a progress event is being throttled through m_hasThrottledProgressEvent. 
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): used to send any ProgressEvent event that is not be throttled
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h: introduced m_hasThrottledProgressEvent which stores whether a progress event is being throttled and m_computableLength which is used to initialize ProgressEvent computableLength
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h: introduced m_loaded, m_total and m_lengthComputable, similarly to XMLHttpRequestProgressEventThrottle

2014-01-10  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Change parseBasicShape to return a CSSPrimitiveValue
        https://bugs.webkit.org/show_bug.cgi?id=126713

        Reviewed by Dirk Schulze.

        Avoid the duplicated code wrapping the CSSBasicShape in a CSSPrimitiveValue
        by having parseBasicShape return a CSSPrimitiveValue reference.

        Refactoring, no new tests.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        (WebCore::CSSParser::parseClipPath):
        (WebCore::CSSParser::parseBasicShape):
        * css/CSSParser.h:

2014-01-10  Piotr Grad  <p.grad@samsung.com>

        Possible crash in ApplicationCache::removeResource.
        https://bugs.webkit.org/show_bug.cgi?id=126695

        Reviewed by Alexey Proskuryakov.

        No new tests.

        Iterator variable was used after it was removed.

        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::removeResource):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Another build fix for the Production Mac build following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Move the logic for appending the port-specific IDL files {Touch, TouchEvent, TouchList}.idl to the
        list of binding IDLs (BINDING_IDLS) before the definition of variables DOM_CLASSES and JS_DOM_HEADERS
        so that we generate the DOM and JS bindings for these IDLs.

        * DerivedSources.make:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Remove supportMultipleWindows setting
        https://bugs.webkit.org/show_bug.cgi?id=126772

        Reviewed by Beth Dakin.

        This setting was added in https://bugs.webkit.org/show_bug.cgi?id=99716 for the Chromium port
        and is unused by everyone else so get rid of it.

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):
        * page/Settings.in:

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::initTouchEvent):
        * dom/TouchEvent.h:
        * dom/ViewportArguments.cpp:
        * dom/ViewportArguments.h:
        * history/HistoryItem.h:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        (WebCore::PingLoader::sendPing):
        (WebCore::PingLoader::sendViolationReport):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * page/NavigatorBase.cpp:
        * page/Settings.cpp:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * platform/Cursor.cpp:
        * platform/Cursor.h:
        (WebCore::Cursor::Cursor):
        * platform/DragData.h:
        * platform/DragImage.h:
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsIntoWindow):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::shouldRespectImageOrientation):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerScriptLoader::load):
        * workers/Worker.cpp:
        (WebCore::Worker::create):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerScriptLoader.cpp:
        (WebCore::WorkerScriptLoader::createResourceRequest):
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2014-01-10  Benjamin Poulain  <bpoulain@apple.com>

        Remove the BlackBerry port from trunk
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::initProtocolHandlerWhitelist):
        * UseJSC.cmake:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/js/GCController.cpp:
        (WebCore::GCController::GCController):
        (WebCore::GCController::garbageCollectSoon):
        * bindings/js/GCController.h:

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the WebCore, WebKit build targets following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Tell Xcode that the supported platforms for all WebKit targets are iOS and OS X.

        * Configurations/Base.xcconfig:

2014-01-09  Andy Estes  <aestes@apple.com>

        [iOS] Upstream iOS changes to MigrateHeaders.make
        https://bugs.webkit.org/show_bug.cgi?id=126731

        Reviewed by David Kilzer.

        * WebCore.xcodeproj/project.pbxproj: Mark an iOS-specific header at
        Private that will later be migrated by WebKit.

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the Production Mac build following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Substitute JAVASCRIPTCORE_PRIVATE_HEADERS_DIR_Production_ for JAVASCRIPTCORE_PRIVATE_HEADERS_Production_.

        * Configurations/WebCore.xcconfig:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Add a missing include.

        * Modules/webdatabase/DatabaseManager.h:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Use STL threading primitives in DatabaseDetails and DatabaseManager
        https://bugs.webkit.org/show_bug.cgi?id=126759

        Reviewed by Geoffrey Garen.

        * Modules/webdatabase/DatabaseDetails.h:
        (WebCore::DatabaseDetails::DatabaseDetails):
        (WebCore::DatabaseDetails::threadID):
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::didConstructDatabaseContext):
        (WebCore::DatabaseManager::didDestructDatabaseContext):
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:

2014-01-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161629.
        http://trac.webkit.org/changeset/161629
        https://bugs.webkit.org/show_bug.cgi?id=126762

        Fails svg/custom/conditional-processing-2.html (Requested by
        ap on #webkit).

        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-10  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix since r161589.

        The changeset causes a compile failure with --no-svg.

        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::drawGlyphBuffer):

2014-01-10  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [WebGL] Removing unnecessary pointer checks
        https://bugs.webkit.org/show_bug.cgi?id=124046

        Reviewed by Brent Fulgham.

        We do not need to check for a null array three times in
        the same call. Let's just do it once!

        No new tests. Covered by existing ones.

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferData):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Speculative build fix for Windows following <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Reviewed by David Kilzer.

        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):

2014-01-10  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [WebGL] Wrong condition order in the if statement
        https://bugs.webkit.org/show_bug.cgi?id=125000

        Reviewed by Brent Fulgham.

        We should only pay the cost of string comparison once. The
        current logic requires a string comparison every time we
        pass through the function. Instead, by reordering the statements
        we can short-circuit through the boolean test after the initial
        setup is complete.

        No new tests. No behaviour changes.

        * platform/graphics/opengl/Extensions3DOpenGLES.cpp:
        (WebCore::Extensions3DOpenGLES::supportsExtension):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        CTTE in AudioContext::AutoLocker
        https://bugs.webkit.org/show_bug.cgi?id=126758

        Reviewed by Antti Koivisto.

        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::connect):
        (WebCore::AudioBasicInspectorNode::disconnect):
        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::setBuffer):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::refNode):
        (WebCore::AudioContext::deleteMarkedNodes):
        (WebCore::AudioContext::removeMarkedSummingJunction):
        * Modules/webaudio/AudioContext.h:
        (WebCore::AudioContext::AutoLocker::AutoLocker):
        (WebCore::AudioContext::AutoLocker::~AutoLocker):
        * Modules/webaudio/AudioNode.cpp:
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::setChannelCount):
        (WebCore::AudioNode::setChannelCountMode):
        (WebCore::AudioNode::setChannelInterpretation):
        (WebCore::AudioNode::enableOutputsIfNecessary):
        * Modules/webaudio/MediaElementAudioSourceNode.cpp:
        (WebCore::MediaElementAudioSourceNode::setFormat):
        * Modules/webaudio/WaveShaperNode.cpp:
        (WebCore::WaveShaperNode::setOversample):

2014-01-10  Antti Koivisto  <antti@apple.com>

        Use element iterators more
        https://bugs.webkit.org/show_bug.cgi?id=126756

        Reviewed by Anders Carlsson.

        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::invalidateStyleForAllLinks):
        (WebCore::VisitedLinkState::invalidateStyleForLink):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::renderMeter):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::renderProgress):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureInsertionPointList):
        * style/StyleResolveTree.cpp:

2014-01-10  Daniel Bates  <dabates@apple.com>

        Attempt to fix the iOS build after <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/audio/ios/AudioSessionIOS.mm: Import header PassOwnPtr.h so that we can use adoptPtr().

2014-01-10  Daniel Bates  <dabates@apple.com>

        Attempt to fix the build after <http://trac.webkit.org/changeset/161638>
        (https://bugs.webkit.org/show_bug.cgi?id=126698)

        Substitute tab characters for space characters.

        * DerivedSources.make:

2014-01-10  Anders Carlsson  <andersca@apple.com>

        DOMWindow::showModalDialog should use std::function
        https://bugs.webkit.org/show_bug.cgi?id=126753

        Reviewed by Antti Koivisto.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::DialogHandler::dialogCreated):
        (WebCore::JSDOMWindow::showModalDialog):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createWindow):
        (WebCore::DOMWindow::showModalDialog):
        * page/DOMWindow.h:

2014-01-10  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore and Tools miscellaneous changes
        https://bugs.webkit.org/show_bug.cgi?id=126698

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig:
        * Configurations/WebCore.xcconfig:
        * Configurations/WebCoreTestSupport.xcconfig:
        * Configurations/iOS.xcconfig: Added.
        * DerivedSources.make:
        * English.lproj/Localizable.strings:
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.cpp: Copied from Source/WebCore/editing/TextAffinity.h.
        (WebCore::stringForPlaybackTargetAvailability):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::WebKitPlaybackTargetAvailabilityEvent):
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.h: Added.
        (WebCore::WebKitPlaybackTargetAvailabilityEventInit::WebKitPlaybackTargetAvailabilityEventInit):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::~WebKitPlaybackTargetAvailabilityEvent):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::create):
        (WebCore::WebKitPlaybackTargetAvailabilityEvent::availability):
        * Modules/airplay/WebKitPlaybackTargetAvailabilityEvent.idl: Copied from Source/WebCore/editing/DeleteButton.h.
        * Modules/geolocation/Geolocation.cpp:
        (WebCore::Geolocation::Geolocation):
        (WebCore::Geolocation::canSuspend):
        (WebCore::Geolocation::suspend):
        (WebCore::Geolocation::resume):
        (WebCore::Geolocation::resumeTimerFired):
        (WebCore::Geolocation::resetAllGeolocationPermission):
        (WebCore::Geolocation::stop):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::positionChanged):
        (WebCore::Geolocation::setError):
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/NavigatorGeolocation.cpp:
        (WebCore::NavigatorGeolocation::resetAllGeolocationPermission):
        * Modules/geolocation/NavigatorGeolocation.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::SpeechSynthesis):
        (WebCore::SpeechSynthesis::speak):
        * Modules/speech/SpeechSynthesis.h:
        (WebCore::SpeechSynthesis::userGestureRequiredForSpeechStart):
        (WebCore::SpeechSynthesis::removeBehaviorRestriction):
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioContext.h:
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        * Modules/webdatabase/Database.cpp:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::performOpenAndVerify):
        (WebCore::DatabaseBackendBase::incrementalVacuumIfNeeded):
        * Modules/webdatabase/DatabaseContext.cpp:
        (WebCore::DatabaseContext::DatabaseContext):
        (WebCore::DatabaseContext::databaseThread):
        (WebCore::DatabaseContext::setPaused):
        * Modules/webdatabase/DatabaseContext.h:
        * Modules/webdatabase/DatabaseManagerClient.h:
        * Modules/webdatabase/DatabaseTask.cpp:
        (WebCore::DatabaseTask::performTask):
        (WebCore::Database::DatabaseTransactionTask::shouldPerformWhilePaused):
        * Modules/webdatabase/DatabaseTask.h:
        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        (WebCore::DatabaseThread::requestTermination):
        (WebCore::DatabaseUnpauseTask::create):
        (WebCore::DatabaseUnpauseTask::shouldPerformWhilePaused):
        (WebCore::DatabaseUnpauseTask::DatabaseUnpauseTask):
        (WebCore::DatabaseUnpauseTask::doPerformTask):
        (WebCore::DatabaseUnpauseTask::debugTaskName):
        (WebCore::DatabaseThread::setPaused):
        (WebCore::DatabaseThread::handlePausedQueue):
        (WebCore::DatabaseThread::databaseThread):
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setQuota):
        (WebCore::DatabaseTracker::deleteOrigin):
        (WebCore::DatabaseTracker::deleteDatabase):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
        (WebCore::isZeroByteFile):
        (WebCore::DatabaseTracker::deleteDatabaseFileIfEmpty):
        (WebCore::DatabaseTracker::openDatabaseMutex):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskWillBeScheduled):
        (WebCore::DatabaseTracker::emptyDatabaseFilesRemovalTaskDidFinish):
        (WebCore::DatabaseTracker::setDatabasesPaused):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        (WebCore::SQLTransactionBackend::shouldPerformWhilePaused):
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Resources/DictationPhraseWithAlternativesDot.png: Added.
        * Resources/DictationPhraseWithAlternativesDot@2x.png: Added.
        * Resources/SpellingDot.png: Added.
        * Resources/SpellingDot@2x.png: Added.
        * Resources/decrementArrow.tiff: Added.
        * Resources/hScrollControl_left.png: Added.
        * Resources/hScrollControl_middle.png: Added.
        * Resources/hScrollControl_right.png: Added.
        * Resources/incrementArrow.tiff: Added.
        * Resources/markedLeft.png: Added.
        * Resources/markedMiddle.png: Added.
        * Resources/markedRight.png: Added.
        * Resources/vScrollControl_bottom.png: Added.
        * Resources/vScrollControl_middle.png: Added.
        * Resources/vScrollControl_top.png: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/GCController.cpp:
        (WebCore::GCController::garbageCollectNow):
        (WebCore::GCController::releaseExecutableMemory):
        * bindings/js/GCController.h:
        * bindings/js/JSCallbackData.h:
        (WebCore::JSCallbackData::~JSCallbackData):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsProfiling):
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        (WebCore::JSDOMWindowBase::commonVM):
        (WebCore::JSDOMWindowBase::commonVMExists):
        (WebCore::JSDOMWindowBase::commonVMInternal):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::touch):
        (WebCore::JSDOMWindow::touchList):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::webkitCompassHeading):
        (WebCore::JSDeviceOrientationEvent::webkitCompassAccuracy):
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/JSTouchCustom.cpp:
        * bindings/js/JSTouchListCustom.cpp:
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::didContinue):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::initializeThreading):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ios/TouchConstructors.cpp: Added.
        * bindings/objc/DOM.mm:
        (WebCore::wkQuadFromFloatQuad):
        (WebCore::kit):
        (WebCore::min4):
        (WebCore::max4):
        (WebCore::emptyQuad):
        (-[WKQuadObject initWithQuad:]):
        (-[WKQuadObject quad]):
        (-[WKQuadObject boundingBox]):
        (-[DOMNode boundingBox]):
        (-[DOMNode absoluteQuad]):
        (-[DOMNode absoluteQuadAndInsideFixedPosition:]):
        (-[DOMNode boundingBoxUsingTransforms]):
        (-[DOMNode lineBoxQuads]):
        (-[DOMNode _linkElement]):
        (-[DOMNode hrefURL]):
        (-[DOMNode hrefTarget]):
        (-[DOMNode hrefFrame]):
        (-[DOMNode hrefLabel]):
        (-[DOMNode hrefTitle]):
        (-[DOMNode boundingFrame]):
        (-[DOMNode innerFrameQuad]):
        (-[DOMNode computedFontSize]):
        (-[DOMNode nextFocusNode]):
        (-[DOMNode previousFocusNode]):
        (-[DOMRange boundingBox]):
        (-[DOMRange renderedImageForcingBlackText:renderedImageForcingBlackText:]):
        (-[DOMElement _font]):
        (-[DOMHTMLLinkElement _mediaQueryMatchesForOrientation:]):
        (-[DOMHTMLLinkElement _mediaQueryMatches]):
        * bindings/objc/DOMEvents.h:
        * bindings/objc/DOMEvents.mm:
        (kitClass):
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLElement scrollYOffset]):
        (-[DOMHTMLElement setScrollXOffset:scrollYOffset:]):
        (-[DOMHTMLElement setScrollXOffset:scrollYOffset:adjustForIOSCaret:]):
        (-[DOMHTMLElement absolutePosition::::]):
        (-[DOMHTMLInputElement _autocapitalizeType]):
        (-[DOMHTMLTextAreaElement _autocapitalizeType]):
        (-[DOMHTMLInputElement setValueWithChangeEvent:]):
        (-[DOMHTMLInputElement setValueAsNumberWithChangeEvent:]):
        * bindings/objc/DOMInternal.h:
        * bindings/objc/DOMInternal.mm:
        (wrapperCacheLock):
        (getDOMWrapper):
        (addDOMWrapper):
        (removeDOMWrapper):
        * bindings/objc/DOMPrivate.h:
        * bindings/objc/DOMUIKitExtensions.h: Added.
        * bindings/objc/DOMUIKitExtensions.mm: Added.
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeaderContentHeader):
        (GenerateImplementationContentHeader):
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateCallbackImplementation):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):
        (GetClassName):
        (IsCoreFoundationType):
        (GetObjCType):
        (AddIncludesForType):
        (GenerateHeader):
        (GenerateImplementation):
        (WriteData):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/preprocessor.pm:
        (applyPreprocessor):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::fieldNamed):
        * bridge/objc/objc_instance.mm:
        * config.h:
        * dom/Document.cpp:
        (WebCore::Document::addAutoSizingNode):
        * dom/Document.h:
        * dom/Document.idl:
        * dom/ios/TouchEvents.cpp: Added.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):
        * editing/CompositeEditCommand.cpp:
        (WebCore::EditCommandComposition::unapply):
        (WebCore::CompositeEditCommand::apply):
        (WebCore::CompositeEditCommand::inputText):
        (WebCore::CompositeEditCommand::replaceTextInNodePreservingMarkers):
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/CompositeEditCommand.h:
        * editing/DeleteButton.h:
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::enable):
        (WebCore::DeleteButtonController::disable):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/DeleteSelectionCommand.h:
        * editing/EditAction.h:
        * editing/EditCommand.h:
        (WebCore::EditCommand::isInsertTextCommand):
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        (WebCore::ClearTextCommand::ClearTextCommand):
        (WebCore::ClearTextCommand::editingAction):
        (WebCore::ClearTextCommand::CreateAndApply):
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::clearText):
        (WebCore::Editor::insertDictationPhrases):
        (WebCore::Editor::setDictationPhrasesAsChildOfElement):
        (WebCore::Editor::confirmMarkedText):
        (WebCore::Editor::setTextAsChildOfElement):
        (WebCore::Editor::notifyComponentsOnChangedSelection):
        (WebCore::Editor::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        (WebCore::Editor::copy):
        (WebCore::Editor::setBaseWritingDirection):
        (WebCore::Editor::setComposition):
        (WebCore::Editor::showSpellingGuessPanel):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::changeBackToReplacedString):
        (WebCore::Editor::updateMarkersForWordsAffectedByEditing):
        (WebCore::Editor::setIgnoreCompositionSelectionChange):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::shouldChangeSelection):
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::resolveTextCheckingTypeMask):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeClearText):
        (WebCore::enabledCopy):
        (WebCore::enabledCut):
        (WebCore::enabledClearText):
        (WebCore::createCommandMap):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::setSelection):
        (WebCore::FrameSelection::modifyExtendingRight):
        (WebCore::FrameSelection::modifyExtendingForward):
        (WebCore::FrameSelection::modifyMovingRight):
        (WebCore::FrameSelection::modifyMovingForward):
        (WebCore::FrameSelection::modifyExtendingLeft):
        (WebCore::FrameSelection::modifyExtendingBackward):
        (WebCore::FrameSelection::modifyMovingLeft):
        (WebCore::FrameSelection::modifyMovingBackward):
        (WebCore::FrameSelection::setSelectedRange):
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::updateAppearance):
        (WebCore::FrameSelection::shouldDeleteSelection):
        (WebCore::FrameSelection::revealSelection):
        (WebCore::FrameSelection::setSelectionFromNone):
        (WebCore::FrameSelection::shouldChangeSelection):
        (WebCore::FrameSelection::expandSelectionToElementContainingCaretSelection):
        (WebCore::FrameSelection::elementRangeContainingCaretSelection):
        (WebCore::FrameSelection::expandSelectionToWordContainingCaretSelection):
        (WebCore::FrameSelection::wordRangeContainingCaretSelection):
        (WebCore::FrameSelection::expandSelectionToStartOfWordContainingCaretSelection):
        (WebCore::FrameSelection::characterInRelationToCaretSelection):
        (WebCore::FrameSelection::characterBeforeCaretSelection):
        (WebCore::FrameSelection::characterAfterCaretSelection):
        (WebCore::FrameSelection::wordOffsetInRange):
        (WebCore::FrameSelection::spaceFollowsWordInRange):
        (WebCore::FrameSelection::selectionAtDocumentStart):
        (WebCore::FrameSelection::selectionAtSentenceStart):
        (WebCore::FrameSelection::selectionAtWordStart):
        (WebCore::FrameSelection::rangeByMovingCurrentSelection):
        (WebCore::FrameSelection::rangeByExtendingCurrentSelection):
        (WebCore::FrameSelection::selectRangeOnElement):
        (WebCore::FrameSelection::wordSelectionContainingCaretSelection):
        (WebCore::FrameSelection::actualSelectionAtSentenceStart):
        (WebCore::FrameSelection::rangeByAlteringCurrentSelection):
        (WebCore::FrameSelection::clearCurrentSelection):
        (WebCore::FrameSelection::setCaretBlinks):
        (WebCore::FrameSelection::setCaretColor):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::suppressCloseTyping):
        (WebCore::FrameSelection::restoreCloseTyping):
        (WebCore::FrameSelection::setUpdateAppearanceEnabled):
        (WebCore::FrameSelection::suppressScrolling):
        (WebCore::FrameSelection::restoreScrolling):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doReapply):
        * editing/InsertIntoTextNodeCommand.h:
        * editing/InsertTextCommand.h:
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TextAffinity.h:
        * editing/TextCheckingHelper.cpp:
        * editing/TextGranularity.h:
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::ensureLastEditCommandHasCurrentSelectionIfOpenForMoreTyping):
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::FriendlyEditCommand::setEndingSelection):
        (WebCore::TypingCommand::setEndingSelectionOnLastInsertCommand):
        * editing/TypingCommand.h:
        * editing/VisiblePosition.h:
        (WebCore::operator<):
        (WebCore::operator>):
        (WebCore::operator<=):
        (WebCore::operator>=):
        * editing/VisibleSelection.cpp:
        (WebCore::VisibleSelection::setStartAndEndFromBaseAndExtentRespectingGranularity):
        (WebCore::VisibleSelection::adjustSelectionToAvoidCrossingEditingBoundaries):
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        (WebCore::startOfDocument):
        (WebCore::endOfDocument):
        (WebCore::directionIsDownstream):
        (WebCore::atBoundaryOfGranularity):
        (WebCore::withinTextUnitOfGranularity):
        (WebCore::nextCharacterBoundaryInDirection):
        (WebCore::nextWordBoundaryInDirection):
        (WebCore::nextSentenceBoundaryInDirection):
        (WebCore::nextLineBoundaryInDirection):
        (WebCore::nextParagraphBoundaryInDirection):
        (WebCore::nextDocumentBoundaryInDirection):
        (WebCore::positionOfNextBoundaryOfGranularity):
        (WebCore::enclosingTextUnitOfGranularity):
        (WebCore::distanceBetweenPositions):
        (WebCore::wordRangeFromPosition):
        (WebCore::closestWordBoundaryForPosition):
        * editing/VisibleUnits.h:
        * editing/ios/DictationCommandIOS.cpp: Added.
        * editing/ios/DictationCommandIOS.h: Added.
        (WebCore::DictationCommandIOS::create):
        (WebCore::DictationCommandIOS::editingAction):
        * editing/mac/FrameSelectionMac.mm:
        (WebCore::FrameSelection::notifyAccessibilityForSelectionChange):
        * fileapi/AsyncFileStream.cpp:
        * generate-export-file: Added.
        * inspector/InspectorCounters.h:
        * inspector/InspectorFrontendHost.h:
        * make-export-file-generator:
        * plugins/PluginPackage.h:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::willProvidePluginLayer):
        (WebCore::PluginViewBase::attachPluginLayer):
        (WebCore::PluginViewBase::detachPluginLayer):
        * style/StyleResolveForDocument.cpp:
        (WebCore::Style::resolveForDocument):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementImplicitVisibility):
        * testing/Internals.cpp:
        (WebCore::Internals::getCurrentCursorInfo):
        (WebCore::Internals::isSelectPopupVisible):
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::workerThread):

2014-01-10  Daniel Bates  <dabates@apple.com>

        Fix the iOS build after <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/graphics/ios/MediaPlayerPrivateIOS.h:
        (WebCore::MediaPlayerPrivateIOS::engineDescription): Adding missing return keyword.

2014-01-10  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Remove unused CSSParser::parseFlowThread
        https://bugs.webkit.org/show_bug.cgi?id=126749

        Reviewed by Antti Koivisto.

        There are two versions of CSSParser::parseFlowThread. Remove the unused one:
        bool parseFlowThread(const String& flowName);

        Tests: No tests, code cleanup.

        * css/CSSParser.cpp:
        * css/CSSParser.h:

2014-01-10  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Build fix after r161589.
        https://bugs.webkit.org/show_bug.cgi?id=126747

        Reviewed by Anders Carlsson.

        * platform/network/ResourceHandle.cpp:
        Include NotImplemented.h for all platforms.

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Convert some for loops over to range-based for
        https://bugs.webkit.org/show_bug.cgi?id=126752

        Reviewed by Antti Koivisto.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::clearStorageID):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::clearStorageID):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::fillResourceList):
        * loader/appcache/ApplicationCacheResource.cpp:
        (WebCore::ApplicationCacheResource::estimatedSizeInStorage):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::cacheGroupForURL):
        * loader/archive/ArchiveFactory.cpp:
        (WebCore::ArchiveFactory::registerKnownArchiveMIMETypes):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::styleAvailable):
        (WebCore::AnimationControllerPrivate::startTimeResponse):

2014-01-10  Anders Carlsson  <andersca@apple.com>

        Tighten up two functions in the inspector code
        https://bugs.webkit.org/show_bug.cgi?id=126751

        Reviewed by Antti Koivisto.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::frameStartedLoadingImpl):
        (WebCore::InspectorInstrumentation::frameStoppedLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        (WebCore::InspectorInstrumentation::frameStoppedLoading):
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        * inspector/InspectorPageAgent.h:

2014-01-10  Antti Koivisto  <antti@apple.com>

        Crash when mutating SVG text with transform
        https://bugs.webkit.org/show_bug.cgi?id=126744

        Reviewed by Dirk Schulze.

        Test: svg/custom/mutation-text-transform-crash.html
        
        Text-transform property triggers subtreeTextDidChange when an SVG text renderer is
        being added to the render tree. The function assumes the child is already fully in the tree
        but in this case we are still in middle of adding it.

        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::subtreeTextDidChange):
        
            Bail out if the changed RenderSVGInlineText can't be found from m_layoutAttributes.
            This means that subtreeChildWasAdded hasn't been invoked yet for it and there is nothing
            to update. The required updates will happen in subtreeChildWasAdded.

2014-01-10  Frédéric Wang  <fred.wang@free.fr>

        [SVG] Accept HTML and MathML namespaces as valid requiredExtensions
        https://bugs.webkit.org/show_bug.cgi?id=88188

        Reviewed by Dirk Schulze.

        When HTML and MathML are used as foreign objects of an SVG image, it is
        important for Web authors to be able to specify a fallback content for
        SVG-only readers or browsers without MathML support. We rely on the
        requiredExtensions for that purpose and we use the XHTML/MathML
        namespaces as suggested in SVG Tiny 1.2 and implemented in Gecko.

        Tests: svg/custom/conditional-processing-1.svg
               svg/custom/conditional-processing-2.html
               svg/dom/SVGTests.html

        * svg/SVGSwitchElement.cpp: Remove an incorrect FIXME comment and replace it with a reference to bug 74749.
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGTests.cpp: Check if the list of required extensions contains only the XHTML/MathML namespaces.
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):

2014-01-10  Mihai Tica  <mitica@adobe.com>

        Add support for blendmode to Core Animation layer.
        Patch by Rik Cabanier, Dean Jackson and Mihai Tica.

        https://bugs.webkit.org/show_bug.cgi?id=99200

        Reviewed by Dirk Schulze.

        Tests: css3/compositing/blend-mode-layers.html
               css3/compositing/blend-mode-overflow.html
               css3/compositing/blend-mode-reflection.html
               css3/compositing/blend-mode-should-not-have-compositing-layer.html
               css3/compositing/blend-mode-simple.html

        * WebCore.exp.in: export PlatformCALayer::setBlendMode for WebKit::PlatformCALayerRemote
        * WebCore.xcodeproj/project.pbxproj: Add PlatformCAFiltersMac.h
        * platform/graphics/GraphicsLayer.cpp: add blendMode member
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::blendMode):
        (WebCore::GraphicsLayer::setBlendMode):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setBlendMode):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): add call to updateBlendMode()
        (WebCore::GraphicsLayerCA::updateBlendMode):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.h: Added.
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::setBlendingFiltersOnLayer): set a compositing CAFilter on CALayer
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::setBlendMode): call to PlatformCAFilters::setBlendingFiltersOnLayer
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer):
        (WebCore::RenderLayerBacking::updateBlendMode):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::setBlendMode):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::CompositingState::CompositingState): add m_subtreeHasBlending member
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): promote layer if subtree has blending
        (WebCore::RenderLayerCompositor::reasonsForCompositing):
        (WebCore::RenderLayerCompositor::logReasonsForCompositing): log blending reason
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason): add blending reason
        * rendering/RenderLayerCompositor.h:

2014-01-10  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Implement visual overflow computation for inline elements
        https://bugs.webkit.org/show_bug.cgi?id=125291

        Reviewed by David Hyatt.

        The patch implements visual overflow computation for inline elements per region. The algorithm
        uses the container region of each root line box to determine the lines in a region generated by
        a RenderInline. The overflow of a RenderInline inside a region is the smallest rectangle that fits
        all the line boxes belonging to that region.

        The patch also correctly flips for writing mode the overflow of a renderer before clipping with it.

        Tests: fast/regions/overflow-in-variable-width-regions-inline-bt.html
               fast/regions/overflow-in-variable-width-regions-inline-continuation.html
               fast/regions/overflow-in-variable-width-regions-inline-lr.html
               fast/regions/overflow-in-variable-width-regions-inline-rl.html
               fast/regions/overflow-in-variable-width-regions-inline.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes): Always create line boxes for RenderInline
        (WebCore::RenderInline::linesVisualOverflowBoundingBoxInRegion):
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:

2014-01-09  Jer Noble  <jer.noble@apple.com>

        [Mac] .mp3 media document controls missing their background
        https://bugs.webkit.org/show_bug.cgi?id=126683

        Reviewed by Eric Carlson.

        Test: media/media-document-audio-controls-visible.html

        <video> elements in a media document are created with an intrinsic size of 300x1,
        with the expectation that either the size will be updated if the media has a video
        track, or the controls will visibly overflow if the media is audio-only. Since the
        shadow root is a flex-box, the panel was being collapsed to 1px high, so give the panel
        a minimum height to prevent that. Also, disable "fading out" the controls in a
        media document for an audio-only file by adding a "no-video" class to the panel
        and adding a media document-only rule to force the controls to always be visible.

        * Modules/mediacontrols/mediaControlsApple.css:
        (video:-webkit-full-page-media::-webkit-media-controls-panel.no-video):
        (audio::-webkit-media-controls-panel):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller): Call updateHasVideo().
        (Controller.prototype.addVideoListeners): Add video track listeners.
        (Controller.prototype.removeVideoListeners): Remove same.
        (Controller.prototype.updateHasVideo): Add a 'no-video' class to the panel if
            the video element has no video tracks.

2014-01-09  Anders Carlsson  <andersca@apple.com>

        Clean up ProgressTracker a little
        https://bugs.webkit.org/show_bug.cgi?id=126738

        Reviewed by Dan Bernstein.

        Use Frame& where the frame can never be null, avoid an extra hash lookup and
        switch the m_progressItems map over to std::unique_ptr.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::frameStartedLoading):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::~FrameProgressTracker):
        (WebCore::FrameLoader::FrameProgressTracker::progressStarted):
        (WebCore::FrameLoader::FrameProgressTracker::progressCompleted):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        (WebCore::ProgressTracker::incrementProgress):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveData):

2014-01-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix a build break on EFL debug build
        https://bugs.webkit.org/show_bug.cgi?id=126735

        Reviewed by Anders Carlsson.

        No new tests, just build fix.

        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::sharedTimerFiredInternal):  Add parentheses.

2014-01-09  Anders Carlsson  <andersca@apple.com>

        Remove unused FrameLoader member functions
        https://bugs.webkit.org/show_bug.cgi?id=126734

        Reviewed by Andreas Kling.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r161563.

        Remove stale forward declaration causing namespace ambiguity
        later on in a Windows AllInOne file that picked it up. Also
        remove a few stale functions that are not used and accidentally
        got added back in when the file changed names.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Dean Jackson  <dino@apple.com>

        [WebGL] Expose texture_float_linear and texture_half_float to getSupportedExtensions
        https://bugs.webkit.org/show_bug.cgi?id=126732

        Reviewed by Tim Horton.

        When I added support for these two extensions, I forgot to add their
        names to the list in getSupportedExtensions.

        Covered by the Khronos test: conformance/extensions/get-extension.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getSupportedExtensions): Add OES_texture_float_linear
        and OES_texture_half_float if the WebGL context supports them.

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Revert r161611, incorrect fix, will fix better.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Jer Noble  <jer.noble@apple.com>

        [Mac] Scrubbing performance of HD content with software decoding is poor.
        https://bugs.webkit.org/show_bug.cgi?id=126705

        Reviewed by Eric Carlson.

        Instead of issuing a new seek before the previous one completes, wait until that seek's
        completion handler is called, and then issue the new seek. This has the added benefit of
        coalescing multiple incoming seeks so that only the last one is acted upon.

        Save the parameters passed into seekToTime and bind them together in a std::function
        to be replayed once the in-flight seek completes. To handle the case where a completion
        handler fires after the media player is destroyed, add a weakPtrFactory and pass a
        WeakPtr into the completion handler.
        
        Clean up some ivars which are no longer necessary: remove m_seekCount and m_seekTime.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation): Initialize the
            WeakPtrFactory.
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance):
        (WebCore::MediaPlayerPrivateAVFoundation::seeking): m_seekTime -> m_seeking.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createWeakPtr):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::finishSeek):

2014-01-08  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Report the intrinsic size of the media element
        https://bugs.webkit.org/show_bug.cgi?id=125156

        Reviewed by Eric Carlson.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize): Pass to MediaSourcePrivateAVFObjC.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::sizeChanged): Added; Pass to MediaPlayer.
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::naturalSize): Return the union of the naturalSizes of all active buffers.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset): Notify the media player that the size changed.
        (WebCore::SourceBufferPrivateAVFObjC::naturalSize): Return the size of the selected video track.
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.mm: Renamed from Source/WebCore/platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.cpp.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::assetTrack): Made const.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::naturalSize): Return the size of the AVAssetTrack.

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r161563.

        Remove stale forward declaration causing namespace ambiguity
        later on in a Windows AllInOne file that picked it up.

        * bindings/js/ScriptGlobalObject.h:

2014-01-09  Simon Fraser  <simon.fraser@apple.com>

        Enable async scrolling for iOS
        https://bugs.webkit.org/show_bug.cgi?id=126730

        Reviewed by Tim Horton.

        Turn on ENABLE_ASYNC_SCROLLING for iOS.
        
        Disable rubber-banding and scrollbar-related Mac code for PLATFORM(IOS),
        provide stubs for scrolling nodes and scrolling state nodes, and an
        iOS scrolling tree, and scrolling coordinator.
        
        Move crollingCoordinator::create() into the platform implementation file.

        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isScrollingTreeIOS):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/ios/ScrollingCoordinatorIOS.h: Copied from Source/WebKit2/UIProcess/Scrolling/RemoteScrollingTree.h.
        * page/scrolling/ios/ScrollingCoordinatorIOS.mm: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm.
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinatorIOS::ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::~ScrollingCoordinatorIOS):
        (WebCore::ScrollingCoordinatorIOS::pageDestroyed):
        (WebCore::ScrollingCoordinatorIOS::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorIOS::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorIOS::scrollingStateTreeCommitterTimerFired):
        (WebCore::ScrollingCoordinatorIOS::commitTreeState):
        (WebCore::ScrollingCoordinatorIOS::createScrollingTreeNode):
        * page/scrolling/ios/ScrollingTreeIOS.cpp: Added.
        (WebCore::ScrollingTreeIOS::create):
        (WebCore::ScrollingTreeIOS::ScrollingTreeIOS):
        (WebCore::ScrollingTreeIOS::~ScrollingTreeIOS):
        (WebCore::derefScrollingCoordinator):
        (WebCore::ScrollingTreeIOS::invalidate):
        (WebCore::ScrollingTreeIOS::commitNewTreeState):
        (WebCore::ScrollingTreeIOS::updateMainFrameScrollPosition):
        (WebCore::ScrollingTreeIOS::createNode):
        * page/scrolling/ios/ScrollingTreeIOS.h: Copied from Source/WebCore/page/scrolling/ThreadedScrollingTree.h.
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h: Added.
        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm: Added.
        (WebCore::ScrollingTreeScrollingNodeIOS::create):
        (WebCore::ScrollingTreeScrollingNodeIOS::ScrollingTreeScrollingNodeIOS):
        (WebCore::ScrollingTreeScrollingNodeIOS::~ScrollingTreeScrollingNodeIOS):
        (WebCore::ScrollingTreeScrollingNodeIOS::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeIOS::updateAfterChildren):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeIOS::setScrollLayerPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::minimumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::maximumScrollPosition):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollBy):
        (WebCore::ScrollingTreeScrollingNodeIOS::scrollByWithoutContentEdgeConstraints):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinator::create):
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:

2014-01-09  Myles C. Maxfield  <mmaxfield@apple.com>

        text-decoration-skip: ink does not work with line wraps
        https://bugs.webkit.org/show_bug.cgi?id=126729

        Reviewed by Simon Fraser.

        InlineTextBox's m_start and m_length fields are offsets into the renderer's string,
        not the generated TextRun. Because of this distinction, when multiple InlineTextBoxes
        were constructed for the same element, all the subsequent elements would use incorrect
        indices and therefore not have skipping decorations.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-multiline.html

        * platform/graphics/Font.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::dashesForIntersectionsWithRect):
        * rendering/InlineTextBox.cpp:
        (WebCore::drawSkipInkUnderline):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::dashesForIntersectionsWithRect):
        * rendering/TextPainter.h:

2014-01-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove remaining blackberry files I could find in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * PlatformBlackBerry.cmake: Removed.
        * Resources/blackberry: Removed.
        * css/mediaControlsBlackBerry.css: Removed.
        * css/mediaControlsBlackBerryFullscreen.css: Removed.
        * css/themeBlackBerry.css: Removed.
        * editing/blackberry: Removed.
        * history/blackberry: Removed.
        * html/shadow/MediaControlsBlackBerry.cpp: Removed.
        * html/shadow/MediaControlsBlackBerry.h: Removed.
        * page/blackberry: Removed.
        * page/scrolling/blackberry: Removed.
        * plugins/blackberry: Removed.

2014-01-09  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Return filtered results for getProgramParameter for ACTIVE_ATTRIBUTES and ACTIVE_UNIFORMS
        https://bugs.webkit.org/show_bug.cgi?id=126718
        <rdar://problem/15202048>

        Reviewed by Dean Jackson.

        Covered by webgl/conformance/ogles/GL/biuDepthRange/biuDepthRange_001_to_002.html and
        webgl/conformance/ogles/GL/gl_FragCoord/gl_FragCoord_001_to_003.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getActiveAttrib): Added loging.
        (WebCore::WebGLRenderingContext::getActiveUniform): Added logging.
        (WebCore::WebGLRenderingContext::getAttribLocation): Drive-by-fix. Return
        -1 on link failure (an invalid location) rather than 0 (a valid
        location) when link fails.
        (WebCore::WebGLRenderingContext::getProgramParameter): Use new
        method to return filtered count.
        (WebCore::WebGLRenderingContext::getUniformLocation): Use nullptr
        rather than returning 0.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::ActiveShaderSymbolCounts::ActiveShaderSymbolCounts):
        (WebCore::GraphicsContext3D::ActiveShaderSymbolCounts::countForType):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::precisionsMatch): Drive-by-fix. Don't
        copy giant objects to read a single value.
        (WebCore::GraphicsContext3D::compileShader): Release filtered count
        when we change shader source code.
        (WebCore::GraphicsContext3D::getActiveAttribImpl): Renamed from getActiveAttrib.
        (WebCore::GraphicsContext3D::getActiveAttrib): Maps filtered indices to
        real OpenGL indices.
        (WebCore::GraphicsContext3D::getActiveUniformImpl): Renamed from getActiveUniform.
        (WebCore::GraphicsContext3D::getActiveUniform): Maps filtered indices to
        real OpenGL indices.
        (WebCore::GraphicsContext3D::originalSymbolName): Use C++11 loop.
        (WebCore::GraphicsContext3D::getAttribLocation): Added logging.
        (WebCore::GraphicsContext3D::getNonBuiltinActiveSymbolCount): Added.
        (WebCore::GraphicsContext3D::getShaderiv): Const correctness.
        (WebCore::GraphicsContext3D::getShaderInfoLog): Ditto.
        (WebCore::GraphicsContext3D::getShaderSource): Ditto.

2014-01-09  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] First line gets incorrectly adjusted in shape-inside due to rounding
        https://bugs.webkit.org/show_bug.cgi?id=126601

        Reviewed by Bem Jones-Bey.

        In order to get consistent results of the first fit position of the content in shapes,
        firstIncludedIntervalLogicalTop should take a FloatSize rather than LayoutSize for
        minLogicalIntervalSize, because LayoutSize clamps the float value to int, when subpixel-layout
        is disabled, thus firstIncludedIntervalLogicalTop could end up calculating with an unprecize
        value. This change modifies firstIncludedIntervalLogicalTop to take FloatSize consistently.

        Test: fast/shapes/shape-inside/shape-inside-polygon-rounded-first-fit.html

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::adjustLogicalLineTop):
        (WebCore::ShapeInsideInfo::computeFirstFitPositionForFloat):

2014-01-09  Andy Estes  <aestes@apple.com>

        [iOS] Upstream WAK
        https://bugs.webkit.org/show_bug.cgi?id=126724

        Reviewed by David Kilzer.

        * Configurations/WebCore.xcconfig: Excluded new iOS-specific Private
        headers on the Mac build.
        * WebCore.xcodeproj/project.pbxproj: Added new files to the project.
        * platform/ios/wak/WAKAppKitStubs.h: Added.
        * platform/ios/wak/WAKAppKitStubs.m: Added.
        * platform/ios/wak/WAKClipView.h: Added.
        * platform/ios/wak/WAKClipView.m: Added.
        * platform/ios/wak/WAKResponder.h: Added.
        * platform/ios/wak/WAKResponder.m: Added.
        * platform/ios/wak/WAKScrollView.h: Added.
        * platform/ios/wak/WAKScrollView.mm: Added.
        * platform/ios/wak/WAKView.h: Added.
        * platform/ios/wak/WAKView.mm: Added.
        * platform/ios/wak/WAKViewPrivate.h: Added.
        * platform/ios/wak/WAKWindow.h: Added.
        * platform/ios/wak/WAKWindow.mm: Added.
        * platform/ios/wak/WKContentObservation.cpp: Added.
        * platform/ios/wak/WKContentObservation.h: Added.
        * platform/ios/wak/WKGraphics.h: Added.
        * platform/ios/wak/WKGraphics.mm: Added.
        * platform/ios/wak/WKTypes.h: Added.
        * platform/ios/wak/WKUtilities.c: Added.
        * platform/ios/wak/WKUtilities.h: Added.
        * platform/ios/wak/WKView.h: Added.
        * platform/ios/wak/WKView.mm: Added.
        * platform/ios/wak/WKViewPrivate.h: Added.
        * platform/ios/wak/WebCoreThread.h: Added.
        * platform/ios/wak/WebCoreThread.mm: Added.
        * platform/ios/wak/WebCoreThreadInternal.h: Added.
        * platform/ios/wak/WebCoreThreadMessage.h: Added.
        * platform/ios/wak/WebCoreThreadRun.cpp: Added.
        * platform/ios/wak/WebCoreThreadRun.h: Added.
        * platform/ios/wak/WebCoreThreadSafe.h: Added.
        * platform/ios/wak/WebCoreThreadSystemInterface.cpp: Added.
        * platform/ios/wak/WebCoreThreadSystemInterface.h: Added.

2014-01-09  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/network/cf/ResourceRequest.h: Always declare ResourceRequest::updateFromDelegatePreservingOldHTTPBody()
        instead of only declaring it when building without CFNetwork.

2014-01-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        For some reason, the Windows build is unhappy that NeverDestroyed<FontCache> calls the private constructor
        FontCache::FontCache() despite being a friend class of FontCache. Use DEFINE_STATIC_LOCAL instead of
        NeverDestroyed<> for now. I'll look to investigate this issue offline.

        * platform/graphics/FontCache.cpp:
        (WebCore::fontCache):
        * platform/graphics/FontCache.h:

2014-01-09  Benjamin Poulain  <bpoulain@apple.com>

        Remove blackberry from WebCore/platform
        https://bugs.webkit.org/show_bug.cgi?id=126715

        Reviewed by Anders Carlsson.

        * platform/blackberry: Removed.
        * platform/graphics/blackberry: Removed.
        * platform/graphics/filters/blackberry: Removed.
        * platform/image-decoders/blackberry: Removed.
        * platform/mediastream/blackberry: Removed.
        * platform/network/blackberry: Removed.
        * platform/text/blackberry: Removed.

2014-01-09  Alexey Proskuryakov  <ap@apple.com>

        Fix a copy-paste mistake in an include guard.

        Rubber-stamped by Sam Weinig.

        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h:

2014-01-09  Anders Carlsson  <andersca@apple.com>

        History::StateObjectType should be a strong enum
        https://bugs.webkit.org/show_bug.cgi?id=126725

        Reviewed by Beth Dakin.

        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):
        * page/History.cpp:
        (WebCore::History::stateObjectAdded):
        * page/History.h:

2014-01-09  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Mountain Lion Release (32-bit) build following <http://trac.webkit.org/changeset/161589>
        (https://bugs.webkit.org/show_bug.cgi?id=126654)

        * platform/ios/WebEvent.h:
        * platform/ios/WebEvent.mm:

2014-01-09  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/platform changes
        https://bugs.webkit.org/show_bug.cgi?id=126654

        Rubber-stamped by David Kilzer.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/ContentFilter.h:
        * platform/DragData.h:
        * platform/FileChooser.cpp:
        (WebCore::FileChooser::chooseMediaFiles):
        * platform/FileChooser.h:
        * platform/FileSystem.cpp:
        (WebCore::setMetadataURL):
        * platform/FileSystem.h:
        * platform/KillRingNone.cpp:
        * platform/LocalizedStrings.cpp:
        (WebCore::fileButtonChooseMediaFileLabel):
        (WebCore::fileButtonChooseMultipleMediaFilesLabel):
        (WebCore::fileButtonNoMediaFileSelectedLabel):
        (WebCore::fileButtonNoMediaFilesSelectedLabel):
        * platform/LocalizedStrings.h:
        * platform/Logging.h:
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):
        (WebCore::initializeUnsupportedTextMIMETypes):
        * platform/MemoryPressureHandler.cpp:
        (WebCore::MemoryPressureHandler::MemoryPressureHandler):
        * platform/MemoryPressureHandler.h:
        * platform/PlatformKeyboardEvent.h:
        (WebCore::PlatformKeyboardEvent::event):
        * platform/PlatformMouseEvent.h:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * platform/PlatformScreen.h:
        * platform/RuntimeApplicationChecks.cpp:
        (WebCore::mainBundleIsEqualTo):
        * platform/RuntimeApplicationChecksIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/RuntimeApplicationChecksIOS.mm: Added.
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleTouchEvent):
        * platform/ScrollAnimator.h:
        * platform/ScrollTypes.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::actualScrollX):
        (WebCore::ScrollView::actualScrollY):
        * platform/ScrollableArea.cpp:
        (WebCore::ScrollableArea::handleTouchEvent):
        (WebCore::ScrollableArea::isPinnedInBothDirections):
        (WebCore::ScrollableArea::isPinnedHorizontallyInDirection):
        (WebCore::ScrollableArea::isPinnedVerticallyInDirection):
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isTouchScrollable):
        (WebCore::ScrollableArea::isOverflowScroll):
        (WebCore::ScrollableArea::didStartScroll):
        (WebCore::ScrollableArea::didEndScroll):
        (WebCore::ScrollableArea::didUpdateScroll):
        (WebCore::ScrollableArea::setIsUserScroll):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMinimumPosition):
        (WebCore::ScrollableArea::isHorizontalScrollerPinnedToMaximumPosition):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMinimumPosition):
        (WebCore::ScrollableArea::isVerticalScrollerPinnedToMaximumPosition):
        * platform/Scrollbar.cpp:
        * platform/Scrollbar.h:
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        (WebCore::SharedBuffer::createPurgeableBuffer):
        (WebCore::SharedBuffer::data):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::shouldUsePurgeableMemory):
        * platform/SuddenTermination.h:
        * platform/Supplementable.h:
        (WebCore::Supplementable::provideSupplement):
        (WebCore::Supplementable::removeSupplement):
        (WebCore::Supplementable::requireSupplement):
        * platform/SystemMemory.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/ThreadCheck.h:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::ThreadGlobalData):
        (WebCore::ThreadGlobalData::destroy):
        (WebCore::ThreadGlobalData::setWebCoreThreadData):
        (WebCore::threadGlobalData):
        * platform/ThreadGlobalData.h:
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::ThreadTimers):
        (WebCore::ThreadTimers::sharedTimerFiredInternal):
        * platform/Timer.cpp:
        (WebCore::TimerBase::start):
        (WebCore::TimerBase::stop):
        (WebCore::TimerBase::setNextFireTime):
        * platform/Timer.h:
        (WebCore::TimerBase::isActive):
        * platform/URL.cpp:
        (WebCore::enableURLSchemeCanonicalization):
        (WebCore::equal):
        (WebCore::URL::parse):
        * platform/URL.h:
        * platform/Widget.h:
        * platform/audio/ios/AudioDestinationIOS.cpp:
        * platform/audio/ios/AudioDestinationIOS.h:
        * platform/audio/ios/AudioFileReaderIOS.cpp: Copied from Source/WebCore/platform/audio/mac/AudioFileReaderMac.cpp.
        (WebCore::createAudioBufferList):
        (WebCore::destroyAudioBufferList):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::readProc):
        (WebCore::AudioFileReader::getSizeProc):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/ios/AudioFileReaderIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        (WebCore::AudioFileReader::data):
        (WebCore::AudioFileReader::dataSize):
        * platform/audio/ios/AudioSessionIOS.mm:
        (SOFT_LINK_POINTER):
        (-[WebAudioSessionHelper initWithCallback:WebCore::]):
        (-[WebAudioSessionHelper dealloc]):
        (-[WebAudioSessionHelper interruption:]):
        (WebCore::AudioSession::setCategory):
        * platform/audio/mac/AudioDestinationMac.cpp:
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/cf/URLCF.cpp:
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForCharCode):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        (WebCore::BitmapImage::cacheFrame):
        (WebCore::BitmapImage::cacheFrameInfo):
        (WebCore::BitmapImage::updateSize):
        (WebCore::BitmapImage::originalSize):
        (WebCore::BitmapImage::originalSizeRespectingOrientation):
        (WebCore::BitmapImage::dataChanged):
        (WebCore::BitmapImage::ensureFrameInfoIsCached):
        (WebCore::BitmapImage::frameAtIndex):
        (WebCore::BitmapImage::frameIsCompleteAtIndex):
        (WebCore::BitmapImage::frameDurationAtIndex):
        (WebCore::BitmapImage::frameHasAlphaAtIndex):
        (WebCore::BitmapImage::frameOrientationAtIndex):
        (WebCore::BitmapImage::startAnimation):
        (WebCore::BitmapImage::internalAdvanceAnimation):
        * platform/graphics/BitmapImage.h:
        (WebCore::FrameData::FrameData):
        * platform/graphics/Color.cpp:
        (WebCore::Color::isDark):
        * platform/graphics/Color.h:
        * platform/graphics/DisplayRefreshMonitor.h:
        * platform/graphics/FloatPoint.h:
        * platform/graphics/FloatRect.h:
        * platform/graphics/FloatSize.h:
        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        * platform/graphics/FontCache.cpp:
        (initFontCacheLockOnce):
        (FontLocker::FontLocker):
        (FontLocker::~FontLocker):
        (WebCore::fontCache):
        (WebCore::FontCache::getCachedFontPlatformData):
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::releaseFontData):
        (WebCore::FontCache::purgeInactiveFontDataIfNeeded):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/FontCache.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawGlyphBuffer):
        * platform/graphics/FontGlyphs.h:
        * platform/graphics/FontPlatformData.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/FontPlatformData.h:
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::drawRaisedEllipse):
        (WebCore::GraphicsContext::drawText):
        (WebCore::GraphicsContext::drawBidiText):
        (WebCore::GraphicsContext::clipRoundedRect):
        (WebCore::GraphicsContext::emojiDrawingEnabled):
        (WebCore::GraphicsContext::setEmojiDrawingEnabled):
        * platform/graphics/GraphicsContext.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::willBeDestroyed):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::contentsLayerForMedia):
        (WebCore::GraphicsLayer::pixelAlignmentOffset):
        (WebCore::GraphicsLayer::hasFlattenedPerspectiveTransform):
        * platform/graphics/Icon.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::isSubsampled):
        * platform/graphics/IntPoint.h:
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        (WebCore::MediaPlayer::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayer::showPlaybackTargetPicker):
        (WebCore::MediaPlayer::hasWirelessPlaybackTargets):
        (WebCore::MediaPlayer::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayer::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayer::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaPlayer::currentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayer::playbackTargetAvailabilityChanged):
        (WebCore::MediaPlayer::attributeChanged):
        (WebCore::MediaPlayer::readyForPlayback):
        (WebCore::MediaPlayer::volumeChanged):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerCurrentPlaybackTargetIsWirelessChanged):
        (WebCore::MediaPlayerClient::mediaPlayerPlaybackTargetAvailabilityChanged):
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::volume):
        (WebCore::MediaPlayerPrivateInterface::isCurrentPlaybackTargetWireless):
        (WebCore::MediaPlayerPrivateInterface::showPlaybackTargetPicker):
        (WebCore::MediaPlayerPrivateInterface::hasWirelessPlaybackTargets):
        (WebCore::MediaPlayerPrivateInterface::wirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateInterface::setWirelessVideoPlaybackDisabled):
        (WebCore::MediaPlayerPrivateInterface::setHasPlaybackTargetAvailabilityListeners):
        (WebCore::MediaPlayerPrivateInterface::attributeChanged):
        (WebCore::MediaPlayerPrivateInterface::readyForPlayback):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/StringTruncator.cpp:
        (WebCore::centerTruncateToBuffer):
        (WebCore::rightTruncateToBuffer):
        (WebCore::rightClipToCharacterBuffer):
        (WebCore::rightClipToWordBuffer):
        (WebCore::leftTruncateToBuffer):
        (WebCore::truncateString):
        (WebCore::StringTruncator::centerTruncate):
        (WebCore::StringTruncator::rightTruncate):
        (WebCore::StringTruncator::leftTruncate):
        (WebCore::StringTruncator::rightClipToCharacter):
        (WebCore::StringTruncator::rightClipToWord):
        * platform/graphics/StringTruncator.h:
        * platform/graphics/TextTrackRepresentation.cpp:
        * platform/graphics/WidthIterator.h:
        (WebCore::WidthIterator::supportsTypesettingFeatures):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        (WebCore::wkAVAssetResolvedURL):
        * platform/graphics/blackberry/FontBlackBerry.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::supportsAcceleratedFilterAnimations):
        (WebCore::GraphicsLayerCA::setContentsToImage):
        (WebCore::GraphicsLayerCA::contentsLayerForMedia):
        (WebCore::GraphicsLayerCA::computeVisibleRect):
        (WebCore::GraphicsLayerCA::updateGeometry):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::setupContentsLayer):
        (WebCore::GraphicsLayerCA::mediaLayerMustBeUpdatedOnMainThread):
        (WebCore::GraphicsLayerCA::computePixelAlignment):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::currentRunLoop):
        (WebCore::LayerFlushScheduler::schedule):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (-[WebAnimationDelegate animationDidStart:]):
        (PlatformCALayerMac::setContentsScale):
        (PlatformCALayer::isWebLayer):
        (PlatformCALayer::setBoundsOnMainThread):
        (PlatformCALayer::setPositionOnMainThread):
        (PlatformCALayer::setAnchorPointOnMainThread):
        (PlatformCALayer::setTileSize):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerPaintContents):
        (WebCore::TileController::removeAllTiles):
        (WebCore::TileController::removeAllSecondaryTiles):
        (WebCore::TileController::removeTilesInCohort):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::createTileLayer):
        * platform/graphics/cairo/FontCairoHarfbuzzNG.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::BitmapImage):
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImage::copyUnscaledFrameAtIndex):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColorWithDeviceWhite):
        (WebCore::createCGColorWithDeviceRGBA):
        (WebCore::Color::Color):
        * platform/graphics/cg/FloatPointCG.cpp:
        * platform/graphics/cg/FloatRectCG.cpp:
        * platform/graphics/cg/FloatSizeCG.cpp:
        * platform/graphics/cg/GradientCG.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::sRGBColorSpaceRef):
        (WebCore::setStrokeAndFillColor):
        (WebCore::GraphicsContext::platformInit):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::draw):
        (WebCore::jpegUTI):
        (WebCore::utiFromMIMEType):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::drawPatternCallback):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::ImageSource):
        (WebCore::imageSourceOptions):
        (WebCore::ImageSource::imageSourceOptions):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::originalSize):
        (WebCore::ImageSource::createFrameAtIndex):
        * platform/graphics/cg/ImageSourceCGMac.mm:
        * platform/graphics/cg/IntPointCG.cpp:
        * platform/graphics/cg/IntRectCG.cpp:
        * platform/graphics/cg/IntSizeCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/cg/PatternCG.cpp:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::platformDataInit):
        (WebCore::FontPlatformData::platformDataAssign):
        (WebCore::FontPlatformData::platformIsEqual):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::allowsLigatures):
        (WebCore::FontPlatformData::ctFont):
        * platform/graphics/ios/DisplayRefreshMonitorIOS.mm: Added.
        (WebCore::DisplayRefreshMonitor::~DisplayRefreshMonitor):
        (WebCore::DisplayRefreshMonitor::requestRefreshCallback):
        (WebCore::DisplayRefreshMonitor::displayLinkFired):
        * platform/graphics/ios/FontCacheIOS.mm: Added.
        * platform/graphics/ios/FontServicesIOS.h: Added.
        * platform/graphics/ios/FontServicesIOS.mm: Added.
        (WebCore::FontServicesIOS::FontServicesIOS):
        * platform/graphics/ios/GraphicsContext3DIOS.h: Added.
        * platform/graphics/ios/IconIOS.mm: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.cpp.
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.h: Copied from Source/WebCore/platform/graphics/cg/ImageBufferDataCG.h.
        (WebCore::InbandTextTrackPrivateAVFIOS::create):
        (WebCore::InbandTextTrackPrivateAVFIOS::internalID):
        * platform/graphics/ios/InbandTextTrackPrivateAVFIOS.mm: Copied from Source/WebCore/platform/graphics/mac/IntRectMac.mm.
        (WebCore::InbandTextTrackPrivateAVFIOS::InbandTextTrackPrivateAVFIOS):
        (WebCore::InbandTextTrackPrivateAVFIOS::~InbandTextTrackPrivateAVFIOS):
        (WebCore::InbandTextTrackPrivateAVFIOS::kind):
        * platform/graphics/ios/MediaPlayerPrivateIOS.h: Added.
        * platform/graphics/ios/MediaPlayerPrivateIOS.mm: Added.
        * platform/graphics/ios/SimpleFontDataIOS.mm: Added.
        (WebCore::fontFamilyShouldNotBeUsedForArabic):
        (WebCore::fontHasVerticalGlyphs):
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::platformCreateScaledFontData):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::determinePitch):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/ios/TextTrackRepresentationIOS.h: Copied from Source/WebCore/platform/graphics/TextTrackRepresentation.cpp.
        * platform/graphics/ios/TextTrackRepresentationIOS.mm: Added.
        * platform/graphics/mac/ColorMac.h:
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FloatPointMac.mm:
        * platform/graphics/mac/FloatRectMac.mm:
        * platform/graphics/mac/FloatSizeMac.mm:
        * platform/graphics/mac/FontCacheMac.mm:
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::drawComplexText):
        (WebCore::Font::fontDataForCombiningCharacterSequence):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showLetterpressedGlyphsWithAdvances):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        (WebCore::GraphicsContext3D::setRenderbufferStorageFromDrawable):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::endPaint):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::createDotPattern):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        * platform/graphics/mac/IconMac.mm:
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::invalidatePlatformData):
        * platform/graphics/mac/IntPointMac.mm:
        * platform/graphics/mac/IntRectMac.mm:
        * platform/graphics/mac/IntSizeMac.mm:
        * platform/graphics/mac/MediaPlayerProxy.h:
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/mac/WebGLLayer.h:
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        (-[WebGLLayer display]):
        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        (-[WebSimpleLayer display]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (+[WebTiledLayer shouldDrawOnMainThread]):
        (-[WebTiledLayer display]):
        (-[WebTiledLayer drawInContext:]):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::blitFramebuffer):
        (WebCore::Extensions3DOpenGL::bindVertexArrayOES):
        (WebCore::Extensions3DOpenGL::supportsExtension):
        (WebCore::Extensions3DOpenGL::drawBuffersEXT):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::Extensions3DOpenGLCommon):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::clearDepth):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::TransformationMatrix::multiply):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::Font::drawComplexText):
        * platform/ios/ContentFilterIOS.mm: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/ios/DeviceMotionClientIOS.h: Added.
        (WebCore::DeviceMotionClientIOS::create):
        * platform/ios/DeviceMotionClientIOS.mm: Added.
        * platform/ios/DeviceOrientationClientIOS.h: Added.
        (WebCore::DeviceOrientationClientIOS::create):
        * platform/ios/DeviceOrientationClientIOS.mm: Added.
        * platform/ios/KeyEventIOS.mm:
        * platform/ios/MIMETypeRegistryIOS.mm: Copied from Source/WebCore/platform/network/mac/CredentialStorageMac.mm.
        * platform/ios/MemoryPressureHandlerIOS.mm: Added.
        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::write):
        (WebCore::Pasteboard::resourceMIMEType):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::read):
        (WebCore::supportedImageTypes):
        (WebCore::Pasteboard::supportedPasteboardTypes):
        (WebCore::Pasteboard::hasData):
        (WebCore::Pasteboard::readString):
        * platform/ios/PlatformEventFactoryIOS.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/PlatformEventFactoryIOS.mm: Added.
        * platform/ios/PlatformPasteboardIOS.mm:
        (WebCore::PlatformPasteboard::write):
        * platform/ios/PlatformScreenIOS.mm: Added.
        * platform/ios/PlatformSpeechSynthesizerIOS.mm: Added.
        * platform/ios/SSLKeyGeneratorIOS.cpp: Added.
        * platform/ios/ScrollAnimatorIOS.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/ScrollAnimatorIOS.mm: Added.
        * platform/ios/ScrollViewIOS.mm: Added.
        * platform/ios/ScrollbarThemeIOS.h: Added.
        * platform/ios/ScrollbarThemeIOS.mm: Added.
        * platform/ios/SelectionRect.cpp: Added.
        * platform/ios/SelectionRect.h: Added.
        * platform/ios/SoundIOS.mm: Copied from Source/WebCore/platform/text/mac/CharsetData.h.
        * platform/ios/SystemMemoryIOS.cpp: Added.
        * platform/ios/ThemeIOS.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/ThemeIOS.mm: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/TileCache.h: Added.
        (WebCore::TileCache::isSpeculativeTileCreationEnabled):
        * platform/ios/TileCache.mm: Added.
        * platform/ios/TileGrid.h: Added.
        * platform/ios/TileGrid.mm: Added.
        * platform/ios/TileGridTile.h: Copied from Source/WebCore/platform/ContentFilter.h.
        * platform/ios/TileGridTile.mm: Added.
        * platform/ios/TileLayer.h: Copied from Source/WebCore/platform/mac/DisplaySleepDisabler.h.
        * platform/ios/TileLayer.mm: Added.
        * platform/ios/TileLayerPool.mm: Added.
        * platform/ios/WebCoreMotionManager.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/ios/WebCoreMotionManager.mm: Added.
        * platform/ios/WebCoreSystemInterfaceIOS.h: Added.
        * platform/ios/WebCoreSystemInterfaceIOS.mm: Added.
        * platform/ios/WebEvent.h: Added.
        * platform/ios/WebEvent.mm: Added.
        * platform/ios/WidgetIOS.mm: Added.
        * platform/mac/DisplaySleepDisabler.cpp:
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        (WebCore::DisplaySleepDisabler::~DisplaySleepDisabler):
        * platform/mac/DisplaySleepDisabler.h:
        * platform/mac/FileSystemMac.mm:
        * platform/mac/KillRingMac.mm:
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::install):
        (WebCore::MemoryPressureHandler::releaseMemory):
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::PlatformClockCM):
        * platform/mac/SoftLinking.h:
        * platform/mac/SystemVersionMac.mm:
        * platform/mac/WebCoreFullScreenPlaceholderView.h:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        * platform/mac/WebCoreFullScreenWarningView.h:
        * platform/mac/WebCoreFullScreenWarningView.mm:
        * platform/mac/WebCoreFullScreenWindow.h:
        * platform/mac/WebCoreFullScreenWindow.mm:
        * platform/mac/WebCoreNSCellExtras.h:
        * platform/mac/WebCoreNSCellExtras.m:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebFontCache.mm:
        (+[WebFontCache fontWithFamily:traits:size:]):
        * platform/network/BlobRegistry.cpp:
        * platform/network/BlobRegistryImpl.cpp:
        * platform/network/Credential.h:
        * platform/network/CredentialStorage.cpp:
        (WebCore::CredentialStorage::set):
        (WebCore::CredentialStorage::clearCredentials):
        * platform/network/CredentialStorage.h:
        * platform/network/NetworkStateNotifier.h:
        * platform/network/ResourceHandle.cpp:
        (WebCore::builtinResourceHandleConstructorMap):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::setDefaultAllowCookies):
        (WebCore::ResourceRequestBase::defaultAllowCookies):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::saveToPersistentStorage):
        * platform/network/cf/DNSCFNet.cpp:
        * platform/network/cf/ProxyServerCFNet.cpp:
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::setMainResourceRequest):
        (WebCore::ResourceRequest::isMainResourceRequest):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::updateFromDelegatePreservingOldHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::initializeHTTPConnectionSettingsOnStartup):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * platform/network/ios/NetworkStateNotifierIOS.cpp: Copied from Source/WebCore/platform/KillRingNone.cpp.
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        (WebCore::NetworkStateNotifier::setIsOnLine):
        * platform/network/ios/QuickLook.h: Added.
        * platform/network/ios/QuickLook.mm: Added.
        * platform/network/ios/ResourceHandleIOS.mm: Added.
        * platform/network/ios/WebCoreURLResponseIOS.h: Copied from Source/WebCore/platform/graphics/StringTruncator.h.
        * platform/network/ios/WebCoreURLResponseIOS.mm: Added.
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        * platform/network/mac/CredentialStorageMac.mm:
        (WebCore::CredentialStorage::saveToPersistentStorage):
        * platform/network/mac/ResourceErrorMac.mm:
        (dictionaryThatCanCode):
        (-[WebCustomNSURLError encodeWithCoder:]):
        (NSErrorFromCFError):
        (WebCore::ResourceError::nsError):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::synchronousWillSendRequestEnabled):
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::schedule):
        (WebCore::ResourceHandle::unschedule):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::updateNSURLRequest):
        (WebCore::ResourceRequest::applyWebArchiveHackForMail):
        (WebCore::ResourceRequest::useQuickLookResourceCachingQuirks):
        * platform/network/mac/UTIUtilities.mm:
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connectionShouldUseCredentialStorage:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveDataArray:]):
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveData:lengthReceived:]):
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]):
        * platform/sql/SQLiteDatabase.h:
        (WebCore::SQLiteDatabase::sqlite3Handle):
        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::truncateDatabaseFile):
        * platform/sql/SQLiteFileSystem.h:
        * platform/sql/SQLiteTransaction.cpp:
        (WebCore::SQLiteTransaction::begin):
        (WebCore::SQLiteTransaction::commit):
        (WebCore::SQLiteTransaction::rollback):
        (WebCore::SQLiteTransaction::stop):
        * platform/sql/ios/SQLiteDatabaseTracker.cpp: Added.
        * platform/sql/ios/SQLiteDatabaseTracker.h: Copied from Source/WebCore/platform/MemoryPressureHandler.cpp.
        * platform/sql/ios/SQLiteDatabaseTrackerClient.h: Copied from Source/WebCore/platform/KillRingNone.cpp.
        * platform/text/PlatformLocale.cpp:
        * platform/text/PlatformLocale.h:
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::cursorMovementIterator):
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::registerEncodingNames):
        (WebCore::TextCodecICU::registerCodecs):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::extendTextCodecMaps):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::canHyphenate):
        * platform/text/ios/LocalizedDateCache.h: Copied from Source/WebCore/platform/MemoryPressureHandler.h.
        * platform/text/ios/LocalizedDateCache.mm: Added.
        * platform/text/mac/CharsetData.h:
        * platform/text/mac/LocaleMac.h:
        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::formatDateTime):
        (WebCore::LocaleMac::maximumWidthForDateType):
        * platform/text/mac/TextBoundaries.mm:
        (WebCore::isSkipCharacter):
        (WebCore::isWhitespaceCharacter):
        (WebCore::isWordDelimitingCharacter):
        (WebCore::isSymbolCharacter):
        (WebCore::isAmbiguousBoundaryCharacter):
        (WebCore::tokenizerForString):
        (WebCore::findSimpleWordBoundary):
        (WebCore::findComplexWordBoundary):
        (WebCore::findWordBoundary):
        (WebCore::findNextWordFromIndex):
        * platform/text/mac/TextCodecMac.cpp:
        * platform/text/mac/TextCodecMac.h:

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Consolidate developerExtrasEnabled to just InspectorEnvironment
        https://bugs.webkit.org/show_bug.cgi?id=126717

        Reviewed by Timothy Hatcher.

        They all route to InspectorEnvironment::developerExtrasEnabled, so make
        InspectorEnvironment available to all agents through InstrumentingAgents
        and use that where needed.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::enabled):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didLoadResourceFromMemoryCacheImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        (WebCore::InspectorInstrumentation::frameDocumentUpdatedImpl):
        (WebCore::InspectorInstrumentation::didOpenDatabaseImpl):
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        * inspector/InstrumentingAgents.cpp:
        (WebCore::InstrumentingAgents::InstrumentingAgents):
        * inspector/InstrumentingAgents.h:
        (WebCore::InstrumentingAgents::create):
        (WebCore::InstrumentingAgents::inspectorEnvironment):
        * inspector/PageConsoleAgent.cpp:
        * inspector/PageConsoleAgent.h:
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerConsoleAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Unnecessary InspectorAgent parameters
        https://bugs.webkit.org/show_bug.cgi?id=126712

        Reviewed by Timothy Hatcher.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:

2014-01-09  Antti Koivisto  <antti@apple.com>

        Remove an accidentally left-behind static_cast.

        * dom/ElementDescendantIterator.h:
        (WebCore::ElementDescendantIteratorAdapter<ElementType>::beginAt):

2014-01-09  Antti Koivisto  <antti@apple.com>

        Replace ElementIteratorAdapter find() with beginAt()
        https://bugs.webkit.org/show_bug.cgi?id=126714

        Reviewed by Andreas Kling.

        ElementIteratorAdapter find() would return iterator for the argument element if it was
        of correct type and in the right subtree. This is not really what you would expect from find()
        so replace it with a simple beginAt() iterator construction function.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::getAllElementsById):
        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIteratorAdapter<ElementType>::beginAt):
        (WebCore::ElementChildConstIteratorAdapter<ElementType>::beginAt):
        * dom/ElementDescendantIterator.h:
        (WebCore::ElementDescendantIteratorAdapter<ElementType>::beginAt):
        (WebCore::ElementDescendantConstIteratorAdapter<ElementType>::beginAt):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):

2014-01-09  Brian Burg  <bburg@apple.com>

        REGRESSION (r160152): Selection drag snapshot doesn't appear or has the wrong content on Retina
        https://bugs.webkit.org/show_bug.cgi?id=125375

        Reviewed by Darin Adler.

        Move scaling of drag images by the device scale factor out of DragClient
        and into WebCore. This removes several redundant copies and scaling operations.

        Fix scaling bugs that were cancelled out by over-allocating the backing store.

        * page/DragController.cpp:
        (WebCore::DragController::startDrag): Scale the drag image for a link
        according to the device scale factor before giving it to the OS.

        (WebCore::DragController::doImageDrag): Scale the drag image for an image
        according to the device scale factor before giving it to the OS.

        * page/FrameSnapshotting.cpp:
        (WebCore::snapshotFrameRect): Don't pre-scale or clip the snapshot. The
        ImageBuffer does this already.

        * platform/DragImage.cpp:
        (WebCore::createDragImageFromSnapshot): Don't scale the backing store
        when copying an ImageBuffer into an Image.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::copyImage): Draw the image in user-space coordinates,
        not in backing-store coordinates. Remove unnecessary assertions. Crop the
        buffer before drawing the image into it.

2014-01-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Narrow underlines are too tall
        https://bugs.webkit.org/show_bug.cgi?id=126708

        Reviewed by Simon Fraser.

        I made a typo in r158392 and used was settings the line rect's
        height equal to its width. No one noticed because of the subsequent
        if statement.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-tall-underlines.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText):

2014-01-09  Antti Koivisto  <antti@apple.com>

        DocumentOrderedMap should use iterator
        https://bugs.webkit.org/show_bug.cgi?id=126696

        Reviewed by Andreas Kling.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesId):
        (WebCore::keyMatchesName):
        (WebCore::keyMatchesMapName):
        (WebCore::keyMatchesLowercasedMapName):
        (WebCore::keyMatchesLowercasedUsemap):
        (WebCore::keyMatchesLabelForAttribute):
        (WebCore::keyMatchesWindowNamedItem):
        (WebCore::keyMatchesDocumentNamedItem):
        
            Switch to Element references.

        (WebCore::DocumentOrderedMap::add):
        (WebCore::DocumentOrderedMap::remove):
        (WebCore::DocumentOrderedMap::get):
        (WebCore::DocumentOrderedMap::getAllElementsById):
        
             Use element iterator instead of ElementTraversal.

        * dom/DocumentOrderedMap.h:

2014-01-09  Beth Dakin  <bdakin@apple.com>

        Margin tiles are not repainted when background color changes
        https://bugs.webkit.org/show_bug.cgi?id=126541
        -and corresponding-
        <rdar://problem/15578131>

        Reviewed by Simon Fraser.

        This patch adds an optional parameter to GraphicsLayer::setNeedsDisplayInRect, 
        RenderLayerBacking::setContentsNeedDisplay(), and 
        RenderLayer::setBackingNeedsRepaint() that is used to determine whether or not to 
        clip the invalidation rect to the size of the layer. Then whenever the margin 
        needs to be repainted, we can call setNeedsDisplayInRect() with a rect that 
        includes the margin, and also indicate that it should not be clipped.

        GraphicsLayer now takes an optional parameter which is an enum called 
        ShouldClipToLayer.
        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::setNeedsDisplayInRect):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplayInRect):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setNeedsDisplayInRect):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::setNeedsDisplayInRect):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:

        Make TileController::bounds() a virtual function, and declare it on TiledBacking 
        so that we can call it from RenderLayerBacking.
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:

        RenderLayer also now takes an optional parameter which is an enum called 
        ShouldClipToLayer.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayer.h:

        If the margin needs to be repainted, call GraphicsLayer::setNeedsDisplayInRect 
        with a big enough rect and a ShouldClipToLayer value of DoNotClipToLayer.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::setContentsNeedDisplay):
        * rendering/RenderLayerBacking.h:

        Whenever all of the root contents need to be repainted the margin will also need 
        to be repainted, so call setBackingNeedsRepaint() with the new parameter 
        indicating the the invalidation should NOT be clipped to the layer size.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintRootContents):

2014-01-09  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Factor the ReferenceBox type out of BasicShapes
        https://bugs.webkit.org/show_bug.cgi?id=126648

        Reviewed by Dirk Schulze.

        Moving ReferenceBox out of BasicShapes and into RenderStyleConstants
        as the LayoutBox enum. Most of the changes are removing the BasicShape
        namespace.

        Refactoring, no new tests.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBox):
        (WebCore::boxForValue):
        (WebCore::valueForBasicShape):
        (WebCore::basicShapeForValue):
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::CSSBasicShapeRectangle::cssText):
        (WebCore::CSSBasicShapeRectangle::equals):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::CSSDeprecatedBasicShapeCircle::cssText):
        (WebCore::CSSDeprecatedBasicShapeCircle::equals):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::CSSDeprecatedBasicShapeEllipse::cssText):
        (WebCore::CSSDeprecatedBasicShapeEllipse::equals):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::CSSBasicShapeInsetRectangle::cssText):
        (WebCore::CSSBasicShapeInsetRectangle::equals):
        (WebCore::CSSBasicShapeInset::cssText):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::layoutBox):
        (WebCore::CSSBasicShape::setLayoutBox):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):
        (WebCore::ApplyPropertyShape::applyValue):
        * rendering/ClipPathOperation.h:
        (WebCore::ShapeClipPathOperation::setReferenceBox):
        (WebCore::ShapeClipPathOperation::referenceBox):
        (WebCore::ShapeClipPathOperation::ShapeClipPathOperation):
        (WebCore::BoxClipPathOperation::create):
        (WebCore::BoxClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::BoxClipPathOperation):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createLayoutBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize):
        (WebCore::ShapeInfo::logicalTopOffset):
        (WebCore::ShapeInfo::logicalLeftOffset):
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):
        (WebCore::BasicShape::referenceBoxSize):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::layoutBox):
        (WebCore::BasicShape::setLayoutBox):
        (WebCore::BasicShape::BasicShape):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createLayoutBoxValue):
        (WebCore::ShapeValue::layoutBox):
        (WebCore::ShapeValue::ShapeValue):

2014-01-09  Tim Horton  <timothy_horton@apple.com>

        PDFDocumentImage can be very slow to do the initial paint
        https://bugs.webkit.org/show_bug.cgi?id=126633
        <rdar://problem/15770980>

        Reviewed by Simon Fraser.

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::PDFDocumentImage):
        (WebCore::PDFDocumentImage::size):
        (WebCore::transformContextForPainting):
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        (WebCore::applyRotationForPainting):
        (WebCore::PDFDocumentImage::drawPDFPage):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        Store rotation from the PDF in degrees, since it can
        only be 0, 90, 180, or 270, and don't do any trig to
        perform the rotation, to avoid introducing minor rounding
        issues in the size.

        Once we're going to paint, if the difference between the
        computed scale for each axis is due only to integer rounding
        of the image size, use the same scale for both axes, to avoid
        a CG slow-path which occurs whenever the scale is nonuniform.

2014-01-09  Antti Koivisto  <antti@apple.com>

        Disconnect child frames iteratively
        https://bugs.webkit.org/show_bug.cgi?id=126700

        Reviewed by Andreas Kling.

        Use descendant iterator instead of recursion for traversal.

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::disconnectDescendantFrames):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::assertConnectedSubrameCountIsConsistent):
        (WebCore::collectFrameOwners):
        (WebCore::disconnectSubframes):
        
            Get rid of the strange ChildFrameDisconnector class in favor of a function.

        * dom/ContainerNodeAlgorithms.h:
        (WebCore::disconnectSubframesIfNeeded):

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r161563.

        Remove reference to removed file.

        * bindings/js/JSBindingsAllInOne.cpp:

2014-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move InjectedScript classes into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=126598

        Part 6: Put it all together. Make WebCore use the JavaScriptCore InjectedScript files.

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Remove old InjectedScript files.

        * ForwardingHeaders/inspector/InjectedScript.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptBase.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptHost.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptManager.h: Added.
        * ForwardingHeaders/inspector/InjectedScriptModule.h: Added.
        * ForwardingHeaders/inspector/InspectorEnvironment.h: Added.
        Expose headers to WebCore.

        * inspector/InspectorController.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::developerExtrasEnabled):
        (WebCore::InspectorController::canAccessInspectedScriptState):
        (WebCore::InspectorController::functionCallHandler):
        (WebCore::InspectorController::evaluateHandler):
        (WebCore::InspectorController::willCallInjectedScriptFunction):
        (WebCore::InspectorController::didCallInjectedScriptFunction):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::functionCallHandler):
        (WebCore::WorkerInspectorController::evaluateHandler):
        (WebCore::WorkerInspectorController::willCallInjectedScriptFunction):
        (WebCore::WorkerInspectorController::didCallInjectedScriptFunction):
        Make both InspectorControllers in WebCore be InspectorEnvironments.

        * bindings/js/JSMainThreadExecState.h:
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::evaluateHandlerFromAnyThread):
        Make JSC::evaluate wrapper like the existing JSC::call wrapper.
        These will be the ScriptFunctionCall implementations when debugging
        a WebCore::Page or worker, instead of the pure JSC versions.

        * inspector/PageInjectedScriptHost.h: Copied from Source/WebCore/inspector/CommandLineAPIModule.h.
        * inspector/PageInjectedScriptHost.cpp: Copied from Source/WebCore/inspector/PageInjectedScriptManager.cpp.
        (WebCore::PageInjectedScriptHost::type):
        (WebCore::PageInjectedScriptHost::isHTMLAllCollection):
        WebCore InjectedScriptHost implementation for DOM type handling.

        * inspector/PageInjectedScriptManager.h:
        * inspector/PageInjectedScriptManager.cpp:
        (WebCore::PageInjectedScriptManager::PageInjectedScriptManager):
        (WebCore::PageInjectedScriptManager::discardInjectedScriptsFor):
        WebCore InjectedScriptManager implementation for CommandLineAPI and
        specialized DOMWindow injected script management.

        * bindings/js/JSBindingsAllInOne.cpp:
        * inspector/CommandLineAPIHost.cpp:
        * inspector/CommandLineAPIHost.h:
        * inspector/CommandLineAPIModule.cpp:
        (WebCore::CommandLineAPIModule::host):
        * inspector/CommandLineAPIModule.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::InjectedScriptCanvasModule):
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        (WebCore::InspectorCanvasAgent::create):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::injectedScriptManager):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::create):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::injectedScriptManager):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        (WebCore::PageRuntimeAgent::create):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        (WebCore::WorkerConsoleAgent::create):
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        * inspector/WorkerRuntimeAgent.h:
        (WebCore::WorkerRuntimeAgent::create):
        Switch to using the Inspector namespace and JSC InjectedScript files.

        * bindings/js/JSInjectedScriptManager.cpp: Removed.
        * inspector/InjectedScript.h: Removed.
        * inspector/InjectedScriptHost.cpp: Removed.
        * inspector/InjectedScriptHost.h: Removed.
        * inspector/InjectedScriptHost.idl: Removed.


        Part 4: Move all inspector scripts into JavaScriptCore and update generators.

        With the updated location switch to using the appropriate INSPECTOR_SCRIPTS_DIR
        variable which defines where the scripts are.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:


        Part 1: Extract InspectorInstrumentationCookie class from InspectorInstrumentation.

        Currently InjectedScriptBase uses InspectorInstrumentation directly
        to track calling into JavaScript for timeline purposes. We will remove
        the direct call from InjectedScriptBase and extracting the Cookie class
        will make that easier.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorInstrumentationCookie.cpp: Added.
        (WebCore::InspectorInstrumentationCookie::InspectorInstrumentationCookie):
        (WebCore::InspectorInstrumentationCookie::operator=):
        (WebCore::InspectorInstrumentationCookie::~InspectorInstrumentationCookie):
        * inspector/InspectorInstrumentationCookie.h: Added.
        (WebCore::InspectorInstrumentationCookie::isValid):
        (WebCore::InspectorInstrumentationCookie::instrumentingAgents):
        (WebCore::InspectorInstrumentationCookie::hasMatchingTimelineAgentId):

2014-01-09  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Cannot select multiple non-adjacent items in a multiple select control with the keyboard only
        https://bugs.webkit.org/show_bug.cgi?id=15816

        Reviewed by Chris Fleizach.

        Test: fast/forms/listbox-non-contiguous-keyboard-selection.html

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::HTMLSelectElement):
        New member m_allowsNonContiguousSelection defaults to false
        (WebCore::HTMLSelectElement::listBoxDefaultEventHandler):
        Tracking CTRL modifier to start multiple non contiguous selection
        * html/HTMLSelectElement.h: New member m_allowsNonContiguousSelection
        (WebCore::HTMLSelectElement::allowsNonContiguousSelection): New getter
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::addFocusRingRects):
        Following implementation made for spatial navigation

2014-01-09  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove unused overriding protocols.
        https://bugs.webkit.org/show_bug.cgi?id=126630

        Reviewed by Timothy Hatcher.

        No new tests, No change in behavior.

        Remove unused overriding protocols as these are not used anymore in Frontned.
        -Page.setGeolocationOverride
        -Page.clearGeolocationOverride
        -Page.canOverrideGeolocation
        -Page.setDeviceOrientationOverride
        -Page.clearDeviceOrientationOverride
        -Page.canOverrideGeolocation
        -Network.setUserAgentOverride

        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        (WebCore::GeolocationController::create):
        (WebCore::GeolocationController::positionChanged):
        (WebCore::provideGeolocationTo):
        * Modules/geolocation/GeolocationController.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::create):
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        (WebCore::provideDeviceOrientationTo):
        * dom/DeviceOrientationController.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::disable):
        * inspector/InspectorResourceAgent.h:
        * inspector/protocol/Network.json:
        * inspector/protocol/Page.json:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::userAgent):

2014-01-09  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] Move regions auto-size code into RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=122959

        Reviewed by Mihnea Ovidenie.

        Move the auto-height logic from RenderRegion to RenderNamedFlowFragment because it's
        used only by the CSS Regions implementation.

        Bug 126642 covers the auto-height logic move from RenderFlowThread to RenderNamedFlowThread.

        Tests: No new tests, just refactorings.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::styleDidChange):
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::incrementAutoLogicalHeightCount):
        (WebCore::RenderNamedFlowFragment::decrementAutoLogicalHeightCount):
        (WebCore::RenderNamedFlowFragment::updateRegionHasAutoLogicalHeightFlag):
        (WebCore::RenderNamedFlowFragment::updateLogicalHeight):
        (WebCore::RenderNamedFlowFragment::pageLogicalHeight):
        (WebCore::RenderNamedFlowFragment::layoutBlock):
        (WebCore::RenderNamedFlowFragment::attachRegion):
        (WebCore::RenderNamedFlowFragment::detachRegion):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::pageLogicalHeight):
        (WebCore::RenderRegion::logicalHeightOfAllFlowThreadContent):
        (WebCore::RenderRegion::isLastRegion):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::attachRegion):
        (WebCore::RenderRegion::detachRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderRegionSet.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2014-01-09  Antti Koivisto  <antti@apple.com>

        Switch HTMLTableRowsCollection from Traversal<> to iterators
        https://bugs.webkit.org/show_bug.cgi?id=126684

        Reviewed by Andreas Kling.

        This is the last remaining client of Traversal<> outside the iterator implementation.

        * dom/ElementChildIterator.h:
        (WebCore::ElementChildIteratorAdapter<ElementType>::find):
        (WebCore::ElementChildConstIteratorAdapter<ElementType>::find):
        
            Add find with the same semantics as ElementDescendantIterator::find.

        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::rowAfter):
        (WebCore::HTMLTableRowsCollection::lastRow):

2014-01-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r161176): http/tests/misc/authentication-redirect-3/authentication-sent-to-redirect-same-origin-with-location-credentials.html is failing on GTK
        https://bugs.webkit.org/show_bug.cgi?id=126518

        Reviewed by Martin Robinson.

        Clear the credentials before calling willSendRequest on the client
        to avoid sending the credentials to the API layer, but apply them
        again to the request right before creating the new SoupRequest.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::continueAfterWillSendRequest):
        (WebCore::doRedirect):

2014-01-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161532.
        http://trac.webkit.org/changeset/161532
        https://bugs.webkit.org/show_bug.cgi?id=126677

        Caused lots of assertion failures (Requested by ap on
        #webkit).

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::networkError):
        (WebCore::XMLHttpRequest::abortError):
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::didTimeout):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadEnd):
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent):
        (WebCore::XMLHttpRequestProgressEventThrottle::fired):
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchEventAndLoadEnd):
        * xml/XMLHttpRequestUpload.h:

2014-01-08  Brian Burg  <bburg@apple.com>

        Clean up confusing names and calculations in image-dragging functions
        https://bugs.webkit.org/show_bug.cgi?id=126661

        Reviewed by Timothy Hatcher.

        No new tests.

        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag): rename variables and
        simplify the calculation of the image's scaled origin.

        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize): rename variables.

2014-01-08  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove InspectorClient::captureScreenshot()
        https://bugs.webkit.org/show_bug.cgi?id=126616

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        Remove leftover mothod as Page.captureScreenshot API was removed in r160202.

        * inspector/InspectorClient.h:

2014-01-08  Youenn Fablet  <youennf@gmail.com>

        Correctly set XHR loadend attributes (loaded and total).
        https://bugs.webkit.org/show_bug.cgi?id=120828

        Reviewed by Alexey Proskuryakov.
        
        Added correct initialization of lengthComputable, loaded and total attributes 
        to XHR ProgressEvent events (load, loadstart, loadend, abort, error and timeout).

        XMLHttpRequestProgressEventThrottle and XMLHttpRequestUpload now keep persistent knowledge 
        of m_loaded and m_total values with this patch.
        
        Code refactoring to handle event dispatching in case of error in a single manner.
        XMLHttpRequestProgressEventThrottle::dispatchProgressEvent is renamed as dispatchThrottledProgressEvent
        XMLHttpRequestProgressEventThrottle::dispatchEventAndLoadend is replaced by dispatchProgressEvent(const AtomicString&)

        Tests: http/tests/xmlhttprequest/loadstart-event-init.html
               http/tests/xmlhttprequest/onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/onload-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onabort-progressevent-attributes.html
               http/tests/xmlhttprequest/upload-onload-progressevent-attributes.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): changed readystatechange event from ProgressEvent to Event (not cancellable, not bubblable) to better match the spec 
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::abort): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::networkError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::abortError): code refactoring to handle error event dispatching in a single way
        (WebCore::XMLHttpRequest::didSendData):
        (WebCore::XMLHttpRequest::didReceiveData):
        (WebCore::XMLHttpRequest::dispatchErrorEvents): dispatch progress events in case of error
        (WebCore::XMLHttpRequest::didTimeout): code refactoring to handle error event dispatching in a single way
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp: before the patch, the fact that a progress event is being throttled is stored indirectly (m_loaded or m_total not equal to zero). With the patch, this information is stored in m_hasThrottledProgressEvent. The m_loaded and m_total values are no longer set back to zero after a progress event is dispatched. This allows using these values to correctly initialize other ProgressEvent events (in particular loadend, abort, timeout...) 
        (WebCore::XMLHttpRequestProgressEventThrottle::XMLHttpRequestProgressEventThrottle):
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchThrottledProgressEvent): always update the new m_loaded and m_total values. If progress event is not sent as part of the function call, store the fact that a progress event is being throttled through m_hasThrottledProgressEvent. 
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): used to send any ProgressEvent event that is not be throttled
        (WebCore::XMLHttpRequestProgressEventThrottle::flushProgressEvent): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::fired): after the call, no progress event is throttled anymore
        (WebCore::XMLHttpRequestProgressEventThrottle::hasEventToDispatch):
        (WebCore::XMLHttpRequestProgressEventThrottle::suspend):
        * xml/XMLHttpRequestProgressEventThrottle.h: introduced m_hasThrottledProgressEvent which stores whether a progress event is being throttled and m_computableLength which is used to initialize ProgressEvent computableLength
        * xml/XMLHttpRequestUpload.cpp:
        (WebCore::XMLHttpRequestUpload::XMLHttpRequestUpload):
        (WebCore::XMLHttpRequestUpload::dispatchProgressEvent):
        * xml/XMLHttpRequestUpload.h: introduced m_loaded, m_total and m_lengthComputable, similarly to XMLHttpRequestProgressEventThrottle

2014-01-08  Tim Horton  <timothy_horton@apple.com>

        TileController can fail to receive exposedRect from the drawing area if set at the wrong time
        https://bugs.webkit.org/show_bug.cgi?id=126536

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export some things.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setExposedRect):
        Store the exposed rect on FrameView. When it changes, if the main frame
        has a TiledBacking, inform it of the change.

        * page/FrameView.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Make use of the fact that we can test if a rect is infinite
        instead of having a separate boolean property for that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):
        (WebCore::computeTileCoverage):
        Push the FrameView's cached exposed rect down into the TiledBacking when it is created.
        We only support clipping for the main frame TileController for now.

2014-01-07  Myles C. Maxfield  <mmaxfield@apple.com>

        a fractional value of the css letter-spacing property is not rendered as expected
        https://bugs.webkit.org/show_bug.cgi?id=20606

        Reviewed by Simon Fraser.

        This turns on fractional letter-spacing and word-spacing CSS values.
        It is taken mostly from Blink r153727 and iOS. Updating the relevant
        types is all that is necessary

        Existing tests have been updated.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        (WebCore::Font::width):
        * platform/graphics/Font.h:
        (WebCore::Font::wordSpacing):
        (WebCore::Font::letterSpacing):
        (WebCore::Font::setWordSpacing):
        (WebCore::Font::setLetterSpacing):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::wordSpacing):
        (WebCore::RenderStyle::letterSpacing):
        (WebCore::RenderStyle::setWordSpacing):
        (WebCore::RenderStyle::setLetterSpacing):
        * rendering/style/RenderStyle.h:

2014-01-08  Anders Carlsson  <andersca@apple.com>

        Add WTF::StringView and use it for grammar checking
        https://bugs.webkit.org/show_bug.cgi?id=126644

        Reviewed by Antti Koivisto.

        Use a StringView in TextCheckerClient::checkTextOfParagraph to avoid upconverting strings unnecessarily.

        * editing/TextCheckingHelper.cpp:
        (WebCore::checkTextOfParagraph):
        Pass a StringView to TextCheckerClient::checkTextOfParagraph.
        
        * loader/EmptyClients.h:
        Update for TextCheckerClient changes.

        * platform/text/TextCheckerClient.h:
        Change TextCheckerClient::checkTextOfParagraph to take a StringView.
        
2014-01-08  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed Windows build fix attempt after r161481.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2014-01-08  Andreas Kling  <akling@apple.com>

        Deploy RenderPtr in RenderMathMLOperator::updateFromElement().
        <https://webkit.org/b/126628>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):

            Use RenderPtr/createRenderer for renderer creation.
            Removed an unnecessary null check (text is always created.)
            Also use RenderStyle::createAnonymousStyleWithDisplay()
            helper to shorten down the code a bit.

2014-01-08  Alberto Garcia  <berto@igalia.com>

        Fix some compilation warnings
        https://bugs.webkit.org/show_bug.cgi?id=126635

        Reviewed by Csaba Osztrogonác.

        Remove code that is no longer being used.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * platform/gtk/PopupMenuGtk.cpp:
        * platform/gtk/RedirectedXCompositeWindow.h:

2014-01-08  Zan Dobersek  <zdobersek@igalia.com>

        [Automake] Scripts for generated build targets do not necessarily produce their output
        https://bugs.webkit.org/show_bug.cgi?id=126378

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Touch the build targets that are generated through helper scripts that don't
        assure the output is generated every time the script is invoked, most commonly due to unchanged
        * bindings/gobject/GNUmakefile.am: Simply move the gdom-gen-symbols file into the output file
        instead of copying it if the contents differ and removing it. This again ensures that the output
        file is always newer than its dependencies, even if the input hasn't changed.

2014-01-08  Frédéric Wang  <fred.wang@free.fr>

        Remove invalid comments from mathtags.ing
        https://bugs.webkit.org/show_bug.cgi?id=126629

        Reviewed by Chris Fleizach.

        * mathml/mathtags.in:

2014-01-08  Andreas Kling  <akling@apple.com>

        RenderMathMLRow::createAnonymousWithParentRenderer() should return RenderPtr.
        <https://webkit.org/b/126631>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLRow.h:
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::createAnonymousWithParentRenderer):

            Tweak to return RenderPtr<RenderMathMLRow> and removed comment(!)
            about how this should return a smart pointer. Also take the
            parent renderer as a RenderMathMLRoot& instead of a RenderObject*
            since that's all we ever pass.

        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::addChild):

            Updated for new createAnonymousWithParentRenderer() signature.

2014-01-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: Make roleValue() return DescriptionListRole for <dl> elements
        https://bugs.webkit.org/show_bug.cgi?id=126579

        Reviewed by Chris Fleizach.

        Implement AccessibilityList::roleValue() so it will return
        ListRole or DescriptionListRole depending on the type of list.

        No new tests needed, as no new functionality was added and ports
        should still be exposing the right role for <dl> elements

        * accessibility/AccessibilityList.cpp:
        (WebCore::AccessibilityList::roleValue): Implemented.
        * accessibility/AccessibilityList.h:

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Removed extra checks for objects with ListRole role.

2014-01-08  Andreas Kling  <akling@apple.com>

        createMathMLOperator() should return RenderPtr.
        <https://webkit.org/b/126622>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLFenced.h:
        * rendering/mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::createMathMLOperator):

            Make this return a RenderPtr<RenderMathMLOperator>.

        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):

            Updated for the new createMathMLOperator() signature.

2014-01-07  Antti Koivisto  <antti@apple.com>

        REGRESSION (r161195): Acid2 regression tests frequently fail
        https://bugs.webkit.org/show_bug.cgi?id=126432

        Reviewed by Anders Carlsson.
        
        We would occasionally dump the render tree before the actual last resource on the page was loaded.
        The problematic resource is an image loaded by an <object> tag nested as fallback of another <object>.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        
            Force style recalc when rendering fallback content. The current mechanism for triggering the fallback content load
            requires a style recalc.

2014-01-07  Andreas Kling  <akling@apple.com>

        createAnonymousMathMLBlock() should return RenderPtr.
        <https://webkit.org/b/126583>

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::createAnonymousMathMLBlock):

            Make this return a RenderPtr<RenderMathMLBlock> and removed the
            EDisplay argument since it was always using the default (FLEX.)

        * rendering/mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::addChild):

            Updated for the new createAnonymousMathMLBlock() signature.

2014-01-07  Eric Carlson  <eric.carlson@apple.com>

        Teach MediaSessionManager to manage interruptions
        https://bugs.webkit.org/show_bug.cgi?id=126530

        Reviewed by Sam Weinig.

        Tests: media/video-interruption-active-when-element-created.html
               media/video-interruption-with-resume-allowing-play.html
               media/video-interruption-with-resume-not-allowing-play.html

        * WebCore.exp.in: Export functions needed by Internals.

        Add MediaSession and MediaSessionManager.
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        Automatically pause/play for interruptions. Move media restriction management to a MediaSession.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Get rid of m_loadInitiatedByUserGesture and m_userStartedPlayback,
            they aren't needed.
        (WebCore::HTMLMediaElement::load): Ditto.
        (WebCore::HTMLMediaElement::loadInternal): Use the media session to manage restrictions.
        (WebCore::HTMLMediaElement::play): Remove redundant iOS code. Postpone playback if called 
            during an interruption.
        (WebCore::HTMLMediaElement::pause): Remember to not resume playback when it ends if called during
            an interruption.
        (WebCore::HTMLMediaElement::potentiallyPlaying): Rearrange code to make it easier to understand.
        (WebCore::HTMLMediaElement::couldPlayIfEnoughData): Ditto.
        (WebCore::HTMLMediaElement::pausedForUserInteraction): Return true if paused because of an interruption.
        (WebCore::HTMLMediaElement::removeBehaviorsRestrictionsAfterFirstUserGesture): Be explicit about
            which restrictions are removed.
        (WebCore::HTMLMediaElement::mediaType): MediaSessionManager::<Type> -> MediaSession::<Type>.
        (WebCore::HTMLMediaElement::beginInterruption): New.
        (WebCore::HTMLMediaElement::endInterruption): Ditto.
        * html/HTMLMediaElement.h:

        Pulled MediaSessionManagerToken out of MediaSessionManager.cpp, added functionality to manage interruptions.
        * platform/audio/MediaSession.cpp: Added.
        (WebCore::MediaSession::create):
        (WebCore::MediaSession::MediaSession):
        (WebCore::MediaSession::~MediaSession):
        (WebCore::MediaSession::beginInterruption): Inform client of interruption state change.
        (WebCore::MediaSession::endInterruption): Ditto.
        * platform/audio/MediaSession.h: Added.

        * platform/audio/MediaSessionManager.cpp:
        (WebCore::MediaSessionManager::MediaSessionManager): Initialize interruption counter.
        (WebCore::MediaSessionManager::has): MediaType is defined in MediaSession.
        (WebCore::MediaSessionManager::count): Ditto.
        (WebCore::MediaSessionManager::beginInterruption): Inform all clients of interruption start if
            not already in an interruption.
        (WebCore::MediaSessionManager::endInterruption): Inform all clients if interruption has ended.
        (WebCore::MediaSessionManager::addSession): Renamed from addToken. Set session interruption state.
        (WebCore::MediaSessionManager::removeSession): Renamed from removeToken.
        * platform/audio/MediaSessionManager.h:

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): MediaSessionManagerToken -> MediaSession.
        * platform/audio/mac/AudioDestinationMac.h:

        * platform/audio/mac/MediaSessionManagerMac.cpp:
        (MediaSessionManager::updateSessionState): Ditto.

        Make it possible for tests to begin and end interruptions.
        * testing/Internals.cpp:
        (WebCore::Internals::beginMediaSessionInterruption):
        (WebCore::Internals::endMediaSessionInterruption):
        * testing/Internals.h:
        * testing/Internals.idl:

2014-01-07  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove leftover 'device metrics' code
        https://bugs.webkit.org/show_bug.cgi?id=126607

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        Removes unused code related to 'device metrics'.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::device_heightMediaFeatureEval):
        (WebCore::device_widthMediaFeatureEval):
        * inspector/InspectorClient.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::didLayout):
        * inspector/InspectorPageAgent.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        * page/Screen.cpp:
        (WebCore::Screen::height):
        (WebCore::Screen::width):
        * rendering/TextAutosizer.cpp:
        (WebCore::TextAutosizer::processSubtree):

2014-01-02  Andy Estes  <aestes@apple.com>

        [iOS] Upstream remainder of minimal-ui viewport changes
        https://bugs.webkit.org/show_bug.cgi?id=126410

        Reviewed by Sam Weinig.

        * dom/ViewportArguments.h:

2014-01-07  Victor Costan  <costan@gmail.com>

        createElementNS handles element name 'xmlns' correctly.
        https://bugs.webkit.org/show_bug.cgi?id=126553

        Reviewed by Alexey Proskuryakov.

        Tests: fast/dom/createElementNS-namespace-errors.html
               fast/dom/setAttributeNS-namespace-errors.html

        * dom/Document.cpp:
        (WebCore::Document::hasValidNamespaceForElements): updated to match DOM3/DOM4 spec.
        (WebCore::Document::hasValidNamespaceForAttributes): updated to match DOM3/DOM4 spec.

2014-01-07  Jer Noble  <jer.noble@apple.com>

        PlatformLayer containing scrollbars does not disappear when setting overflow:hidden on page root, until resize.
        https://bugs.webkit.org/show_bug.cgi?id=116051

        Reviewed by Simon Fraser.

        Move the pre-existing call to addedOrRemovedScrollbar() outside of the else-statement
        in updateScrollbars() so that changes made in the if-statement cause the scrollbar
        layers to be updated. The scrollbarAddedOrRemoved local variable guarding access to
        addedOrRemovedScrollbar() is already being set (but never checked) inside the if-statement.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2014-01-06  Jer Noble  <jer.noble@apple.com>

        HTML5 video tag Does Not Load in Apache htaccess/htpasswd Protected Directory
        https://bugs.webkit.org/show_bug.cgi?id=40382

        Reviewed by Eric Carlson.

        Test: http/tests/media/video-auth.html

        Adopt a new AVFoundation API to handle authentication challenge generated while loading
        media through an AVAsset. The authentication request comes through as a
        NSURLAuthenticationChallenge, and is wrapped in a WebCore::AuthenticationChallenge
        by MediaPlayerPrivateAVFoundationObjC, and is sent up to the HTMLMediaElement to handle.
        The HTMLMediaElement creates a ResourceRequest, and passes the challenge up to the
        ResourceLoadNotifier.

        To allow the HTMLMediaElement to initiate handling an AuthenticationChallenge without
        actually creating a ResourceLoader, allow ResourceLoaderDelegate to accept a unique
        identifier and a DocumentLoader in lieu of a ResourceLoader.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLMediaElement.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didReceiveAuthenticationChallenge):
        (WebCore::ResourceLoadNotifier::didCancelAuthenticationChallenge):
        * loader/ResourceLoadNotifier.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::shouldWaitForResponseToAuthenticationChallenge):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerShouldWaitForResponseToAuthenticationChallenge):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::shouldWaitForResponseToAuthenticationChallenge):
        (-[WebCoreAVFLoaderDelegate resourceLoader:shouldWaitForResponseToAuthenticationChallenge:]):

2014-01-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161447.
        http://trac.webkit.org/changeset/161447
        https://bugs.webkit.org/show_bug.cgi?id=126592

        needs some more work (Requested by thorton on #webkit).

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        * platform/graphics/GraphicsLayerClient.h:
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::setExposedRect):
        (WebCore::TileController::setClipsToExposedRect):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        * rendering/RenderLayerBacking.h:

2014-01-07  Tim Horton  <timothy_horton@apple.com>

        TileController can fail to receive exposedRect from the drawing area if set at the wrong time
        https://bugs.webkit.org/show_bug.cgi?id=126536

        Reviewed by Anders Carlsson.

        Move exposedRect to FrameView so it can be pushed in from WebKit before we have
        a TiledBacking, and can be retrieved by the TiledBacking when it needs to.

        * WebCore.exp.in:
        Export some things.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setExposedRect):
        * page/FrameView.h:
        Store the exposed rect on FrameView. When it changes, if the main frame
        has a TiledBacking, inform it of the change.

        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::exposedRect):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        Plumbing so that TileController can retrieve the exposedRect from FrameView.

        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::platformCALayerExposedRect):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):
        (WebCore::TileController::exposedRectDidChange):
        (WebCore::TileController::computeTileCoverageRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::updateTileCoverageMap):
        Don't store the exposed rect or clipsToExposedRect on TileController.
        Instead, retrieve it from our client.
        Make use of the fact that we can test if a rect is infinite
        instead of having a separate boolean property for that.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        (WebCore::RenderLayerBacking::exposedRect):
        Hand the FrameView's exposedRect back to our GraphicsLayer.
        We only support clipping for the main frame TileController for now.

        * rendering/RenderLayerBacking.h:

2014-01-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r161381): [GTK] Rendering is broken in GTK after r161381
        https://bugs.webkit.org/show_bug.cgi?id=126570

        Reviewed by Tim Horton.

        Use LayoutRect::infiniteRect() instead of IntRect::infiniteRect()
        when a LayoutRect is expected.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):

2014-01-07  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Change default value from 'auto' to 'none'
        https://bugs.webkit.org/show_bug.cgi?id=126544

        Reviewed by Sam Weinig.

        Update the CSS infrastructure to accept 'none' as the default value
        for shape-inside and shape-outside.

        Updated existing parsing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeProperty):
        * rendering/style/ShapeValue.h:

2014-01-07  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-outside layout incorrect when line spans rounded box rounded corners
        https://bugs.webkit.org/show_bug.cgi?id=126528

        Reviewed by Andreas Kling.

        BoxShape::getExcludedIntervals() now checks for the special case where the line spans the
        top and bottom rounded corners - which implies that the excluded interval is the box's
        horizontal extent.

        Test: fast/shapes/shape-outside-floats/shape-outside-line-spans-box-corners.html

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedIntervals):

2014-01-07  Alexey Proskuryakov  <ap@apple.com>

        Debug biuld fix.

        Replace actionTag with mactionTag in assertions.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex):
        (WebCore::MathMLSelectElement::getSelectedActionChild):

2014-01-07  Frédéric Wang  <fred.wang@free.fr>

        Add Support for the semantics element.
        https://bugs.webkit.org/show_bug.cgi?id=100626

        Reviewed by Chris Fleizach.

        Tests: mathml/presentation/semantics-2.html
               mathml/presentation/semantics-3.html
               mathml/presentation/semantics-4.html

        This provides a complete support for the semantics element. When the first child is a content MathML, an annotation can be selected and displayed. The selection algorithm is identical to Gecko's one. The recognized annotations are text (e.g. LaTeX), presentation MathML, SVG and HTML.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::childShouldCreateRenderer):
        (WebCore::MathMLElement::attributeChanged):
        (WebCore::MathMLElement::isPresentationMathML):
        * mathml/MathMLElement.h:
        (WebCore::MathMLElement::isMathMLToken):
        (WebCore::MathMLElement::isSemanticAnnotation):
        (WebCore::MathMLElement::isPresentationMathML):
        (WebCore::MathMLElement::updateSelectedChild):
        * mathml/MathMLInlineContainerElement.h:
        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedActionChildAndIndex):
        (WebCore::MathMLSelectElement::getSelectedActionChild):
        (WebCore::MathMLSelectElement::getSelectedSemanticsChild):
        (WebCore::MathMLSelectElement::updateSelectedChild):
        (WebCore::MathMLSelectElement::toggle):
        * mathml/MathMLSelectElement.h:
        * mathml/MathMLTextElement.h:
        * mathml/mathattrs.in:
        * mathml/mathtags.in:

2014-01-07  Pascal Jacquemart  <p.jacquemart@samsung.com>

        Fix compilation issue with GLES2 after http://webkit.org/b/126548
        https://bugs.webkit.org/show_bug.cgi?id=126578

        Reviewed by  Brent Fulgham

        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp: added GLES2/gl2.h include

2014-01-07  László Langó  <llango.u-szeged@partner.samsung.com>

        Remove some extra includes from XML.
        https://bugs.webkit.org/show_bug.cgi?id=126572

        Reviewed by Anders Carlsson.

        No new tests, no functionality changed.

        * xml/XMLHttpRequest.cpp:
        * xml/XMLHttpRequestUpload.cpp:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathEvaluator.cpp:
        * xml/XPathExpression.cpp:
        * xml/XPathExpressionNode.cpp:
        * xml/XPathFunctions.cpp:
        * xml/XPathNodeSet.cpp:
        * xml/XPathParser.cpp:
        * xml/XPathPath.cpp:
        * xml/XPathPredicate.cpp:
        * xml/XPathPredicate.h:
        * xml/XPathResult.cpp:
        * xml/XPathValue.cpp:
        * xml/XPathVariableReference.cpp:
        * xml/XSLImportRule.cpp:
        * xml/XSLStyleSheetLibxslt.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2014-01-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add toHTMLTableSectionElement() functions, and use it
        https://bugs.webkit.org/show_bug.cgi?id=126418

        Reviewed by Andreas Kling.

        HTMLTableSectionElement covers tbody, tfoot, and thead tags. So, we can't
        generate isHTMLTableSectionElement() by using template. This patch add
        toHTMLTableSectionElement() manually in order to cleanup static_cast<>.

        No new tests, no behavior change.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:

2014-01-07  László Langó  <llango.u-szeged@partner.samsung.com>

        Remove some extra includes from SVG.
        https://bugs.webkit.org/show_bug.cgi?id=126565

        Reviewed by Dirk Schulze.

        No new tests, no functionality changed.

        * rendering/svg/RenderSVGBlock.cpp:
        * rendering/svg/RenderSVGContainer.cpp:
        * rendering/svg/RenderSVGEllipse.cpp:
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGHiddenContainer.cpp:
        * rendering/svg/RenderSVGImage.cpp:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.cpp:
        * rendering/svg/RenderSVGModelObject.cpp:
        * rendering/svg/RenderSVGPath.cpp:
        * rendering/svg/RenderSVGRect.cpp:
        * rendering/svg/RenderSVGResource.cpp:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceLinearGradient.cpp:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceRadialGradient.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/RenderSVGShape.cpp:
        * rendering/svg/RenderSVGText.cpp:
        * rendering/svg/RenderSVGTransformableContainer.cpp:
        * rendering/svg/SVGInlineFlowBox.cpp:
        * rendering/svg/SVGInlineTextBox.cpp:
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGRenderTreeAsText.cpp:
        * rendering/svg/SVGRenderingContext.cpp:
        * rendering/svg/SVGResources.cpp:
        * rendering/svg/SVGResourcesCache.cpp:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        * rendering/svg/SVGRootInlineBox.cpp:
        * rendering/svg/SVGTextChunk.cpp:
        * rendering/svg/SVGTextChunkBuilder.cpp:
        * rendering/svg/SVGTextLayoutAttributes.h:
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp:
        * rendering/svg/SVGTextLayoutEngine.h:
        * rendering/svg/SVGTextMetricsBuilder.h:
        * rendering/svg/SVGTextQuery.cpp:
        * rendering/svg/SVGTextRunRenderingContext.cpp:

2014-01-07  Krzysztof Czech  <k.czech@samsung.com>

        [ATK] Expose aria-checked mixed state as ATK_STATE_INDETERMINATE
        https://bugs.webkit.org/show_bug.cgi?id=125855

        Reviewed by Mario Sanchez Prada.

        Test: accessibility/aria-checked-mixed-value.html

        Expose ATK_STATE_INDETERMINATE to support aria-checked mixed state
        for radio and checkbox types.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2014-01-07  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126562> DOMProgressEvent has unspecified availability

        Reviewed by Ryosuke Niwa.

        * bindings/objc/PublicDOMInterfaces.h: Add DOMProgressEvent. It first appeared in 10.6.

2014-01-07  Mark Rowe  <mrowe@apple.com>

        Another Mountain Lion build fix.

        The Mountain Lion version of NS_DEPRECATED_MAC generates a reference to a nonexistent
        availability macro when the introduced and deprecated versions are the same. Follow
        AppKit's lead in working around this by defining the macros that will be referenced
        for the various possible OS version numbers. This isn't an issue on newer versions of
        OS X as the Foundation availability macros expand directly in to __attributes__ rather
        than in to the legacy availability maros.

        * bindings/objc/WebKitAvailability.h:

2014-01-06  Mark Rowe  <mrowe@apple.com>

        Mountain Lion build fix.

        * bindings/objc/WebKitAvailability.h: #define __AVAILABILITY_INTERNAL__MAC_TBD so that
        the TBD version works on Mountain Lion. Newer OS versions use a slightly different set
        of macros that already support this version. Add a missing #include so that defintions
        of the Foundation availability macros can be found even if no other Foundation headers
        were included first.

2014-01-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed, rolling out r161401.
        http://trac.webkit.org/changeset/161401
        https://bugs.webkit.org/show_bug.cgi?id=126418

        REGRESSION(r161401): Break layout test on mac-wk1(Debug)

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:

2014-01-05  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126500> Move Objective-C DOM bindings off the legacy WebKit availability macros

        The legacy WebKit availability macros are verbose, confusing, and provide no benefit
        over using the system availability macros directly. The original vision was that
        they'd serve a cross-platform purpose but that never came to be.

        The OS X version used in the new availability macros is based on the mapping in
        JavaScriptCore/WebKitAvailability.h.

        Part of <rdar://problem/15512304>.

        Reviewed by Sam Weinig.

        * bindings/objc/DOMCSS.h:
        * bindings/objc/DOMEventException.h:
        * bindings/objc/DOMException.h:
        * bindings/objc/DOMExtensions.h:
        * bindings/objc/DOMObject.h:
        * bindings/objc/DOMRangeException.h:
        * bindings/objc/DOMXPathException.h:
        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/objc/WebScriptObject.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (ReadPublicInterfaces):
        (GenerateHeader): Tag enums with WK_ENUM_AVAILABLE_MAC and classes with WEBKIT_CLASS_AVAILABLE_MAC.
        Remove the #ifs that we were previously generating now that enums are appropriately tagged.
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObjectInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallbackInternal.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetter.h:
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetterInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestEventTarget.h:
        * bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestExceptionInternal.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h:
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.h:
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListenerInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:
        * bindings/scripts/test/ObjC/DOMTestNode.h:
        * bindings/scripts/test/ObjC/DOMTestNodeInternal.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObjInternal.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructors.h:
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructorsInternal.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefsInternal.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:
        * bindings/scripts/test/ObjC/DOMattributeInternal.h:
        * bindings/scripts/test/ObjC/DOMreadonly.h:
        * bindings/scripts/test/ObjC/DOMreadonlyInternal.h:

2014-01-06  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r157851): trailing space inside an editable region could be erroneously collapsed
        https://bugs.webkit.org/show_bug.cgi?id=126549

        Reviewed by Sam Weinig.

        The regression was caused by erroneous use of m_currentCharacterIsSpace in place of m_currentCharacterIsWS.

        See the following two lines before the refactoring:
        http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp?rev=157850#L3074
        http://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp?rev=157850#L3198

        I've also cross-checked other places where m_currentCharacterIsSpace and m_currentCharacterIsWS are used.

        Test: editing/inserting/inserting-trailing-space-and-letter.html

        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove canOverrideDeviceMetrics and setDeviceMetricsOverride from protocol
        https://bugs.webkit.org/show_bug.cgi?id=126149

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        These are not used anywhere in WebInspectorUI.
        So, it removes unused Protocols and APIs.

        * inspector/InspectorClient.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::disable):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:

2014-01-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Add toHTMLTableSectionElement() functions, and use it
        https://bugs.webkit.org/show_bug.cgi?id=126418

        Reviewed by Anders Carlsson.

        HTMLTableSectionElement covers tbody, tfoot, and thead tags. So, we can't
        generate isHTMLTableSectionElement() by using template. This patch add
        toHTMLTableSectionElement() manually in order to cleanup static_cast<>.

        No new tests, no behavior change.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126559> Be more correct in dealing with NSControlSize

        Reviewed by Ryosuke Niwa.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::scrollbarControlSizeToNSControlSize): Helper function to map from ScrollbarControlSize
        to NSControlSize.
        (WebCore::ScrollbarThemeMac::registerScrollbar): Use the helper rather than casting.
        (WebCore::ScrollbarThemeMac::scrollbarThickness): Use the helper.
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::progressBarRectForBounds): Update the type of the local to NSControlSize.
        (WebCore::RenderThemeMac::paintProgressBar): Ditto.

2014-01-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Be safer about toggling OpenGL state by using a scoped object to control setting lifetime.
        https://bugs.webkit.org/show_bug.cgi?id=126548

        Reviewed by Anders Carlsson.

        No new tests since there is no change in behavior.

        * GNUmakefile.list.am: Updated to build new TemporaryOpenGLSetting files.
        * PlatformBlackBerry.cmake: Ditto
        * PlatformEfl.cmake: Ditto
        * PlatformGTK.cmake: Ditto
        * PlatformNix.cmake: Ditto
        * WebCore.vcxproj/WebCore.vcxproj: Ditto
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto
        * WebCore.xcodeproj/project.pbxproj: Ditto
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Use new object.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Ditto
        (WebCore::GraphicsContext3D::reshape): Ditto
        * platform/graphics/opengl/TemporaryOpenGLSetting.cpp: Added.
        (WebCore::TemporaryOpenGLSetting::TemporaryOpenGLSetting):
        (WebCore::TemporaryOpenGLSetting::~TemporaryOpenGLSetting):
        * platform/graphics/opengl/TemporaryOpenGLSetting.h: Added.

2014-01-06  Simon Fraser  <simon.fraser@apple.com>

        Hook up the RemoteScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=126547

        Reviewed by Tim Horton.

        Export lots of scrolling-related symbols for use by WebKit2.

        * WebCore.exp.in:

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove support for FileSystem in Frontend.
        https://bugs.webkit.org/show_bug.cgi?id=126369

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        Remove leftover codes from protocol after r156692.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/protocol/FileSystem.json: Removed.

2014-01-06  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] ASSERTION FAILED: m_segmentRanges.size() < m_segments.size()
        https://bugs.webkit.org/show_bug.cgi?id=125770

        Reviewed by Bem Jones-Bey.

        When we have an e.g. up-side-down triangle, when the content doesn't fit in the bottom part of the shape,
        and the adjusted content flows into the next region with a shape, we need to update the actual shape
        and region. Since it wasn't updated, it led to a shape mismatch, which led to assert/layout error.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-regions-bottom-adjustment.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebiCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread): Update current shape
        and region, when adjustment occured.

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of Inspector/BindingVisitors.h
        https://bugs.webkit.org/show_bug.cgi?id=126374

        Reviewed by Joseph Pecoraro.

        No new tests, No change in behavior.

        In r161204, methods related to BindingVisitors was removed.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfiler.h:
        * inspector/BindingVisitors.h: Removed.
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorMemoryAgent.cpp:

2014-01-06  Tim Horton  <timothy_horton@apple.com>

        Add {IntRect, FloatRect}::infiniteRect() and ::isInfinite()
        https://bugs.webkit.org/show_bug.cgi?id=126537

        Reviewed by Simon Fraser.

        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::infiniteRect):
        (WebCore::FloatRect::isInfinite):
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::infiniteRect):
        (WebCore::IntRect::isInfinite):
        Add infiniteRect() and isInfinite() to FloatRect and IntRect.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::collectFragments):
        (WebCore::RenderLayer::calculateClipRects):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox):
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::renderSubtreeToImageBuffer):
        Adopt the new functions.

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of DOM.setFileInputFiles from Protocol
        https://bugs.webkit.org/show_bug.cgi?id=126312

        Reviewed by Joseph Pecoraro.

        No new tests, No changes in behavior.

        It is a dead code as all ports in WebKit don't support it.
        And this patch removes all things related to DOM.setFileInputFiles in Frontend.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/protocol/DOM.json:

2014-01-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Revise String Concatenation (Follow-up to r161247)
        https://bugs.webkit.org/show_bug.cgi?id=126411

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Use more efficient string
        concatenation per Darin Adler's suggestion.

2014-01-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] FBO Depth Buffer Attachment Function Improperly Clearing with 0
        https://bugs.webkit.org/show_bug.cgi?id=126538
        <rdar://problem/15201336>

        Reviewed by Dean Jackson.

        Tested by webgl/1.0.2/resources/webgl_test_files/conformance/renderbuffers/framebuffer-object-attachment.html

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::initializeAttachments): Clear depth buffer with 1.0f (rather than 0), to match expected
        default (clear) buffer state for OpenGL. Using 0 would require us to flip the clear mask for the depth attachment
        type.

2014-01-06  Simon Fraser  <simon.fraser@apple.com>

        Add new files for UI-side scrolling
        https://bugs.webkit.org/show_bug.cgi?id=126532

        Reviewed by Anders Carlson.

        * WebCore.xcodeproj/project.pbxproj: Make lots of scrolling-related headers Private
        so WebKit2 can include them.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::scheduleUpdateScrollPositionForNode): Callback that
        indicates that the given node has been scrolled asynchronously. Currently only
        handles the main frame.
        * page/scrolling/ScrollingCoordinator.h: Add support for type-casts of a remote subclass
        in another namespace.
        (WebCore::ScrollingCoordinator::isRemoteScrollingCoordinator):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isRemoteScrollingTree):

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Change Page, FocusController to use ViewState
        https://bugs.webkit.org/show_bug.cgi?id=126533

        Reviewed by Tim Horton.

        These classes currently maintain a set of separate fields to represent the view state;
        combine these into a single field, and allow WebPage to send the combined update rather
        than individual changes.

        Maintain existing interface for WebKit1 clients.

        * WebCore.exp.in:
            - Added WebCore::setViewState, removed WebCore::setIsVisuallyIdle.
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
            - Initialize combined m_viewState.
        (WebCore::FocusController::setFocused):
            - Calls setViewState.
        (WebCore::FocusController::setFocusedInternal):
            - setFocused -> setFocusedInternal.
        (WebCore::FocusController::setViewState):
            - Added, update all ViewState flags.
        (WebCore::FocusController::setActive):
            - Calls setViewState.
        (WebCore::FocusController::setActiveInternal):
            - setActive -> setActiveInternal.
        (WebCore::FocusController::setContentIsVisible):
            - Calls setViewState.
        (WebCore::FocusController::setContentIsVisibleInternal):
            - setContentIsVisible -> setContentIsVisibleInternal.
        * page/FocusController.h:
        (WebCore::FocusController::isActive):
        (WebCore::FocusController::isFocused):
        (WebCore::FocusController::contentIsVisible):
            - Implemented in terms of ViewState.
        * page/Page.cpp:
        (WebCore::Page::Page):
            - Initialize using PageInitialViewState.
        (WebCore::Page::setIsInWindow):
            - Calls setViewState.
        (WebCore::Page::setIsInWindowInternal):
            - setIsInWindow -> setIsInWindowInternal.
        (WebCore::Page::setIsVisuallyIdleInternal):
            - setIsVisuallyIdle -> setIsVisuallyIdleInternal.
        (WebCore::Page::setViewState):
            - Added, update all ViewState flags, including FocusController.
        (WebCore::Page::setIsVisible):
            - Calls setViewState.
        (WebCore::Page::setIsVisibleInternal):
            - setIsVisible -> setIsVisibleInternal.
        (WebCore::Page::visibilityState):
            - m_isVisible -> isVisible()
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_isVisible -> isVisible()
        * page/Page.h:
        (WebCore::Page::isVisible):
        (WebCore::Page::isInWindow):
            - Implemented in terms of ViewState.
        (WebCore::Page::scriptedAnimationsSuspended):
            - Combined member fields into ViewState::Flags.

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Move ViewState to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=126488

        Reviewed by Anders Carlson.

        This change also partial reverts handling of LayerHostingMode, making this
        a separate message again. With hindsight the new way of doing this wasn't
        in all ways simpler, and it won't make sense to move this to WebCore.

        * WebCore.xcodeproj/project.pbxproj:
        * page/ViewState.h: Added.
            - Moved from WebKit2, will be used by Page & FocusController.

2014-01-06  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Fix the build for the WebKitGTK+ developer configuration
        https://bugs.webkit.org/show_bug.cgi?id=126505

        Reviewed by Gustavo Noronha Silva.

        * CMakeLists.txt: Add missing IDLS and source files to the lists.
        * PlatformGTK.cmake: Add missing include directories and source files to the lists.
        Use the GeoClue, GUdev, and gio-unix include paths and libraries and sort the list
        of WebCore include directories.
        * UseJSC.cmake: Align the sourced list with the contents of the bindings/js directory.

2014-01-06  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Unreviewed speculative Windows build fix.

        * WebCore.vcxproj/WebCore.vcxproj:
            - Added UserActivity.cpp/.h.

2014-01-06  peavo@outlook.com  <peavo@outlook.com>

        [Win] Link error.
        https://bugs.webkit.org/show_bug.cgi?id=126526

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj: Include UserActivity files in build.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding screenRect implementation to PlatformScreenNix
        https://bugs.webkit.org/show_bug.cgi?id=126231

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * platform/nix/PlatformScreenNix.cpp:
        (WebCore::screenRect):

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding missing platform #ifs to WebCore files
        https://bugs.webkit.org/show_bug.cgi?id=126227

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * platform/LocalizedStrings.h:

2014-01-06  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding new strings to LocalizedStringsNix
        https://bugs.webkit.org/show_bug.cgi?id=126228

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * platform/nix/LocalizedStringsNix.cpp:
        (WebCore::submitButtonDefaultLabel):
        (WebCore::inputElementAltText):
        (WebCore::resetButtonDefaultLabel):
        (WebCore::defaultDetailsSummaryText):
        (WebCore::searchableIndexIntroduction):
        (WebCore::fileButtonChooseFileLabel):
        (WebCore::fileButtonChooseMultipleFilesLabel):
        (WebCore::fileButtonNoFileSelectedLabel):
        (WebCore::fileButtonNoFilesSelectedLabel):
        (WebCore::contextMenuItemTagOpenLinkInNewWindow):
        (WebCore::contextMenuItemTagDownloadLinkToDisk):
        (WebCore::contextMenuItemTagCopyLinkToClipboard):
        (WebCore::contextMenuItemTagOpenImageInNewWindow):
        (WebCore::contextMenuItemTagDownloadImageToDisk):
        (WebCore::contextMenuItemTagCopyImageToClipboard):
        (WebCore::contextMenuItemTagCopyImageUrlToClipboard):
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagDownloadVideoToDisk):
        (WebCore::contextMenuItemTagDownloadAudioToDisk):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagShowMediaControls):
        (WebCore::contextMenuitemTagHideMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagOpenFrameInNewWindow):
        (WebCore::contextMenuItemTagCopy):
        (WebCore::contextMenuItemTagDelete):
        (WebCore::contextMenuItemTagSelectAll):
        (WebCore::contextMenuItemTagUnicode):
        (WebCore::contextMenuItemTagInputMethods):
        (WebCore::contextMenuItemTagGoBack):
        (WebCore::contextMenuItemTagGoForward):
        (WebCore::contextMenuItemTagStop):
        (WebCore::contextMenuItemTagReload):
        (WebCore::contextMenuItemTagCut):
        (WebCore::contextMenuItemTagPaste):
        (WebCore::contextMenuItemTagNoGuessesFound):
        (WebCore::contextMenuItemTagIgnoreSpelling):
        (WebCore::contextMenuItemTagLearnSpelling):
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::contextMenuItemTagLookUpInDictionary):
        (WebCore::contextMenuItemTagOpenLink):
        (WebCore::contextMenuItemTagIgnoreGrammar):
        (WebCore::contextMenuItemTagSpellingMenu):
        (WebCore::contextMenuItemTagShowSpellingPanel):
        (WebCore::contextMenuItemTagCheckSpelling):
        (WebCore::contextMenuItemTagCheckSpellingWhileTyping):
        (WebCore::contextMenuItemTagCheckGrammarWithSpelling):
        (WebCore::contextMenuItemTagFontMenu):
        (WebCore::contextMenuItemTagBold):
        (WebCore::contextMenuItemTagItalic):
        (WebCore::contextMenuItemTagUnderline):
        (WebCore::contextMenuItemTagOutline):
        (WebCore::contextMenuItemTagInspectElement):
        (WebCore::contextMenuItemTagRightToLeft):
        (WebCore::contextMenuItemTagLeftToRight):
        (WebCore::contextMenuItemTagWritingDirectionMenu):
        (WebCore::contextMenuItemTagTextDirectionMenu):
        (WebCore::contextMenuItemTagDefaultDirection):
        (WebCore::searchMenuNoRecentSearchesText):
        (WebCore::searchMenuRecentSearchesText):
        (WebCore::searchMenuClearRecentSearchesText):
        (WebCore::AXDefinitionText):
        (WebCore::AXDescriptionListText):
        (WebCore::AXDescriptionListTermText):
        (WebCore::AXDescriptionListDetailText):
        (WebCore::AXFooterRoleDescriptionText):
        (WebCore::AXSearchFieldCancelButtonText):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::unknownFileSizeText):
        (WebCore::imageTitle):
        (WebCore::AXListItemActionVerb):
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
        (WebCore::mediaElementLoadingStateText):
        (WebCore::mediaElementLiveBroadcastStateText):
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageStepMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageTypeMismatchText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageBadInputForNumberText):
        (WebCore::missingPluginText):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        (WebCore::multipleFileUploadText):
        (WebCore::crashedPluginText):
        (WebCore::blockedPluginByContentSecurityPolicyText):
        (WebCore::insecurePluginVersionText):
        (WebCore::inactivePluginText):
        (WebCore::unacceptableTLSCertificate):
        (WebCore::textTrackClosedCaptionsText):
        (WebCore::textTrackSubtitlesText):
        (WebCore::textTrackOffMenuItemText):
        (WebCore::textTrackAutomaticMenuItemText):
        (WebCore::textTrackNoLabelText):
        (WebCore::snapshottedPlugInLabelTitle):
        (WebCore::snapshottedPlugInLabelSubtitle):

2014-01-06  László Langó  <lango@inf.u-szeged.hu>

        Use unsigned consistently, and check for invalid casts when calling into SharedBuffer from other code.
        https://bugs.webkit.org/show_bug.cgi?id=124579

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didReceiveData):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/PingLoader.h:
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::ResourceBuffer):
        * loader/ResourceBuffer.h:
        (WebCore::ResourceBuffer::create):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::addDataOrBuffer):
        (WebCore::ResourceLoader::didReceiveData):
        (WebCore::ResourceLoader::didReceiveDataOrBuffer):
        (WebCore::ResourceLoader::willStopBufferingData):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveData):
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveData):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::didReceiveDataArray):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::SharedBuffer):
        * platform/SharedBuffer.h:
        (WebCore::SharedBuffer::create):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (ResourceHandleStreamingClient::didReceiveData):
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didReceiveData):
        (WebCore::ResourceHandleClient::willStopBufferingData):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::didReceiveData):
        * platform/network/SynchronousLoaderClient.h:
        * platform/network/blackberry/BlobStream.cpp:
        (WebCore::BlobStream::didReceiveData):
        * platform/network/blackberry/BlobStream.h:
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/mac/WebCoreResourceHandleAsDelegate.mm:
        (-[WebCoreResourceHandleAsDelegate connection:willStopBufferingData:]):
        * platform/network/mac/WebCoreResourceHandleAsOperationQueueDelegate.mm:
        (-[WebCoreResourceHandleAsOperationQueueDelegate connection:willStopBufferingData:]):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):

2014-01-06  Andreas Kling  <akling@apple.com>

        RenderBlock::clone() should return RenderPtr.
        <https://webkit.org/b/126513>

        Reviewed by Antti Koivisto.

        * rendering/RenderBlock.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clone):

            Tweaked to return RenderPtr<RenderBlock>.

        (WebCore::RenderBlock::splitBlocks):

            Store cloned RenderBlocks in RenderPtrs. Use leakPtr() to sink
            them into ownership-taking APIs that still use raw pointers.

        * rendering/RenderPtr.h:

            Add a simple static_pointer_cast for RenderPtr&&.

2014-01-06  Andreas Kling  <akling@apple.com>

        RenderInline::clone() should return RenderPtr.
        <https://webkit.org/b/126514>

        Reviewed by Antti Koivisto.

        * rendering/RenderInline.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clone):

            Tweaked to return RenderPtr<RenderInline>.

        (WebCore::RenderInline::splitInlines):

            Store cloned RenderInlines in RenderPtrs. Use leakPtr() to sink
            them into ownership-taking APIs that still use raw pointers.

2014-01-06  Gurpreet Kaur  <k.gurpreet@samsung.com>

        <hr> appears gray instead of green because of color attribute is defined followed by noshade attribute
        https://bugs.webkit.org/show_bug.cgi?id=17674

        Reviewed by Simon Fraser.

        The noshade attribute is a boolean attribute and when set on hr element
        it shows a gray color. When there is color attribute the default gray
        color should be replaced by the color mentioned by the color attribute.
        Firefox and IE show the same behaviour but Webkit is different. Making
        the behaviour of Webkit similiar to Firefox and IE's behaviour.

        Test: fast/dom/HTMLHrElement/hr-color-noshade-attribute.html

        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::collectStyleForPresentationAttribute):
        When the color attribute is present that value is applied and the 
        default gray color is ignored. Incase of no color attribute the default
        gray color is applied.

2014-01-06  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/126499> Move WebKit off the legacy WebKit availability macros

        The legacy WebKit availability macros are verbose, confusing, and provide no benefit
        over using the system availability macros directly. The original vision was that
        they'd serve a cross-platform purpose but that never came to be.

        Since WebKit1 is API on OS X but SPI on iOS, some indirection is still needed in the
        availability macros to allow the headers to advertise the API as unavailable on OS X
        without interfering with the ability to build on iOS. This is achieved by defining
        WEBKIT-prefixed versions of the Foundation availability macros that are defined to
        their NS-prefixed equivalents. The installed headers are post-processed to map these
        macros back to their Foundation equivalents.

        Part of <rdar://problem/15512304>.

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/WebKitAvailability.h: Added. This lives at the WebCore level since it
        will be needed by the Objective-C DOM bindings.

2014-01-05  Simon Fraser  <simon.fraser@apple.com>

        Move responsibility for remote layer tree committing to RemoteLayerTreeDrawingArea
        https://bugs.webkit.org/show_bug.cgi?id=126501

        Reviewed by Sam Weinig.

        Add type-safe casting to GraphicsLayer.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::isGraphicsLayerCA):
        (WebCore::GraphicsLayer::isGraphicsLayerCARemote):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::isGraphicsLayerCA):

2014-01-05  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Ensure that the autotools build and the CMake install the same files
        https://bugs.webkit.org/show_bug.cgi?id=116379

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Reformat some install directives to be consistent with the rest of them.
        Install the GObject DOM bindings headers.

2014-01-05  Andreas Kling  <akling@apple.com>

        Use lineageOfType to simplify two rendering helpers.
        <https://webkit.org/b/126498>

        Reviewed by Antti Koivisto.

        * rendering/RenderRuby.cpp:
        (WebCore::findRubyRunParent):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::findTreeRootObject):

            Simplify two functions that walk their parent chain to find the
            closest ancestor of a certain type.

        * rendering/RenderRubyRun.h:

            Add requisite isRendererOfType<RenderRubyRun>().

2014-01-05  Csaba Osztrogonác  <ossy@webkit.org>

        Fix the Mac build too.

        * page/PageThrottler.h:

2014-01-05  Csaba Osztrogonác  <ossy@webkit.org>

        Weekend URTBF after r161319 to make non Mac builds work again.

        * page/PageThrottler.h:

2014-01-05  Gavin Barraclough  <barraclough@apple.com>

        Move process suppression of WebProcess to Page (from UIProcess)
        https://bugs.webkit.org/show_bug.cgi?id=126480

        Reviewed by Sam Weinig.

        Let each page take a UserActivity rather than having to coalesce this state, and take different activity
        tokens for normal visibility and suppression disabled, so we can see why the process is not suppressed.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::setIsVisuallyIdle):
        * page/Page.h:
            - setThrottled -> setIsVisuallyIdle.
        * page/PageThrottler.cpp:
        (WebCore::PageThrottler::PageThrottler):
            - Initialize m_visuallyNonIdle.
        (WebCore::PageThrottler::~PageThrottler):
            - setThrottled -> setIsVisuallyIdle.
        (WebCore::PageThrottler::setIsVisuallyIdle):
            - Use m_visuallyNonIdle to disable supression when the page is not visually idle.
        * page/PageThrottler.h:
            - setThrottled -> setIsVisuallyIdle, added m_visuallyNonIdle.

2014-01-04  Sam Weinig  <sam@webkit.org>

        Move a few more functions from RenderBlock to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=126494

        Reviewed by Andreas Kling.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::adjustInlineDirectionLineBounds):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::textAlignmentForLine):
        (WebCore::RenderBlockFlow::updateLogicalWidthForAlignment):
        (WebCore::RenderBlockFlow::startAlignedOffsetForLine):
        These are only used by RenderBlockFlow, so move them there.

2014-01-04  Simon Fraser  <simon.fraser@apple.com>

        Prepare the ScrollingTree for remote use
        https://bugs.webkit.org/show_bug.cgi?id=126493

        Reviewed by Sam Weinig.

        When committing the scrolling tree, we clone the ScrollingStateTree
        to hand off to another thread, or (in future) to encode to send to the
        UI process. During this cloning process, two types of layer transformations
        take place: for threaded scrolling, we replace GraphicsLayer with PlatformLayers.
        For remote scrolling, we'll replace GraphicsLayers with PlatformLayerIDs.
        Allow the ScrollingCoordinator to specify which type of transformation occurs
        by giving ScrollingStateTree a LayerRepresentation::Type member,
        which is consulted during ScrollingStateNode cloning.
        
        Also only copy layers that have changed to avoid setting dirty bits.
        
        Expose some other stuff on ScrollingStateTree which will be needed for
        remote scrolling.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::operator GraphicsLayer::PlatformLayerID):
        (WebCore::LayerRepresentation::toRepresentation):
        (WebCore::ScrollingStateNode::changedProperties):
        (WebCore::ScrollingStateNode::setChangedProperties):
        (WebCore::ScrollingStateNode::parentNodeID):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::setRemovedNodes):
        (WebCore::ScrollingStateTree::stateNodeForID):
        * page/scrolling/ScrollingStateTree.h:
        (WebCore::ScrollingStateTree::nodeCount):
        (WebCore::ScrollingStateTree::nodeMap):
        (WebCore::ScrollingStateTree::preferredLayerRepresentation):
        (WebCore::ScrollingStateTree::setPreferredLayerRepresentation):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::commitTreeState):

2014-01-04  Sam Weinig  <sam@webkit.org>

        Move LineBreaker functions to LineBreaker.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126491

        Reviewed by Simon Fraser.

        - Moves LineBreaker::nextLineBreak() and LineBreaker::nextSegmentBreak() to
          LineBreaker.cpp from RenderBlockLineLayout.cpp
        - Moves requiresIndent() to LineWidth.h/cpp from RenderBlockLineLayout.cpp
          so it can be shared.
        - Adds missing inline specifier to BreakingContext::handleEndOfLine() to avoid
          duplicate symbols.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalInlinePositions):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::nextLineBreak):
        (WebCore::LineBreaker::nextSegmentBreak):
        * rendering/line/LineWidth.cpp:
        (WebCore::requiresIndent):
        * rendering/line/LineWidth.h:

2014-01-04  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Fix the video and audio build
        https://bugs.webkit.org/show_bug.cgi?id=126464

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake: Complete the audio and video source lists.

2014-01-04  Zan Dobersek  <zdobersek@igalia.com>

        Explicitly use the std:: nested name specifier when using std::pair, std::make_pair
        https://bugs.webkit.org/show_bug.cgi?id=126439

        Reviewed by Andreas Kling.

        Instead of relying on std::pair and std::make_pair symbols being present in the current scope
        through the pair and make_pair symbols, the std:: specifier should be used explicitly.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        (WebCore::AccessibilityARIAGridCell::columnIndexRange):
        * accessibility/AccessibilityARIAGridCell.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mathPrescripts):
        (WebCore::AccessibilityRenderObject::mathPostscripts):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::rowIndexRange):
        (WebCore::AccessibilityTableCell::columnIndexRange):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (webkitAccessibleTableGetColumnAtIndex):
        (webkitAccessibleTableGetRowAtIndex):
        (webkitAccessibleTableGetColumnExtentAt):
        (webkitAccessibleTableGetRowExtentAt):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityHeaderElements]):
        (-[WebAccessibilityObjectWrapper accessibilityRowRange]):
        (-[WebAccessibilityObjectWrapper accessibilityColumnRange]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (convertMathPairsToNSArray):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        * bindings/js/SerializedScriptValue.cpp:
        * dom/ContainerNode.cpp:
        * dom/StyledElement.cpp:
        (WebCore::attributeNameSort):
        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseTimeFragment):
        * html/parser/HTMLMetaCharsetParser.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/DOMPatchSupport.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        * inspector/InspectorAgent.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::brokenImage):
        * loader/cache/CachedImage.h:
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::encodeHostnames):
        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData):
        * platform/graphics/WidthIterator.cpp:
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::adopt):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::parseCacheHeader):
        * platform/text/AtomicStringKeyedMRUCache.h:
        * platform/text/LineBreakIteratorPoolICU.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageSizeForError):
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderTableSection.h:
        * rendering/svg/SVGTextRunRenderingContext.cpp:
        (WebCore::SVGTextRunRenderingContext::glyphDataForCharacter):
        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString):
        (WebCore::SVGAnimatedAngleAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedAngleAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::addAnimatedTypes):
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createIntegerOptionalInteger):
        (WebCore::SVGAnimatedType::createNumberOptionalNumber):
        * svg/SVGAnimatedType.h:
        (WebCore::SVGAnimatedType::integerOptionalInteger):
        (WebCore::SVGAnimatedType::numberOptionalNumber):
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues):
        (WebCore::SVGAnimatedTypeAnimator::resetFromBaseValues):
        * svg/SVGParserUtilities.h:
        * svg/animation/SMILTimeContainer.h:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix EFL build.

        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::setHasChangedProperties):

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Clean up the means of committing the scrolling state tree
        https://bugs.webkit.org/show_bug.cgi?id=126482

        Reviewed by Tim Horton.

        ScrollingStateNodes would manually call scrollingStateTree().setHasChangedProperties()
        after setPropertyChanged() in lots of places, which was repetitive, and
        AsyncScrollingCoordinator manually called scheduleTreeStateCommit() in many places.
        
        Clean up both of these with a clearer trigger for state tree commits.
        ScrollingStateNodes::setPropertyChanged() calls ScrollingStateTree::setHasChangedProperties(),
        which turns around and tells the ScrollingCoordinator that the state tree became dirty.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreePropertiesChanged):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setCounterScrollingLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setHeaderLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setFooterLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setNonFastScrollableRegionForNode):
        (WebCore::AsyncScrollingCoordinator::setWheelEventHandlerCountForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollBehaviorForFixedElementsForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::setPropertyChanged):
        (WebCore::ScrollingStateNode::setLayer):
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::setViewportRect):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin):
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters):
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateScrollingNode::setFooterHeight):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::create):
        (WebCore::ScrollingStateTree::ScrollingStateTree):
        (WebCore::ScrollingStateTree::setHasChangedProperties):
        (WebCore::ScrollingStateTree::didRemoveNode):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Try to fix CoordinatedGraphics build after r161303. Remove implementations
        which are now in the cross-platform file.

        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::detachFromStateTree):
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/coordinatedgraphics/ScrollingStateNodeCoordinatedGraphics.cpp:
        * page/scrolling/coordinatedgraphics/ScrollingStateScrollingNodeCoordinatedGraphics.cpp:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Simplify ScrollingStateNode references to various layer types
        https://bugs.webkit.org/show_bug.cgi?id=126477

        Reviewed by Tim Horton.
        
        ScrollingStateNodes referenced both GraphicsLayer and PlatformLayers, in
        confusing ways. In the main thread they have a GraphicsLayer*, but need
        to check to see if the underlying PlatformLayer changed. Then, when
        cloned to commit to the scrolling thread, they drop the GraphicsLayer
        and store a PlatformLayer.
        
        Hide the complexity (and prepare for the future) by adding LayerRepresentation,
        which wraps various different flavors of layers, and knows how to check whether
        the PlatformLayer underlying a GraphicsLayer changed.
        
        ScrollingStateNode layer setters then just take and compare LayerRepresentations.
        Copy constructors convert to a PlatformLayer representation (though not really
        in the right place currently), and ScrollingTreeNodes get PlatformLayers.

        * page/scrolling/AsyncScrollingCoordinator.cpp:
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::syncLayerPositionForViewportRect):
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::setLayer):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::LayerRepresentation::LayerRepresentation):
        (WebCore::LayerRepresentation::operator GraphicsLayer*):
        (WebCore::LayerRepresentation::operator PlatformLayer*):
        (WebCore::LayerRepresentation::operator GraphicsLayer::PlatformLayerID):
        (WebCore::LayerRepresentation::operator ==):
        (WebCore::LayerRepresentation::toPlatformLayer):
        (WebCore::LayerRepresentation::representsGraphicsLayer):
        (WebCore::LayerRepresentation::representsPlatformLayer):
        (WebCore::LayerRepresentation::representsPlatformLayerID):
        (WebCore::ScrollingStateNode::layer):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::syncLayerPositionForViewportRect):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

2014-01-03  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Blit operation from Multisample FBO to rendering FBO must ignore GL_SCISSOR test
        https://bugs.webkit.org/show_bug.cgi?id=126470
        <rdar://problem/15201370>

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/resources/webgl_test_files/conformance/rendering/gl-scissor-test.html

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::resolveMultisamplingIfNecessary): Temporarily deactivate the GL_SCISSOR
        test while we do our blit, then reactivate if necessary.

2014-01-03  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] CGLPixelFormat should specify SampleBuffer and Sample count when using MSAA
        https://bugs.webkit.org/show_bug.cgi?id=126468

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/resources/webgl_test_files/conformance/rendering/gl-scissor-test.html

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::setPixelFormat): Add kCGLPFAMultisample, kCGLPFASampleBuffers (and count), and
        kCGLPFASamples (and count) to our pixel format when 'antialias=true'.
        (WebCore::GraphicsContext3D::GraphicsContext3D): Pass a new 'antialias' flag to the setPixelFormat
        method so we can turn on MSAA features when needed.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Give all PlatformCALayers a PlatformLayerID, not just remote ones
        https://bugs.webkit.org/show_bug.cgi?id=126466

        Reviewed by Tim Horton.

        The ScrollingStateTree has references to both GraphicsLayers and PlatformLayers
        which is confusing, and is necessary because the underlying PlatformLayer
        inside a GraphicsLayer can change. In order to hide some of this complexity,
        expose GraphicsLayer::primaryLayerID() which is a PlatformLayerID that clients
        can hold onto to test for underlying layer swapping.
        
        Also constify LayerType m_layerType on PlatformCALayer, which required
        cleaning up the construction of PlatformCALayerMac in the case where a
        PlatformCALayerMac is wrapping an existing CALayer (which happens for video).

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::primaryLayerID):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::primaryLayerID):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.cpp:
        (WebCore::generateLayerID):
        (WebCore::PlatformCALayer::PlatformCALayer):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::layerID):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::create):
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::commonInit):

2014-01-03  Andreas Kling  <akling@apple.com>

        Add lineageOfType renderer iterator and start using it.
        <https://webkit.org/b/126456>

        Add a convenient way to iterate over a renderers ancestry *including*
        the starting point renderer (if it meets the type criteria.)

        This works just like lineageOfType for Elements.

        Reviewed by Geoffrey Garen.

        * rendering/RenderAncestorIterator.h:
        (WebCore::lineageOfType):

            Added. Returns an adapter for walking a renderer's entire lineage
            matching any renderer of the given type.

        * rendering/RenderBoxModelObject.h:
        * rendering/RenderLayerModelObject.h:

            Add the requisite isRendererOfType<T> helpers.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::enclosingFloatPaintingLayer):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingLayer):
        (WebCore::RenderObject::enclosingBox):
        (WebCore::RenderObject::enclosingBoxModelObject):

            Simplify with lineageOfType. Added some FIXMEs about functions
            that should return references instead of pointers.

2014-01-03  Martin Robinson  <mrobinson@igalia.com>

        Small build fix for the GTK+ CMake port

        * PlatformGTK.cmake: Add an IDL file that is missing from the list of IDLs
        used to generate GObject DOM bindings.

2014-01-03  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/css changes
        https://bugs.webkit.org/show_bug.cgi?id=126237

        Reviewed by Simon Fraser.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Added iOS-specific code and FIXME comment.
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext): Ditto.
        (WebCore::CSSParser::parseValue): Ditto.
        * css/CSSPropertyNames.in: Added property -webkit-composition-fill-color. Also added FIXME comment.
        * css/CSSValueKeywords.in: Added iOS-specific -apple-system-* values.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder): Added iOS-specific code and FIXME comments.
        * css/MediaFeatureNames.h: Added media feature -webkit-video-playable-inline.
        * css/MediaQueryEvaluator.cpp:
        (WebCore::isRunningOnIPhoneOrIPod): Added. Also added FIXME comment.
        (WebCore::video_playable_inlineMediaFeatureEval): Added.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement): Substitute toHTMLMediaElement() for toMediaElement().
        (WebCore::StyleResolver::applyProperty): Added iOS-specific code and FIXME comment.
        * css/html.css: Added iOS-specific CSS styles.
        (input, textarea, keygen, select, button, isindex):
        (isindex):
        (input[type="date"]):
        (input[type="datetime"]):
        (input[type="datetime-local"]):
        (input[type="month"]):
        (input[type="time"]):
        (textarea):
        (input:-webkit-autofill):
        (input[type="radio"], input[type="checkbox"]):
        (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button):
        (input[type="range"]::-webkit-slider-thumb, input[type="range"]::-webkit-media-slider-thumb):
        (input[type="range"]::-webkit-slider-thumb:active):
        (input:disabled, textarea:disabled):
        (input[readonly], textarea[readonly]):
        (textarea::-webkit-input-placeholder):
        (input[type="checkbox"]):
        (input[type="radio"]):
        (input[type="checkbox"]:checked, input[type="radio"]:checked):
        (input[type="checkbox"]:checked:disabled, input[type="radio"]:checked:disabled):
        (select:focus):
        (select):
        * css/mathml.css: Added iOS-specific CSS styles.
        (math, mfenced > *):
        (mo, mfenced):
        * css/mediaControlsiOS.css: Added.
        * css/svg.css: Added iOS-specific CSS styles.
        (text, tspan, tref):

2014-01-03  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] glScissor test is not accounted for when generating internal rendering textures.
        https://bugs.webkit.org/show_bug.cgi?id=126455
        <rdar://problem/15744206>

        Reviewed by Dean Jackson.

        Covered by webgl/1.0.2/conformance/rendering/gl-scissor-test.html

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::prepareTexture): Check state of GL_SCISSOR_TEST and GL_DITHER, deactivate them during
        our internal drawing, then turn them back on for further processing.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Maybe fix Windows build.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2014-01-03  Jer Noble  <jer.noble@apple.com>

        [MediaControls][iOS] Enable JavaScript Media Controls on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=126440

        Reviewed by Eric Carlson.

        Drive-by misspelling fix, and add a convenience function to check if the
        controls are currently hidden:
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleWrapperMouseMove):
        (Controller.prototype.handleWrapperMouseOut):
        (Controller.prototype.updatePlaying):
        (Controller.prototype.controlsAreHidden): Added.

        Add a new subclass of Controller for iOS and a matching CSS:
        * Modules/mediacontrols/mediaControlsiOS.css: Added.
        * Modules/mediacontrols/mediaControlsiOS.js: Added.
        (createControls): Override the createControls() in mediaControlsApple.js.
        (ControllerIOS): Define a new class.
        (ControllerIOS.prototype.inheritFrom): Convenience method to mixin parent
            prototype methods.
        (ControllerIOS.prototype.createBase): Override, listen for touches instead of mouse events.
        (ControllerIOS.prototype.createControls): Ditto.
        (ControllerIOS.prototype.configureInlineControls): Override, only add play, timeline, and full
            screen butttons.
        (ControllerIOS.prototype.configureFullScreenControls): Override, and add no buttons.
        (ControllerIOS.prototype.handlePlayButtonTouchStart): Activate.
        (ControllerIOS.prototype.handlePlayButtonTouchEnd): De-activate and do action.
        (ControllerIOS.prototype.handlePlayButtonTouchCancel): De-activate and cancel.
        (ControllerIOS.prototype.handleWrapperTouchStart): Show controls.
        (ControllerIOS.prototype.handlePanelTouchStart): Disable video selection.
        (ControllerIOS.prototype.handlePanelTouchEnd): Re-enable video selection.
        (ControllerIOS.prototype.handlePanelTouchCancel): Ditto.

        Drive-by fix to enable the JavaScript controls when the plugin is disabled:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):

        Add the iOS JavaScript by appending it to the generic (Apple) JavaScript:
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::mediaControlsScript):

        Add new files to project:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Allow the ChromeClient to provide a custom ScrollingCoordinator
        https://bugs.webkit.org/show_bug.cgi?id=126450

        Reviewed by Tim Horton.
        
        Some platforms will want to provide a custom ScrollingCoordinator, so let
        them do so by asking ChromeClient first for one.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::createScrollingCoordinator):
        * page/Page.cpp:
        (WebCore::Page::scrollingCoordinator):

2014-01-03  Andreas Kling  <akling@apple.com>

        Deploy more child renderer iterators in RenderBlockFlow.
        <https://webkit.org/b/126434>

        Reviewed by Sam Weinig.

        * rendering/RenderBlockFlow.cpp:
        (WebCore::shouldCheckLines):

            Make this helper take a RenderBlockFlow instead of a RenderObject
            and simplified it a bit. RenderDeprecatedFlexibleBox does not
            derive from RenderBlockFlow so those checks can be omitted.

        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlockFlow::lineAtIndex):
        (WebCore::RenderBlockFlow::lineCount):
        (WebCore::RenderBlockFlow::clearTruncation):

            Use childrenOfType to iterate over block and block-flow children.
            Tweaked some early return/continue to reduce nesting.

2014-01-03  Simon Fraser  <simon.fraser@apple.com>

        Allow different types of ScrollingTrees to have different types of ScrollingTreeNode subclasses
        https://bugs.webkit.org/show_bug.cgi?id=126445

        Reviewed by Tim Horton.
        
        Make it possible to have ScrollingTree subclasses with different subclasses of ScrollingTreeNodes,
        by giving ScrollingTree a pure virtual createNode() function. ThreadedScrollingTree implements
        this, and then delegates node creation to its AsyncScrollingCoordinator (since we have
        a ScrollingCoordinatorMac but no real need for a ThreadedScrollingTreeMac).
        
        Also made ThreadedScrollingTree's m_scrollingCoordinator an AsyncScrollingCoordinator,
        since by definition a threaded scrolling tree uses an async coordinator.

        * page/scrolling/AsyncScrollingCoordinator.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/ThreadedScrollingTree.cpp:
        (WebCore::ThreadedScrollingTree::create):
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::createNode):
        * page/scrolling/ThreadedScrollingTree.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::createScrollingTreeNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::create):

2014-01-03  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Unreviewed build fix.

        * platform/UserActivity.h:
            - case fix.

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Refactor NSActivity handling code from ChildProcess to UserActivity
        https://bugs.webkit.org/show_bug.cgi?id=126330

        Reviewed by Sam Weinig.

        UserActivity is a mechanism to express to the operating system (where appropriate)
        that a user initiated activity is taking place, and as such that resources should be
        made available to the process accordingly.

        Currently we hold a single NSActivity, at the WebKit layer. This refactoring allows us
        to hold different activity tokens for different user actions (which simplifies the
        handling, and aides debugging since the token can more accurately express the activity
        taking place), and also will allow us to avoid the layering difficulty of calling back
        up the stack to WebKit to register that an activity is taking place.

        * WebCore.xcodeproj/project.pbxproj:
            - added new files.
        * platform/UserActivity.cpp: Added.
        (WebCore::UserActivity::UserActivity):
            - nop implementation - ignore description.
        (WebCore::UserActivity::beginActivity):
        (WebCore::UserActivity::endActivity):
            - nop implementation - just inc/dec m_count.
        * platform/UserActivity.h: Added.
        (WebCore::UserActivity::isActive):
            - returns true if one or more instance of this activity is in progress.
        * platform/mac/UserActivityMac.mm: Added.
        (WebCore::UserActivity::UserActivity):
            - constructor accepts one argument, a description string.
        (WebCore::UserActivity::isValid):
            - used by assertions.
        (WebCore::UserActivity::beginActivity):
        (WebCore::UserActivity::endActivity):
            - track start/end of an activity - calls to these methods should be balanced.
        (WebCore::UserActivity::hysteresisTimerFired):
              - used to implement hysteresis in releasing  NSActivity.

2014-01-03  Alexey Proskuryakov  <ap@apple.com>

        Line ending conversion should be able to handle strings with null chars
        https://bugs.webkit.org/show_bug.cgi?id=126202

        This is a merge from Blink.

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/local/formdata/send-form-data-with-string-containing-null.html

        * platform/text/LineEnding.cpp: (WebCore::normalizeToCROrLF): Do it right.

2014-01-03  Alberto Garcia  <berto@igalia.com>

        WebKit-GTK 1.8.1 does not build on OS X 10.7
        https://bugs.webkit.org/show_bug.cgi?id=88407

        Reviewed by Carlos Garcia Campos.

        Replace non-portable 'echo -n' with 'true'.

        * GNUmakefile.am:

2014-01-03  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=126428

        Reviewed by Brent Fulgham.

        The NativeImagePtr type is not an CGImageRef on WinCairo, cannot use CFRetain.

        * loader/cache/MemoryCache.cpp: Replace USE(CF) with USE(CG).
        * loader/cache/MemoryCache.h: Ditto.

2014-01-03  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify FloatRoundedRect, BoxShape construction
        https://bugs.webkit.org/show_bug.cgi?id=125995

        Reviewed by Andreas Kling.

        Cleanup of various internal Shape issues:
        - Removed unnecessary Shape() initialization list entries in Shape subclasses
          per https://bugs.webkit.org/show_bug.cgi?id=125548#c2.
        - Used const references instead of pointers for non-deprecated Shape:createShape() logic.
        - Replaced createShape() overloads for Rasters and Boxes with functions named
          createRasterShape() and createBoxShape().
        - Added a FloatRoundedRect::Radii() constructor to reduce the parameter list
          length of the FloatRoundedRect constructor in createBoxShape().

        There are no new tests, this is just internal refactoring.

        * platform/graphics/FloatRoundedRect.h:
        (WebCore::FloatRoundedRect::Radii::Radii):
        * rendering/shapes/BoxShape.h:
        (WebCore::BoxShape::BoxShape):
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::RasterShape):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::RectangleShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::createInsetShape):
        (WebCore::Shape::createShape):
        (WebCore::Shape::createRasterShape):
        (WebCore::Shape::createBoxShape):
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::ShapeInfo<RenderType>::computedShape):

2014-01-03  Andreas Kling  <akling@apple.com>

        Remove unused Document::openSearchDescriptionURL().
        <https://webkit.org/b/126419>

        Reviewed by Antti Koivisto.

        * dom/Document.h:
        * dom/Document.cpp:

            Scrub leftovers from the defunct Chromium port.

2014-01-03  Jinwoo Song  <jinwoo7.song@samsung.com>

        VibrationPattern should allocate an single vector instance for single integer input
        https://bugs.webkit.org/show_bug.cgi?id=126417

        Reviewed by Gyuyoung Kim.

        When the Vibration pattern is set with a single integer, the VibrationPattern should
        be set with this integer as a vibration time. But the VibrationPattern(unsigned vector) was
        initialized with a single parameter, the vibration time, so the time was used to set
        the size of vector.

        * Modules/vibration/NavigatorVibration.cpp:
        (WebCore::NavigatorVibration::vibrate):

2014-01-02  Jaehun Lim  <ljaehun.lim@samsung.com>

        IconController.cpp needs to include <wtf/text/CString.h>
        https://bugs.webkit.org/show_bug.cgi?id=126415

        Reviewed by Gyuyoung Kim.

        Build fails in IconController.cpp when ICONDATABASE is disabled.
        WebKit/Source/WebCore/loader/icon/IconController.cpp:124:110: error: invalid use of incomplete type ‘class WTF::CString’
        IconController.cpp needs #include <wtf/text/CString.h>.

        No new tests. Just build fix.

        * loader/icon/IconController.cpp: Add #include statement.

2014-01-02  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Previous scrollbar is remained sometimes
        https://bugs.webkit.org/show_bug.cgi?id=126414

        Reviewed by Gyuyoung Kim.

        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::invalidate):
        Updated scrollbar visibility in Scrollbar::invalidate().
        * platform/efl/ScrollbarEfl.h:
        Removed show()/hide() which never been called() for scrollbar.

2014-01-02  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Correct symbol lookup logic to handle 1-element arrays
        https://bugs.webkit.org/show_bug.cgi?id=126411
        <rdar://problem/15394564>

        Reviewed by Dean Jackson.

        Tested by revisions to webgl/1.0.2/conformance/glsl/misc/shader-with-array-of-structs-containing-arrays.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Revise to
        handle access to zeroeth element of the array.

2014-01-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Crash in WebCore::translateIntersectionPointsToSkipInkBoundaries
        https://bugs.webkit.org/show_bug.cgi?id=126252

        Reviewed by Alexey Proskuryakov.

        lastIntermediate was a iterator pointing into a Vector, which was being re-used
        even while appending to the Vector. If any of the append operators triggered
        a realloc, the iterator would point to the old free'ed memory.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink-crash-many-gaps.html

        * rendering/InlineTextBox.cpp:
        (WebCore::translateIntersectionPointsToSkipInkBoundaries):

2014-01-02  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] Correct symbol lookup logic to handle 1-element arrays
        https://bugs.webkit.org/show_bug.cgi?id=126411
        <rdar://problem/15394564>

        Reviewed by Dean Jackson.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniformLocation): Revise code to handle the case of single-element
        arrays.

2014-01-02  Sam Weinig  <sam@webkit.org>

        Update Promises to the https://github.com/domenic/promises-unwrapping spec
        https://bugs.webkit.org/show_bug.cgi?id=120954

        Reviewed by Filip Pizlo.

        * ForwardingHeaders/runtime/JSPromiseDeferred.h: Added.
        * ForwardingHeaders/runtime/JSPromiseResolver.h: Removed.
        * bindings/js/JSDOMGlobalObjectTask.cpp:
        (WebCore::JSGlobalObjectTask::JSGlobalObjectTask):
        * bindings/js/JSDOMGlobalObjectTask.h:
        * bindings/js/JSDOMPromise.cpp:
        (WebCore::DeferredWrapper::DeferredWrapper):
        (WebCore::DeferredWrapper::promise):
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        * bindings/js/JSDOMPromise.h:
        (WebCore::DeferredWrapper::resolve):
        (WebCore::DeferredWrapper::reject):
        (WebCore::DeferredWrapper::resolve<String>):
        (WebCore::DeferredWrapper::resolve<bool>):
        (WebCore::char>>):
        (WebCore::DeferredWrapper::reject<String>):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::queueTaskToEventLoop):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::generateKey):
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::queueTaskToEventLoop):
        * bindings/js/JSWorkerGlobalScopeBase.h:

2014-01-02  Tim Horton  <timothy_horton@apple.com>

        ImageBufferBackingStoreCache should use DeferrableOneShotTimer
        https://bugs.webkit.org/show_bug.cgi?id=126155

        Reviewed by Anders Carlsson.

        Since ImageBufferBackingStoreCache's purge timer is pushed out every time
        a backing store is deallocated, we can easily waste a lot of time rescheduling
        the timer. Since it's a cache purge timer and doesn't need that kind of precision,
        adopt DeferrableOneShotTimer, which is much more performant when deferred frequently.

        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
        (WebCore::ImageBufferBackingStoreCache::timerFired):
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
        * platform/graphics/cg/ImageBufferBackingStoreCache.h:

2014-01-02  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen. Modifications reviewed by Tim Horton.

        This patch is taken from r160945, but the modifications to ImageBufferCG.cpp
        have been reverted.

        This test adds a static class, ImageBufferBackingStoreCache, that vends 
        IOSurfaces. It remembers IOSurfaces that have been returned to it until 
        a configurable timeout. 

        The storage used by this class is in the form of a HashMap from a 
        bucketed size to the IOSurface. There are many other data structures 
        that could be used, but this implementation gives a 80% hit rate on 
        normal browsing of some example sites with Canvas and 
        text-decoration-skip: ink. Because the buckets are fairly 
        small (rounding the width and height up to multiples of 8), traversing the 
        bucket contents takes on average 2 steps.  

        Test: fast/canvas/canvas-backing-store-reuse.html 

        * WebCore.xcodeproj/project.pbxproj: Added new caching class 
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Added. 
        (WebCore::createIOSurface): Copied from ImageBufferCG.cpp 
        (WebCore::ImageBufferBackingStoreCache::timerFired): Forget the cache 
        contents 
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer): 
        (WebCore::ImageBufferBackingStoreCache::get): Static getter 
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache): 
        (WebCore::ImageBufferBackingStoreCache::insertIntoCache): Memory-management 
        creation function 
        (WebCore::ImageBufferBackingStoreCache::takeFromCache): Memory-management 
        deletion function 
        (WebCore::ImageBufferBackingStoreCache::isAcceptableSurface): Does this cached 
        IOSurface fit the bill? 
        (WebCore::ImageBufferBackingStoreCache::tryTakeFromCache): Lookup 
        a bucket and walk through its contents 
        (WebCore::ImageBufferBackingStoreCache::getOrAllocate): Public function 
        for clients who want a IOSurface from the cache 
        (WebCore::ImageBufferBackingStoreCache::deallocate): Public 
        function for clients to return an IOSurface to the pool 
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Added. 
        (WebCore::ImageBuffer::ImageBuffer): 
        (WebCore::ImageBuffer::~ImageBuffer): 

2014-01-02  Piotr Grad  <p.grad@samsung.com>

        Video-seek-with-negative-playback was flaky.
        https://bugs.webkit.org/show_bug.cgi?id=126379

        Reviewed by Eric Carlson.

        No new tests. Covered by existing tests.

        m_player->setRate() should be called before updating m_playbackRate, because potentiallyPlaying() depends
        on endedPlayback(), which checks m_playbackRate.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setPlaybackRate):

2014-01-02  Daniel Bates  <dabates@apple.com>

        [iOS] Tapping any link crashes in WebCore::EventHandler::mouseMoved()
        (also crashes when scrolling certain sites)
        https://bugs.webkit.org/show_bug.cgi?id=126401
        <rdar://problem/15739334>

        Reviewed by Tim Horton.

        * page/ios/EventHandlerIOS.mm:
        (WebCore::currentEventSlot): Make the shared variable have static-storage duration.

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Remove WindowIsVisible
        https://bugs.webkit.org/show_bug.cgi?id=126270

        Reviewed by Tim Horton.

        We currently track visibility in two ways - ViewState::IsVisible and ViewState::WindowIsVisible.
        The latter detects that the content is hidden in fewer cases than the former, and as such, the
        former is always preferable.

        This affects the hidden state provided to FocusController::contentAreaDidShowOrHide and to
        Plugin::windowVisibilityChanged.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::FocusController):
        (WebCore::FocusController::setContentIsVisible):
        * page/FocusController.h:
            - rename ContainingWindowIsVisible -> ContentIsVisible.

2014-01-02  Gavin Barraclough  <barraclough@apple.com>

        Merge didMoveOnscreen / page visibility to isVisible
        https://bugs.webkit.org/show_bug.cgi?id=126268

        Reviewed by Tim Horton.

        The onscreen state most closely tracks view visibility (though currently
        also tracks a mix of in-window state). Make more consistent, simplify,
        and move all animation suspension logic to Page, so it can be controlled
        by the PageThrottler.

        * WebCore.exp.in:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::fakeMouseMoveEventTimerFired):
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldSetCursor):
        * page/Page.cpp:
        (WebCore::Page::Page):
            - initialize new variables.
        (WebCore::Page::setIsVisible):
            - merge setVisibilityState, didMoveOnscreen, willMoveOffscreen.
        (WebCore::Page::setIsPrerender):
            - switches visibility state from hidden to prerender.
        (WebCore::Page::visibilityState):
            - computed from m_isVisible, m_isPrerender.
        (WebCore::Page::hiddenPageCSSAnimationSuspensionStateChanged):
            - m_visibilityState -> m_isVisible.
        * page/Page.h:
            - remove didMoveOnscreen/willMoveOffscreen
              m_isOnscreen & m_visibilityState -> m_isVisible & m_isPrerender
              setVisibilityState -> setIsVisible & setIsPrerender.
        (WebCore::Page::isVisible):
            - isOnscreen -> isVisible.

2014-01-02  Oliver Hunt  <oliver@apple.com>

        Update bindings test results

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by Antti Koivisto.

        Update the bindings code generation and custom objects
        to the new function signatures

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2014-01-02  Simon Fraser  <simon.fraser@apple.com>

        Add AsyncScrollingCoordinator, which is a base class for threaded and future remote ScrollingCoordinators
        https://bugs.webkit.org/show_bug.cgi?id=126389

        Reviewed by Tim Horton.

        Add AsyncScrollingCoordinator, a ScrollingCoordinator that knows about ScrollingStateTrees
        and ScrollingTrees, but leaves it up to subclasses to decide when and how to commit.

        * WebCore.xcodeproj/project.pbxproj: Added AsyncScrollingCoordinator.*
        * page/scrolling/AsyncScrollingCoordinator.cpp: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.mm.
        (WebCore::AsyncScrollingCoordinator::AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::~AsyncScrollingCoordinator):
        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::requestScrollPositionUpdate):
        (WebCore::AsyncScrollingCoordinator::scrollableAreaScrollbarLayerDidChange):
        (WebCore::AsyncScrollingCoordinator::attachToStateTree):
        (WebCore::AsyncScrollingCoordinator::detachFromStateTree):
        (WebCore::AsyncScrollingCoordinator::clearStateTree):
        (WebCore::AsyncScrollingCoordinator::syncChildPositions):
        (WebCore::AsyncScrollingCoordinator::ensureRootStateNodeForFrameView):
        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
        (WebCore::AsyncScrollingCoordinator::setScrollLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setCounterScrollingLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setHeaderLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setFooterLayerForNode):
        (WebCore::AsyncScrollingCoordinator::setNonFastScrollableRegionForNode):
        (WebCore::AsyncScrollingCoordinator::setWheelEventHandlerCountForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollBehaviorForFixedElementsForNode):
        (WebCore::AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode):
        (WebCore::AsyncScrollingCoordinator::setSynchronousScrollingReasons):
        (WebCore::AsyncScrollingCoordinator::updateMainFrameScrollLayerPosition):
        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
        (WebCore::AsyncScrollingCoordinator::isRubberBandInProgress):
        (WebCore::AsyncScrollingCoordinator::setScrollPinningBehavior):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTreeAsText):
        * page/scrolling/AsyncScrollingCoordinator.h: Copied from Source/WebCore/page/scrolling/mac/ScrollingCoordinatorMac.h.
        (WebCore::AsyncScrollingCoordinator::scrollingTree):
        (WebCore::AsyncScrollingCoordinator::setScrollingTree):
        (WebCore::AsyncScrollingCoordinator::scrollingStateTree):
        (WebCore::AsyncScrollingCoordinator::releaseScrollingTree):
        * page/scrolling/ScrollingCoordinator.h: Add casting support.
        (WebCore::ScrollingCoordinator::isAsyncScrollingCoordinator):
        * page/scrolling/ThreadedScrollingTree.h: commitNewTreeState() needs to be public.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Lots of code moved to AsyncScrollingCoordinator.
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::~ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::pageDestroyed):
        (WebCore::ScrollingCoordinatorMac::commitTreeStateIfNeeded):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):
        (WebCore::ScrollingCoordinatorMac::scheduleTreeStateCommit):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        (WebCore::ScrollingCoordinatorMac::updateTiledScrollingIndicator):

2014-01-02  Andreas Kling  <akling@apple.com>

        Simplify the insides of DocumentSharedObjectPool and reduce memory usage.

        Merging Blink r164152 by Elliott Sprehn.

        Instead of storing an OwnPtr to an object that has a pointer to the
        ShareableElementData as well as a pointer into the ShareableElementData
        and the length we can just store a RefPtr to the SharableElementData.

        This also reduces the memory usage of the pool by 2 pointers per entry.

        * dom/DocumentSharedObjectPool.h:
        * dom/DocumentSharedObjectPool.cpp:
        (WebCore::attributeHash):
        (WebCore::hasSameAttributes):
        (WebCore::DocumentSharedObjectPool::cachedShareableElementDataWithAttributes):

2014-01-02  Dirk Schulze  <krit@webkit.org>

        Support <box> values computed style for 'clip-path' property
        https://bugs.webkit.org/show_bug.cgi?id=126148

        Reviewed by Simon Fraser.

        Calculate computed style for 'clip-path' property.

        Updated tests to check for computed style.

        * css/BasicShapeFunctions.cpp: Add box value bounding-box.
        (WebCore::valueForBox):
        (WebCore::boxForValue):
        * css/CSSComputedStyleDeclaration.cpp: Return the computed style
            for 'clip-path'.
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/DeprecatedStyleBuilder.cpp: Create CSSValueLists for 'clip-th'.
        (WebCore::ApplyPropertyClipPath::applyValue):
        * rendering/ClipPathOperation.h: Add bounding-box value.
        (WebCore::ShapeClipPathOperation::pathForReferenceRect):
        (WebCore::ShapeClipPathOperation::setReferenceBox):
        (WebCore::ShapeClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::create):
        (WebCore::BoxClipPathOperation::pathForReferenceRect):
        (WebCore::BoxClipPathOperation::referenceBox):
        (WebCore::BoxClipPathOperation::BoxClipPathOperation):
        * rendering/shapes/ShapeInfo.h: Add bounding-box value.
        (WebCore::ShapeInfo::setShapeSize):
        (WebCore::ShapeInfo::logicalTopOffset):
        (WebCore::ShapeInfo::logicalLeftOffset):
        * rendering/style/BasicShapes.cpp: Add bounding-box value.
        (WebCore::BasicShape::referenceBoxSize):
        * rendering/style/BasicShapes.h:

2014-01-02  Antti Koivisto  <antti@apple.com>

        Always resolve style from root
        https://bugs.webkit.org/show_bug.cgi?id=126380

        Reviewed by Andreas Kling.
        
        Forced style resolve that does not start from the root is never really correct. 
        Remove the few remaining instances.

        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::setResetStyleInheritance):
        
            Update style asynchronously.

        * dom/ShadowRoot.h:
        * dom/Text.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createElementRenderer):
        (WebCore::HTMLPlugInImageElement::documentWillSuspendForPageCache):
        (WebCore::HTMLPlugInImageElement::documentDidResumeFromPageCache):
        
            Delete the render tree synchronously on suspend and rebuild it asynchronously on resume.
            No need for m_customStyleForPageCache hack.

        * html/HTMLPlugInImageElement.h:
        
            Remove m_customStyleForPageCache.

        * style/StyleResolveTree.cpp:
        * style/StyleResolveTree.h:
        
            Remove Element version of resolveTree from the interface.

        * svg/SVGUseElement.h:

2014-01-02  Antti Koivisto  <antti@apple.com>

        Remove PlaceholderDocument
        https://bugs.webkit.org/show_bug.cgi?id=126382

        Reviewed by Andreas Kling.

        Remove PlaceholderDocument class and replace it with a bit in Document.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createRenderTree):
        * dom/Document.h:
        
            Also make Synthesized a construction flag instead of a boolean parameter.

        (WebCore::Document::createNonRenderedPlaceholder):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        (WebCore::HTMLDocument::createSynthesizedDocument):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        * loader/PlaceholderDocument.cpp: Removed.
        * loader/PlaceholderDocument.h: Removed.
        * pdf/ios/PDFDocument.h:
        (WebCore::PDFDocument::PDFDocument):

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove public attachRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=126368

        Reviewed by Andreas Kling.

        Remove the remaining explicit render tree construction.

        * dom/Document.cpp:
        (WebCore::Document::createRenderTree):
        
           Use recalcStyle() instead of calling attachRenderTree directly.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addText):
        
            Remove forgotten attachTextRenderer.

        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::InsertionPoint):
        
            Remove willAttachRenderers/didAttachRenderers hack.

        * html/shadow/InsertionPoint.h:
        (WebCore::toInsertionPoint):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        
            Seriously, nothing to do here.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachDistributedChildren):
        (WebCore::Style::attachChildren):
        (WebCore::Style::detachDistributedChildren):
        (WebCore::Style::detachChildren):
        
            Making attaching and detaching distributed insertion point children part of ResolveTree internals.

        * style/StyleResolveTree.h:
        
            Remove interfaces with no clients.

2014-01-01  Seokju Kwon  <seokju@webkit.org>

        Remove stale ScriptProfiler methods
        https://bugs.webkit.org/show_bug.cgi?id=126373

        Reviewed by Darin Adler.

        No new tests, No change behavior. 

        * bindings/js/ScriptProfiler.h: Remove dead code.

2014-01-01  Andreas Kling  <akling@apple.com>

        Remove ChromeClient::fullScreenRendererChanged().
        <https://webkit.org/b/126370>

        This hook was added in r75277 to notify WebFullScreenController when
        the full screen renderer changed. In r110216 the code was refactored,
        making this notification unnecessary.

        Reviewed by Antti Koivisto.

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Fix the build by exposing some more scrolling state node headers
        as Private in WebCore.framework.

        * WebCore.xcodeproj/project.pbxproj:

2014-01-01  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Unreviewed build fix after r160903 when ACCESSIBILITY is disabled

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::children):

2014-01-01  Andreas Kling  <akling@apple.com>

        RenderScrollbar: Map of scrollbar parts should use RenderPtr.
        <https://webkit.org/b/126367>

        Turn RenderScrollbar::m_parts into HashMap of RenderPtrs. This makes
        renderer destruction automatic and lets us remove some code.

        Reviewed by Antti Koivisto.

        * rendering/RenderPtr.h:

            Add HashTraits for RenderPtr so we can use them as values in
            WTF hash tables.

        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::~RenderScrollbar):
        (WebCore::RenderScrollbar::setParent):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::updateScrollbarPart):

            Remove now-unneeded kludges of logic to manually delete scrollbar
            part renderers in various scenarios.

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove reattachRenderTree
        https://bugs.webkit.org/show_bug.cgi?id=126366

        Reviewed by Andreas Kling.

        Remove the last remaining client.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        
            Reconstruct render tree asynchronously.

        (WebCore::HTMLSelectElement::scrollToSelection):
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer):
        (WebCore::HTMLSelectElement::selectOption):
        
            It is not safe to cast the renderer based on usesMenuList test. Switch to RenderObject::isMenuList test.

        (WebCore::HTMLSelectElement::parseMultipleAttribute):
        
            Reconstruct render tree asynchronously.

        (WebCore::HTMLSelectElement::platformHandleKeydownEvent):
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler):
        (WebCore::HTMLSelectElement::defaultEventHandler):
        * style/StyleResolveTree.cpp:
        * style/StyleResolveTree.h:
        
            Remove the function.

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Create a ThreadedScrollingTree subclass of ScrollingTree, and push all knowledge of the scrolling thread into it
        https://bugs.webkit.org/show_bug.cgi?id=126362

        Reviewed by Sam Weinig.

        Eventually we'll have a ScrollingTree in situations where there is no scrolling
        thread, so make the ScrollingTree base class thread-agnostic (but threadsafe),
        and subclass it in ThreadedScrollingTree for scrolling-thread-specific functionality.
        
        The ScrollingTree base class also no longer needs to know about the
        ScrollingCoordinator.

        ScrollingCoordinatorMac creates a ThreadedScrollingTree.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Add ThreadedScrollingTree.*
        Make some headers Private that we'll need in WebKit2 soon.
        * page/scrolling/ScrollingStateTree.h: Drive-by cleanup: clone() was unimplemented.
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::ScrollingTree):
        (WebCore::ScrollingTree::~ScrollingTree):
        (WebCore::ScrollingTree::shouldHandleWheelEventSynchronously): Wrap up some logic that
        involves taking the mutex, so ThreadedScrollingTree can conveniently call it.
        (WebCore::ScrollingTree::handleWheelEvent):
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::setMainFrameScrollPosition):
        (WebCore::ScrollingTree::isHandlingProgrammaticScroll):
        * page/scrolling/ScrollingTree.h:
        (WebCore::ScrollingTree::isThreadedScrollingTree):
        (WebCore::ScrollingTree::invalidate):
        * page/scrolling/ThreadedScrollingTree.cpp: Added.
        (WebCore::ThreadedScrollingTree::create):
        (WebCore::ThreadedScrollingTree::ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::~ThreadedScrollingTree):
        (WebCore::ThreadedScrollingTree::tryToHandleWheelEvent):
        (WebCore::ThreadedScrollingTree::handleWheelEvent):
        (WebCore::derefScrollingCoordinator):
        (WebCore::ThreadedScrollingTree::invalidate):
        (WebCore::ThreadedScrollingTree::commitNewTreeState):
        (WebCore::ThreadedScrollingTree::updateMainFrameScrollPosition):
        (WebCore::ThreadedScrollingTree::handleWheelEventPhase):
        * page/scrolling/ThreadedScrollingTree.h: Added.
        (WebCore::ThreadedScrollingTree::isThreadedScrollingTree):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::ScrollingCoordinatorMac):
        (WebCore::ScrollingCoordinatorMac::handleWheelEvent):

2014-01-01  Andreas Kling  <akling@apple.com>

        FrameView: Store scroll corner renderer in a RenderPtr.
        <https://webkit.org/b/126364>

        Make FrameView::m_scrollCorner a RenderPtr<RenderScrollbarPart> and
        remove two manual destroy() calls.

        Reviewed by Antti Koivisto.

2014-01-01  Antti Koivisto  <antti@apple.com>

        Remove elementChildren/elementDescendants shorthands
        https://bugs.webkit.org/show_bug.cgi?id=126363

        Reviewed by Anders Carlsson.

        Just use childrenOfType<Element>/descendantsOfType<Element> instead. They are not that much longer
        and consistency is valuable.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canvasHasFallbackContent):
        (WebCore::siblingWithAriaRole):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::invalidateStyle):
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::namedItem):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        (WebCore::Document::childrenChanged):
        * dom/Element.cpp:
        (WebCore::Element::resetComputedStyle):
        * dom/ElementChildIterator.h:
        * dom/ElementDescendantIterator.h:
        * dom/SelectorQuery.cpp:
        (WebCore::elementsForLocalName):
        (WebCore::anyElement):
        (WebCore::SelectorDataList::executeSingleTagNameSelectorData):
        (WebCore::SelectorDataList::executeSingleClassNameSelectorData):
        (WebCore::SelectorDataList::executeSingleSelectorData):
        (WebCore::SelectorDataList::executeSingleMultiSelectorData):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::cleanupUnstyledAppleStyleSpans):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::removeHeadContents):
        * editing/markup.cpp:
        (WebCore::completeURLs):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::refreshElementsIfNeeded):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::containsJavaApplet):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        * rendering/RenderChildIterator.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGUseElement.cpp:
        (WebCore::subtreeContainsDisallowedElement):
        (WebCore::removeDisallowedElementsFromSubtree):

2014-01-01  Antti Koivisto  <antti@apple.com>

        Do less synchronous render tree construction
        https://bugs.webkit.org/show_bug.cgi?id=126359

        Reviewed by Anders Carlsson.

        Remove some now-unnecessary attachRenderTree calls.

        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::parseAttribute):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::willRecalcStyle):
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree):
        (WebCore::HTMLPlugInImageElement::restartSnapshottedPlugIn):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::finishLine):
        (WebCore::HTMLViewSourceDocument::addBase):
        (WebCore::HTMLViewSourceDocument::addLink):
        * xml/XMLErrors.cpp:
        (WebCore::XMLErrors::insertErrorMessageBlock):

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Updating the scrolling tree should use references to state nodes
        https://bugs.webkit.org/show_bug.cgi?id=126360

        Reviewed by Anders Carlsson.

        Change functions related to ScrollingTreeNode updating to take
        const references to state nodes rather than pointers.

        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::hasChangedProperty):
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::commitNewTreeState):
        (WebCore::ScrollingTree::updateTreeFromStateNode): The node can be nil so
        this continues to take a pointer.
        (WebCore::ScrollingTree::removeDestroyedNodes):
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.h:
        (WebCore::ScrollingTreeNode::updateAfterChildren):
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        (WebCore::ScrollingTreeFixedNode::updateBeforeChildren):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::updateAfterChildren):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        (WebCore::ScrollingTreeStickyNode::updateBeforeChildren):

2014-01-01  Simon Fraser  <simon.fraser@apple.com>

        Add a typedef for PlatformLayerID on GraphicsLayer, and migrate RemoteLayerTreeTransaction to use it
        https://bugs.webkit.org/show_bug.cgi?id=126346

        Reviewed by Tim Horton.

        Remote scrolling tree code is soon going to use RemoteLayerTreeTransaction::LayerID,
        so it makes more sense to put this layerID type on GraphicsLayer as
        GraphicsLayer::PlatformLayerID.
        
        Also add some type cast macros for PlatformCALayer and subclasses, and use them
        where appropriate.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::isPlatformCALayerMac):
        (WebCore::PlatformCALayer::isPlatformCALayerRemote):
        (WebCore::PlatformCALayer::PlatformCALayer):
        * platform/graphics/ca/mac/PlatformCALayerMac.h:

2013-12-31  Simon Fraser  <simon.fraser@apple.com>

        ScrollingStateNodes should have a reference to the ScrollingStateTree
        https://bugs.webkit.org/show_bug.cgi?id=126348

        Reviewed by Sam Weinig.

        Make ScrollingStateNodes always belong to a ScrollingStateTree, and thus
        have a reference to the tree rather than a pointer. When cloning nodes,
        they are adopted by a new ScrollingStateTree, which adds them to its
        node map (which didn't happen before).
        
        In subclasses access the ScrollingStateTree through a member function.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::create):
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        (WebCore::ScrollingStateFixedNode::clone):
        (WebCore::ScrollingStateFixedNode::updateConstraints):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        (WebCore::ScrollingStateNode::cloneAndReset):
        (WebCore::ScrollingStateNode::cloneAndResetChildren):
        (WebCore::ScrollingStateNode::willBeRemovedFromStateTree):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::scrollingStateTree):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::create):
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::clone):
        (WebCore::ScrollingStateScrollingNode::setViewportRect):
        (WebCore::ScrollingStateScrollingNode::setTotalContentsSize):
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin):
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters):
        (WebCore::ScrollingStateScrollingNode::setFrameScaleFactor):
        (WebCore::ScrollingStateScrollingNode::setNonFastScrollableRegion):
        (WebCore::ScrollingStateScrollingNode::setWheelEventHandlerCount):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        (WebCore::ScrollingStateScrollingNode::setHeaderHeight):
        (WebCore::ScrollingStateScrollingNode::setFooterHeight):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::create):
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        (WebCore::ScrollingStateStickyNode::clone):
        (WebCore::ScrollingStateStickyNode::updateConstraints):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        (WebCore::ScrollingStateTree::attachNode):
        (WebCore::ScrollingStateTree::commit):
        (WebCore::ScrollingStateTree::addNode):
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        (WebCore::ScrollingStateNode::setScrollLayer):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2013-12-31  Simon Fraser  <simon.fraser@apple.com>

        Give ScrollingStateNodes a nodeType()
        https://bugs.webkit.org/show_bug.cgi?id=126347

        Reviewed by Tim Horton.

        When we start serializing ScrollingStateNodes to send to the UI process,
        it's more convenient if they have a nodeType member rather than virtual functions,
        so give them one, and fix the casting macros to use it. This allows us to use
        a switch() on node creation, so the compiler will tell us if we forgot to create
        a node type.

        * page/scrolling/ScrollingStateFixedNode.cpp:
        (WebCore::ScrollingStateFixedNode::ScrollingStateFixedNode):
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::ScrollingStateNode):
        * page/scrolling/ScrollingStateNode.h: const ScrollingNodeType field
        (can't be modified after construction), and move the m_scrollingStateTree
        member after it (the awkward protected:/private: will be cleaned up in a later patch).
        (WebCore::ScrollingStateNode::nodeType):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingStateStickyNode.cpp:
        (WebCore::ScrollingStateStickyNode::ScrollingStateStickyNode):
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):

2013-12-31  Andreas Kling  <akling@apple.com>

        Out-of-line RenderStyle substructure copying helpers.
        <https://webkit.org/b/126340>

        This shrinks the .access() calls by moving memory allocation logic
        out-of-line, though I'm really doing this to make Instruments.app
        allocations output more readable.

        Writes to e.g 'font' or 'color' will now be grouped under a single
        StyleInheritedData::copy() call instead of being spread out over
        setFontDescription(), setLineHeight(), setColor(), etc.

        Reviewed by Anders Carlsson.

2013-12-31  Andreas Kling  <akling@apple.com>

        RenderListItem should store its marker in a RenderPtr.
        <https://webkit.org/b/126298>

        Make RenderListItem::m_marker a RenderPtr<RenderListMarker> and
        remove two manual destroy() calls. Tweaked code to reduce nesting.

        Reviewed by Anders Carlsson.

2013-12-31  Andreas Kling  <akling@apple.com>

        Element's renderer factory should return RenderPtrs.
        <https://webkit.org/b/126318>

        Rename Element::createRenderer() to createElementRenderer() and have
        it return RenderPtr<RenderElement>. Propagate signature until it
        builds again.

        We leakPtr() the renderer at two call sites when handing things over
        to raw pointer API. This'll get tidied up in subsequent patches.

        Reviewed by Sam Weinig.

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Return early in ResourceHandle::receivedCancellation if the load has already cancelled
        https://bugs.webkit.org/show_bug.cgi?id=126287

        Reviewed by Martin Robinson.

        This situation can happen when using the network process, because
        the ReceivedCancellation message can be received when the resource
        loader has already been removed, but the authentication challenge
        still has a reference to the ResourceHandleClient.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::receivedCancellation):

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] The initiating page is lost after a redirection
        https://bugs.webkit.org/show_bug.cgi?id=126293

        Reviewed by Martin Robinson.

        The initiating page id is attached to the initial soup request
        object, but not to the one created after a redirection.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::createSoupRequestAndMessageForHandle): Call
        setSoupRequestInitiatingPageIDFromNetworkingContext() here if the
        soup request is created successfully.
        (WebCore::ResourceHandle::start): Remove the call to
        setSoupRequestInitiatingPageIDFromNetworkingContext().

2013-12-31  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] Implement ResourceHandle::continueWillSendRequest()
        https://bugs.webkit.org/show_bug.cgi?id=126291

        Reviewed by Martin Robinson.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::continueAfterWillSendRequest): Helper function that
        continues with the load after willSendRequest has been called.
        (WebCore::doRedirect): Call continueAfterWillSendRequest() when
        client doesn't use async callbacks.
        (WebCore::ResourceHandle::continueWillSendRequest): Call
        continueAfterWillSendRequest().

2013-12-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] willSendRequest doesn't work after a redirect
        https://bugs.webkit.org/show_bug.cgi?id=126290

        Reviewed by Martin Robinson.

        The problem is that we are creating the new soup request for the
        redirect before calling ResourceHandleClient::willSendRequest() so
        that any change made to the request by the client is ignored.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Create the new soup request and soup
        message for the redirect after calling willSendRequest() on the
        client.

2013-12-30  Andreas Kling  <akling@apple.com>

        InputType should return input renderers wrapped in RenderPtr.
        <https://webkit.org/b/126307>

        Rename InputType::createRenderer() to createInputRenderer() and
        make it return RenderPtr<RenderElement>. Also made it non-const.

        Reviewed by Anders Carlsson.

2013-12-30  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Cleanup static_cast<HTMLFormElement*> by using toHTMLFormElement()
        https://bugs.webkit.org/show_bug.cgi?id=126309

        Reviewed by Andreas Kling.

        To detect bad type casts, it would be good to use toHTMLFormElement() instead of
        using manual type cast. Additionally FORM_ASSOCIATED_ELEMENT_TYPE_CASTS is introduced newly
        to do it.

        No new tests, no behavior changes.

        * html/FormAssociatedElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        (WebCore::HTMLFormElement::documentDidResumeFromPageCache):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):

2013-12-30  Anders Carlsson  <andersca@apple.com>

        Replace yield() and pauseBriefly() with std::this_thread::yield()
        https://bugs.webkit.org/show_bug.cgi?id=126105

        Reviewed by Sam Weinig.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-30  Andreas Kling  <akling@apple.com>

        Rename createRenderObject() to createRenderer().

        Somewhat rubber-stamped by Antti Koivisto.

2013-12-30  Andreas Kling  <akling@apple.com>

        Document should store its RenderView in a RenderPtr.
        <https://webkit.org/b/126299>

        Make Document::m_renderView a RenderPtr<RenderView> and remove one
        manual destroy() call. Also removed the setRenderView() helper and
        inlined it at the two call sites.

        Reviewed by Antti Koivisto.

2013-12-30  Martin Robinson  <mrobinson@igalia.com>

        [CMake] [GTK] Add support for GObject introspection
        https://bugs.webkit.org/show_bug.cgi?id=126162

        Reviewed by Daniel Bates.

        * PlatformGTK.cmake: Build a list of WebKitDOM headers and expose it to the
        parent scope of the build.

2013-12-30  Andreas Kling  <akling@apple.com>

        Text::createTextRenderer() should return a RenderPtr.
        <https://webkit.org/b/126292>

        Make createTextRenderer() return a RenderPtr and remove one manual
        destroy() call. Also, since it should always return a valid object,
        I turned a null check into an assertion instead.

        Reviewed by Antti Koivisto.

2013-12-30  Antti Koivisto  <antti@apple.com>

        Remove attachChild
        https://bugs.webkit.org/show_bug.cgi?id=126288

        Reviewed by Andreas Kling.

        * dom/ContainerNode.cpp:
        (WebCore::destroyRenderTreeIfNeeded):
        
            Rename detachChild and move the tests here.

        (WebCore::ContainerNode::takeAllChildrenFrom):
        
            No need to call attachRenderTree explicitly anymore.

        (WebCore::ContainerNode::removeBetween):

2013-12-29  Andreas Kling  <akling@apple.com>

        RenderLayer: Store corner and resizer renderers in RenderPtrs.
        <https://webkit.org/b/126274>

        Turn RenderLayer::m_scrollCorner and m_resizer into RenderPtrs.
        Removed manual destroy() calls as appropriate. Also tweaked some
        code to reduce nesting.

        Reviewed by Anders Carlsson.

2013-12-30  Antti Koivisto  <antti@apple.com>

        XML document builder should create render tree asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=126285

        Reviewed by Andreas Kling.
        
        Stop creating renderers explicitly. 
        Fix SVG <use> element to not rely on parse time render tree construction.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):
        
            Remove renderer check, we may not have created the render tree yet.

        (WebCore::SVGUseElement::willAttachRenderers):
        
            Switch to willAttachRenderers from willRecalcStyle. The latter is only called as long as style
            recalc doesn't start creating new renderers.

        (WebCore::SVGUseElement::invalidateShadowTree):
        
            Remove renderer check, we may not have created the render tree yet. 
            Invalidate with ReconstructRenderTree so willAttachRenderers will always get called.

        * svg/SVGUseElement.h:
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::exitText):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::cdataBlock):
        
            Remove explicit call to attachRenderTree. The render tree will be created lazily.

2013-12-29  Joone Hur  <joone.hur@intel.com>

        Reverted r156742. The same fix was reverted from Blink due to heap-use-after-free on ClusterFuzz.
        https://bugs.webkit.org/show_bug.cgi?id=126275

        https://codereview.chromium.org/102993011

        Reviewed by Darin Adler.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):

2013-12-29  ChangSeok Oh  <changseok.oh@collabora.com>

        Remove unused functions in GraphicsContext3D.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126265

        Reviewed by Andreas Kling.

        platformGraphicsContext3D, platformTexture and platformLayer in GC3D.cpp
        seem not used by any ports.

        No new tests, no functionality changed.

        * platform/graphics/GraphicsContext3D.cpp:

2013-12-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build error on 64bit debug build.
        https://bugs.webkit.org/show_bug.cgi?id=126248

        r161076 used ‘%lli’(for long long int) for int64_t(aka long int).
        However, in a 64bit compile, int64_t is 'long int', not a 'long long int'.
        To support 32bit and 64bit, we use static_cast<long long>.

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit):

2013-12-29  Antti Koivisto  <antti@apple.com>

        Remove some accidental commented out code.

        * testing/Internals.cpp:
        (WebCore::Internals::mallocStatistics):

2013-12-29  Antti Koivisto  <antti@apple.com>

        Fix build.

        * xml/parser/XMLDocumentParser.cpp:

2013-12-29  Antti Koivisto  <antti@apple.com>

        Remove Node::attached()
        https://bugs.webkit.org/show_bug.cgi?id=126276

        Reviewed by Sam Weinig.

        Node::attached() is poorly defined. Replace it with renderer() and inRenderedDocument() tests as appropriate.
        
        Also remove some unnecessary explicit attachRenderTree/detachRenderTree calls from the tree builders.

2013-12-29  Andreas Kling  <akling@apple.com>

        RenderLayer: Store reflection renderer in a RenderPtr.
        <https://webkit.org/b/126273>

        Reviewed by Anders Carlsson.

        * rendering/RenderLayer.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::calculateClipRects):

            Turn RenderLayer::m_reflection into a RenderPtr<RenderReplica>
            instead of a raw pointer.

        * WebCore.xcodeproj/project.pbxproj:

            Add RenderPtr.h to private headers.

2013-12-28  Andreas Kling  <akling@apple.com>

        Add an owning smart pointer for RenderObjects and start using it.
        <https://webkit.org/b/126251>

        This patch adds a RenderPtr pointer, essentially an OwnPtr for
        RenderObjects. The difference is that RenderPtr destroys the object
        by calling destroy() on it.

        This is necessary to implement the willBeDestroyed() mechanism in
        RenderObject that notifies renderers just before they are about to
        be deleted, while they can still do tree traversal, etc.

        I also added a make_unique-alike helper so you can write:

            auto renderer = createRenderObject<RenderImage>(...);

        Put it all to use by making ContentData::createRenderer() return
        RenderPtr<RenderObject> instead of raw RenderObject*.

        Reviewed by Antti Koivisto.

2013-12-28  Benjamin Poulain  <benjamin@webkit.org>

        Add a missing include path for GTK
        https://bugs.webkit.org/show_bug.cgi?id=126257

        Reviewed by Philippe Normand.

        * GNUmakefile.am:

2013-12-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r160733.

        * bindings/gobject/webkitdom.symbols:

2013-12-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Downloads are broken with the network process enabled
        https://bugs.webkit.org/show_bug.cgi?id=126131

        Reviewed by Martin Robinson.

        The problem is that the network process crashes when trying to
        convert the handle to a download, because at that point the
        download has finished and the handle is NULL. This happens because
        we are not implementing ResourceHandle::continueDidReceiveResponse().

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::nextMultipartResponsePartCallback): Call
        continueAfterDidReceiveResponse() when not using async callbacks.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::continueAfterDidReceiveResponse): Helper function that
        continues the load after didReceiveResponse.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Call
        continueAfterDidReceiveResponse().

2013-12-27  Daniel Bates  <dabates@apple.com>

        Another attempt to fix the Windows build after <http://trac.webkit.org/changeset/161106>
        (https://bugs.webkit.org/show_bug.cgi?id=126180)

        * WebCore.vcxproj/WebCore.vcxproj.filters: Add files platform/audio/{AudioSession, AudioSessionListener}.h
        * WebCore.vcxproj/WebCoreCommon.props: Add directory WebCore/platform/audio to the list of
        include directories.

2013-12-27  Daniel Bates  <dabates@apple.com>

        Attempt to fix the Windows build after <http://trac.webkit.org/changeset/161106>
        (https://bugs.webkit.org/show_bug.cgi?id=126180)

        Add files platform/audio/AudioSession.{cpp, h} and platform/audio/AudioSessionListener.h
        to the Visual Studio project. Note, the contents of these files are guarded by USE(AUDIO_SESSION),
        which is only enabled on Mac and iOS at the time of writing.

        I thought to try this approach to fix the build so as to avoid adding an extraneous
        USE(AUDIO_SESSION)-guard around the #include "AudioSession.h" in Settings.cpp since
        the contents of the file AudioSession.h is guarded by USE(AUDIO_SESSION).

        * WebCore.vcxproj/WebCore.vcxproj:

2013-12-27  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/page changes
        https://bugs.webkit.org/show_bug.cgi?id=126180

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        (WebCore::EventNames::isGestureEventType): Added.
        * page/AlternativeTextClient.h: Do not define WTF_USE_DICTATION_ALTERNATIVES when building for iOS.
        * page/Chrome.cpp:
        (WebCore::Chrome::Chrome):
        (WebCore::Chrome::dispatchViewportPropertiesDidChange): Added; guarded by PLATFORM(IOS).
        (WebCore::Chrome::setCursor): Make this an empty function when building for iOS.
        (WebCore::Chrome::setCursorHiddenUntilMouseMoves): Ditto.
        (WebCore::Chrome::didReceiveDocType): Added; iOS-specific.
        * page/Chrome.h:
        (WebCore::Chrome::setDispatchViewportDataDidChangeSuppressed): Added; guarded by PLATFORM(IOS).
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didFlushCompositingLayers): Added; guarded by PLATFORM(IOS).
        (WebCore::ChromeClient::fetchCustomFixedPositionLayoutRect): Added; guarded by PLATFORM(IOS).
        (WebCore::ChromeClient::updateViewportConstrainedLayers): Added; guarded by PLATFORM(IOS).
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install): Added iOS-specific code.
        (WebCore::DOMTimer::fired): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow): Ditto.
        (WebCore::DOMWindow::innerHeight): Ditto.
        (WebCore::DOMWindow::innerWidth): Ditto.
        (WebCore::DOMWindow::scrollX): Ditto.
        (WebCore::DOMWindow::scrollY): Ditto.
        (WebCore::DOMWindow::scrollBy): Ditto.
        (WebCore::DOMWindow::scrollTo): Ditto.
        (WebCore::DOMWindow::clearTimeout): Ditto.
        (WebCore::DOMWindow::addEventListener): Ditto.
        (WebCore::DOMWindow::incrementScrollEventListenersCount): Added; guarded by PLATFORM(IOS).
        (WebCore::DOMWindow::decrementScrollEventListenersCount): Added; guarded by PLATFORM(IOS).
        (WebCore::DOMWindow::resetAllGeolocationPermission): Added; Also added FIXME comment.
        (WebCore::DOMWindow::removeEventListener): Added iOS-specific code.
        (WebCore::DOMWindow::dispatchEvent): Modified to prevent dispatching duplicate pageshow and pagehide
        events per <http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#event-pageshow>.
        (WebCore::DOMWindow::removeAllEventListeners): Added iOS-specific code.
        * page/DOMWindow.h:
        * page/DOMWindow.idl: Added IOS_GESTURE_EVENTS-guarded attributes: ongesture{change, end, start}. Also
        added IOS_TOUCH_EVENTS-guarded attributes: {Touch, TouchList}Constructor.
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Added iOS-specific code.
        (WebCore::EventHandler::clear): Ditto.
        (WebCore::EventHandler::startPanScrolling): Make this an empty function when building for iOS.
        (WebCore::EventHandler::handleMousePressEvent): Modified to invalidate a click when the clicked node is
        null. Also, opt out of code for updating the scrollbars as UIKit manages scrollbars on iOS.
        (WebCore::EventHandler::handleMouseMoveEvent): Opt of code for updating the scrollbars and cursor when building on iOS.
        (WebCore::hitTestResultInFrame): Made this a file-local static function since it's only used in EventHandler.cpp.
        (WebCore::EventHandler::dispatchSyntheticTouchEventIfEnabled): Added iOS-specific code.
        * page/EventHandler.h:
        * page/FocusController.h:
        * page/Frame.cpp:
        (WebCore::Frame::Frame): Added iOS-specific code.
        (WebCore::Frame::scrollOverflowLayer): Added; iOS-specific.
        (WebCore::Frame::overflowAutoScrollTimerFired): Added; iOS-specific.
        (WebCore::Frame::startOverflowAutoScroll): Added; iOS-specific.
        (WebCore::Frame::checkOverflowScroll): Added; iOS-specific.
        (WebCore::Frame::willDetachPage): Added iOS-specific code.
        (WebCore::Frame::createView): Ditto.
        (WebCore::Frame::setSelectionChangeCallbacksDisabled): Added; iOS-specific.
        (WebCore::Frame::selectionChangeCallbacksDisabled): Added; iOS-specific.
        * page/Frame.h:
        (WebCore::Frame::timersPaused): Added; guarded by PLATFORM(IOS).
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView): Added iOS-specific code.
        (WebCore::FrameView::clear): Ditto.
        (WebCore::FrameView::flushCompositingStateForThisFrame): Ditto.
        (WebCore::FrameView::graphicsLayerForPlatformWidget): Added.
        (WebCore::FrameView::scheduleLayerFlushAllowingThrottling): Added.
        (WebCore::FrameView::layout): Added iOS-specific code.
        (WebCore::countRenderedCharactersInRenderObjectWithThreshold): Added; helper function used by FrameView::renderedCharactersExceed().
        Also added FIXME comment.
        (WebCore::FrameView::renderedCharactersExceed): Added.
        (WebCore::FrameView::visibleContentsResized): Added iOS-specific code.
        (WebCore::FrameView::adjustTiledBackingCoverage): Ditto.
        (WebCore::FrameView::performPostLayoutTasks): Ditto.
        (WebCore::FrameView::sendResizeEventIfNeeded): Ditto.
        (WebCore::FrameView::paintContents): Added iOS-specific code. Also added FIXME comments.
        (WebCore::FrameView::setUseCustomFixedPositionLayoutRect): Added; iOS-specific.
        (WebCore::FrameView::setCustomFixedPositionLayoutRect): Added; iOS-specific.
        (WebCore::FrameView::updateFixedPositionLayoutRect): Added; iOS-specific.
        * page/FrameView.h:
        * page/Navigator.cpp:
        (WebCore::Navigator::standalone): Added; iOS-specific.
        * page/Navigator.h:
        * page/Navigator.idl: Added WTF_PLATFORM_IOS-guarded attribute: standalone. Also added FIXME comment.
        * page/NavigatorBase.cpp:
        (WebCore::NavigatorBase::platform): Added iOS-specific code.
        * page/Page.h:
        (WebCore::Page::hasCustomHTMLTokenizerTimeDelay): Added; guarded by PLATFORM(IOS). Also added FIXME comment
        to remove this method.
        (WebCore::Page::customHTMLTokenizerTimeDelay): Added; guarded by PLATFORM(IOS). Also added FIXME comment
        to remove this method.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::removeVisitedLink): Added.
        * page/PageGroup.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setScriptEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setStandalone): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAudioSessionCategoryOverride): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::audioSessionCategoryOverride): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setNetworkDataUsageTrackingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::networkDataUsageTrackingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::sharedNetworkInterfaceNameGlobal): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setNetworkInterfaceName): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::networkInterfaceName): Added; guarded by PLATFORM(IOS).
        * page/Settings.h:
        (WebCore::Settings::setMaxParseDuration): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::Settings::maxParseDuration): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::Settings::standalone): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::telephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setMediaDataLoadsAutomatically): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::mediaDataLoadsAutomatically): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setShouldTransformsAffectOverflow): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::shouldTransformsAffectOverflow): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setShouldDispatchJavaScriptWindowOnErrorEvents): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::shouldDispatchJavaScriptWindowOnErrorEvents): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAlwaysUseBaselineOfPrimaryFont): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::alwaysUseBaselineOfPrimaryFont): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::setAlwaysUseAcceleratedOverflowScroll): Added; guarded by PLATFORM(IOS).
        (WebCore::Settings::alwaysUseAcceleratedOverflowScroll): Added; guarded by PLATFORM(IOS).
        * page/Settings.in: Added IOS_AIRPLAY-guarded setting: mediaPlaybackAllowsAirPlay.
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Added iOS-specific code and FIXME comment.
        * page/ios/EventHandlerIOS.mm: Added.
        * page/ios/FrameIOS.mm: Added.
        * page/mac/ChromeMac.mm:
        * page/mac/PageMac.cpp:
        (WebCore::Page::addSchedulePair): Opt out of code when building for iOS.
        (WebCore::Page::removeSchedulePair): Ditto.
        * page/mac/SettingsMac.mm:
        (WebCore::Settings::shouldEnableScreenFontSubstitutionByDefault): Added iOS-specific code.
        * page/mac/WebCoreFrameView.h:

2013-12-27  Gavin Barraclough  <barraclough@apple.com>

        Merge PageVisibilityState & ViewState::IsVisible in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=126214

        Reviewed by Alexey Proskuryakov.

        WebKit2 redundantly tracks the visibility of the view through two mechanisms - the visibility
        state, and the view state. Remove visibility state from the WebKit2 layer. The visibility
        state also tracks the prerender state - so split this out and handle it separately (a change
        we should make in WebCore, too).

        WebCore - changes the API tests exposed a bug, a view should only ever come out of the
        prerender state when it becomes visible - redundant notifications that the view is still
        hidden should be ignored.

        * page/Page.cpp:
        (WebCore::Page::setVisibilityState):
            - ignore visibility state change to hidden, if the current state is prerender.

2013-12-27  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix for r160946.

        Add another file to the Windows InspectorAllInOne.cpp.

        * inspector/InspectorAllInOne.cpp:

2013-12-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161096.
        http://trac.webkit.org/changeset/161096
        https://bugs.webkit.org/show_bug.cgi?id=126256

        Made lots of tests crash (Requested by ap on #webkit).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::willRemoveChildren):
        (WebCore::ContainerNode::appendChild):
        * dom/Document.cpp:
        (WebCore::Document::visibilityStateChanged):
        (WebCore::Document::moveNodeIteratorsToNewDocument):
        (WebCore::Document::updateRangesAfterChildrenChanged):
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        (WebCore::Document::textInserted):
        (WebCore::Document::textRemoved):
        (WebCore::Document::textNodesMerged):
        (WebCore::Document::textNodeSplit):
        (WebCore::Document::documentWillSuspendForPageCache):
        (WebCore::Document::documentDidResumeFromPageCache):
        (WebCore::Document::mediaVolumeDidChange):
        (WebCore::Document::privateBrowsingStateDidChange):
        (WebCore::Document::captionPreferencesChanged):
        (WebCore::Document::validateAutoSizingNodes):
        (WebCore::Document::resetAutoSizingNodes):
        (WebCore::Document::webkitExitFullscreen):
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::disconnect):
        (WebCore::MutationObserver::getObservedNodes):
        (WebCore::MutationObserver::deliver):
        * dom/MutationObserverInterestGroup.cpp:
        (WebCore::MutationObserverInterestGroup::isOldValueRequested):
        (WebCore::MutationObserverInterestGroup::enqueueMutationRecord):
        * dom/MutationObserverRegistration.cpp:
        (WebCore::MutationObserverRegistration::clearTransientRegistrations):
        (WebCore::MutationObserverRegistration::addRegistrationNodesToSet):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::collectMatchingObserversForMutation):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::canSuspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects):
        (WebCore::ScriptExecutionContext::resumeActiveDOMObjects):
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::closeMessagePorts):
        (WebCore::ScriptExecutionContext::adjustMinimumTimerInterval):
        (WebCore::ScriptExecutionContext::didChangeTimerAlignmentInterval):
        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        (WebCore::WebKitNamedFlow::getContent):

2013-12-26  Sam Weinig  <sam@webkit.org>

        Convert some of WebCore/dom over to range-for loops
        https://bugs.webkit.org/show_bug.cgi?id=126250

        Reviewed by Andreas Kling.

        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        * dom/MutationObserver.cpp:
        * dom/MutationObserverInterestGroup.cpp:
        * dom/MutationObserverRegistration.cpp:
        * dom/Node.cpp:
        * dom/NodeRareData.h:
        * dom/ScriptExecutionContext.cpp:
        * dom/WebKitNamedFlow.cpp:

2013-12-26  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Cleanup Source/WebCore/PlatformNix.cmake
        https://bugs.webkit.org/show_bug.cgi?id=126226

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * PlatformNix.cmake:

2013-12-26  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed attempt at Windows build fix.

        I think Window's "AllInOne.cpp" is causing a using namespace JSC
        to cause naming conflicts between Inspector::TypeBuilder::Debugger::types
        and JSC::types. So removing the ambiguity.

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::wrapCallFrames):

2013-12-22  Andreas Kling  <akling@apple.com>

        Make Text::createTextRenderer() take a const RenderStyle&.
        <https://webkit.org/b/126136>

        Nuke a FIXME about constifying a RenderStyle& local.

        Reviewed by Anders Carlsson.

2013-12-22  Andreas Kling  <akling@apple.com>

        Move more inlines from RenderObject to RenderElement.
        <https://webkit.org/b/126134>

        Lift some inline functions that use style() from RenderObject over
        to RenderElement, making them branchless.

        Reviewed by Anders Carlsson.

2013-12-26  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix after r159526.
        isBoxValue is used at out of ENABLE_CSS_SHAPES gaurd. It causes a compile failure.
        So I moved isBoxValue to out side of ENABLE_CSS_SHAPES.

        * css/CSSParser.cpp:

2013-12-25  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Set m_pos as private in InlineIterator, and use getter and setter functions.
        https://bugs.webkit.org/show_bug.cgi?id=125614

        Reviewed by Alexey Proskuryakov.

        InlineIterator has been exported m_pos as public directly though it is member variable.
        This patch set it as private, and add getter/setter functions for it.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::setOffset):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::matchedEndLine):
        (WebCore::LineBreaker::nextSegmentBreak):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/TrailingObjects.cpp:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):

2013-12-25  Kim Byung Jun  <bj1987.kim@samsung.com>

        [EFL] Delete file.edc and file_*.png.
        https://bugs.webkit.org/show_bug.cgi?id=125134

        Reviewed by Gyuyoung Kim.

        File_theme uses button form.

        * platform/efl/DefaultTheme/CMakeLists.txt:
        * platform/efl/DefaultTheme/default.edc:
        * platform/efl/DefaultTheme/widget/file/file.edc: Removed.
        * platform/efl/DefaultTheme/widget/file/file_focus.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_hover.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_normal.png: Removed.
        * platform/efl/DefaultTheme/widget/file/file_press.png: Removed.

2013-12-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Adding createDragImageIconForCachedImageFilename method to DragImageNix
        https://bugs.webkit.org/show_bug.cgi?id=126230

        Reviewed by Daniel Bates.

        Also returning nullptr in other functions that were returning 0 as a pointer.

        * platform/nix/DragImageNix.cpp:
        (WebCore::createDragImageFromImage):
        (WebCore::createDragImageIconForCachedImage):
        (WebCore::createDragImageIconForCachedImageFilename):

2013-12-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [Nix] Fixing DragData::asFragment signature in DragDataNix.cpp
        https://bugs.webkit.org/show_bug.cgi?id=126229

        Reviewed by Daniel Bates.

        * platform/nix/DragDataNix.cpp:
        (WebCore::DragData::asFragment):

2013-12-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r161033 and r161074.
        http://trac.webkit.org/changeset/161033
        http://trac.webkit.org/changeset/161074
        https://bugs.webkit.org/show_bug.cgi?id=126240

        Oliver says that a rollout would be better (Requested by ap on
        #webkit).

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2013-12-25  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Implement version changing
        https://bugs.webkit.org/show_bug.cgi?id=126099

        Reviewed by Sam Weinig.

        No new tests (No change in WebCore behavior).

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::commit): Update some logging.

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform): Move some things that used to be in
          IDBServerConnectionLevelDB::changeDatabaseVersion to this cross-platform location.
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::transaction):

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion): Move the actual updating of the database backend
          metadata to the VersionChangeOperation.

2013-12-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Clean up generated sources directories
        https://bugs.webkit.org/show_bug.cgi?id=126216

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Use the new directory variables.

2013-12-25  Dirk Schulze  <krit@webkit.org>

        Support <box> values parsing on 'clip-path' property
        https://bugs.webkit.org/show_bug.cgi?id=126147

        Reviewed by Ryosuke Niwa.

        Support parsing of the background reference boxes, margin-box and bounding-box.
        A box will be a reference box and define the origin for a basic shape.
        If no basic shape is specified, the box defines the clipping path itself.
        The specification text follows the changes to CSS Shapes now.

        https://dvcs.w3.org/hg/FXTF/raw-file/3f213145303e/css-masking-1/index.html#the-clip-path

        Existing parsing test have been extended to test box values as well.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseClipPath):
        * css/CSSParser.h:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyClipPath::applyValue):

2013-12-25  David Kilzer  <ddkilzer@apple.com>

        [iOS] Upstream WebCore/pdf changes
        http://webkit.org/b/126097

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added files to project.
        * pdf/ios/PDFDocument.cpp: Added.
        (WebCore::PDFDocumentParser::create):
        (WebCore::PDFDocumentParser::document):
        (WebCore::PDFDocumentParser::PDFDocumentParser):
        (WebCore::PDFDocument::createParser):
        * pdf/ios/PDFDocument.h: Added.
        (WebCore::PDFDocument::create):
        (WebCore::PDFDocument::PDFDocument):

2013-12-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160959.
        http://trac.webkit.org/changeset/160959
        https://bugs.webkit.org/show_bug.cgi?id=126222

        Caused Windows build to fail (Requested by rfong on #webkit).

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-24  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed, rolling out r161051.
        http://trac.webkit.org/changeset/161051
        https://bugs.webkit.org/show_bug.cgi?id=45994

        Caused two DFG tests to hit assertions due to a separate bug

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2013-12-24  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash while repainting an invalid region
        https://bugs.webkit.org/show_bug.cgi?id=126152

        Reviewed by Daniel Bates.

        An invalid region, part of a dependency cycle, should not attempt to repaint content from
        its associated named flow, otherwise there may be the case of an infinite repaint cycle,
        resulting in a crash due to a stack overflow.

        Test: fast/regions/repaint/invalid-region-repaint-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::repaintIncludingDescendants):

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        XMLHttpRequest: status and statusText throw DOM Exception 11 when the state is UNSENT or OPENED.
        https://bugs.webkit.org/show_bug.cgi?id=45994

        Reviewed by Alexey Proskuryakov.

        Merged https://chromium.googlesource.com/chromium/blink/+/23c90460de16e04c5aba7ed942fba76cb79fdb9b.

        Latest XHR spec says that XHR should return 0 and an empty string when it's in UNSENT or OPENED state
        or error flag is set: http://www.w3.org/TR/2012/WD-XMLHttpRequest-20121206/#the-status-attribute

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::status):
        (WebCore::XMLHttpRequest::statusText):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in ReplaceSelectionCommand
        https://bugs.webkit.org/show_bug.cgi?id=126107

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/c1ebe5c1e808daf9db5e348a8d0ab32570b9f7a5
        except the test since it doesn't reproduce the crash in WebKit.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the pseudo classes link and any-link to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126196

        Reviewed by Ryosuke Niwa.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsLink):
        * dom/Node.h:
        (WebCore::Node::flagIsElement):
        (WebCore::Node::flagIsLink):
        Fix the type to match TrustedImm32.

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the experimental CSS code generator files to the remaining build systems
        https://bugs.webkit.org/show_bug.cgi?id=126192

        Reviewed by Sam Weinig.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add the pseudo class :focus to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126189

        Reviewed by Ryosuke Niwa.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::addPseudoType):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementIsFocused):

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Remove boolean argument from Element::setChildrenAffectBy* methods
        https://bugs.webkit.org/show_bug.cgi?id=126183

        Reviewed by Daniel Bates.

        Merge https://chromium.googlesource.com/chromium/blink/+/066ef2fa78336b2b65052cb17cb81b367fe7dbbf

        These functions are never called with false.

        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::checkOne):
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByActive):
        (WebCore::Element::setChildrenAffectedByDrag):
        * dom/Element.h:
        (WebCore::Element::setChildrenAffectedByHover):

2013-12-23  Tim Horton  <timothy_horton@apple.com>

        Fix the iOS build after r161013 and r160672.

        * WebCore.exp.in:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::updateCustomAppearance):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Refactor PutPropertySlot to be aware of custom properties
        https://bugs.webkit.org/show_bug.cgi?id=126187

        Reviewed by msaboff.

        Update the bindings code generation and custom objects
        to the new function signatures

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::put):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject setValue:forKey:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterface::putByIndex):
        * bridge/NP_jsobject.cpp:
        (_NPN_SetProperty):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add class matching to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126176

        Reviewed by Antti Koivisto.

        Add selector matching based on classname to the Selector Compiler.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasClasses):
        * dom/ElementData.h:
        (WebCore::ElementData::classNamesMemoryOffset):
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitStringData::sizeMemoryOffset):
        (WebCore::SpaceSplitStringData::tokensMemoryOffset):

2013-12-23  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/storage changes
        https://bugs.webkit.org/show_bug.cgi?id=125913

        Reviewed by David Kilzer.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::openDatabase): Added iOS-specific code.
        (WebCore::StorageAreaSync::sync): Ditto.
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::openTrackerDatabase): Ditto.
        (WebCore::StorageTracker::syncImportOriginIdentifiers): Ditto.
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase): Ditto.
        (WebCore::StorageTracker::syncSetOriginDetails): Ditto.
        (WebCore::StorageTracker::syncDeleteAllOrigins): Ditto.
        (WebCore::StorageTracker::syncDeleteOrigin): Ditto.
        (WebCore::StorageTracker::databasePathForOrigin): Ditto.

2013-12-23  Daniel Bates  <dabates@apple.com>

        Fix the iOS build following <http://trac.webkit.org/changeset/160236>
        (https://bugs.webkit.org/show_bug.cgi?id=125239)

        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Substitute view() for &view().
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollTo): Fix indentation of closing brace.
        * rendering/RenderLayerCompositor.cpp: Include MainFrame.h.
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles): Check that page->mainFrame().view()
        is non-null; also add explicit #else clause.
        (WebCore::RenderLayerCompositor::ensureRootLayer): Fix up main frame check.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintFileUploadIconDecorations): Substitute rect for r.
        * rendering/RenderThemeIOS.mm:
        (WebCore::RenderThemeIOS::paintTextFieldDecorations): Use .get() to access underlying NeverDestroyed item.
        (WebCore::RenderThemeIOS::systemFont):
        * rendering/RenderView.cpp:
        (WebCore::fixedPositionOffset): Substitute frameView.scrollOffset() for frameView->scrollOffset().

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Minor optimization in FrameSelection::setNonDirectionalSelectionIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=126108

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/237b987c324e2e389a9e0350293bfaf16a5e201d

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::setNonDirectionalSelectionIfNeeded):

2013-12-23  Ryosuke Niwa  <rniwa@webkit.org>

        Use isDocumentFragment() instead of comparing nodeType() with Node::DOCUMENT_FRAGMENT_NODE
        https://bugs.webkit.org/show_bug.cgi?id=126178

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/a622cb80af2bfb0c5d91123cbcfa4fa72a06554c

        Use inline Node::isDocumentFragment() instead of virtual nodeType().

        * dom/ContainerNode.cpp:
        (WebCore::collectChildrenAndRemoveFromOldParent):
        * dom/Document.cpp:
        (WebCore::Document::canReplaceChild):

2013-12-23  Gwang Yoon Hwang  <ryumiel@company100.net>

        Clear ScratchBuffer::m_lastLayerSize when clearing the scratch buffer.
        https://bugs.webkit.org/show_bug.cgi?id=126150

        Reviewed by Simon Fraser.

        Since ScratchBuffer::clearScratchBuffer only clears m_lastRadius,
        ShadowBlur doesn't draw shadow into the re-created scratch buffer if it
        tries to draw shadow without blurRadius.

        Clear m_lastLayerSize to empty is enought to ensure that there is no
        drawn contents in the scratch buffer.

        No new tests due to the flaky nature of reproducing the issue.

        * platform/graphics/ShadowBlur.cpp:
        (WebCore::ScratchBuffer::clearScratchBuffer):

2013-12-23  Benjamin Poulain  <benjamin@webkit.org>

        Add id matching to the Selector Code Generator
        https://bugs.webkit.org/show_bug.cgi?id=126154

        Reviewed by Antti Koivisto.

        Compile matching for #id selectors. IDs are Atomic String so it is just a matter
        of comparing the pointers.

        No attempt is made at optimizing for the double #id case because such problem
        do not really happen outside tests.

        * cssjit/SelectorCompiler.cpp:
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementDataMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasId):
        * dom/Element.h:
        (WebCore::Element::elementDataMemoryOffset):
        * dom/ElementData.h:
        (WebCore::ElementData::idForStyleResolutionMemoryOffset):

2013-12-23  Oliver Hunt  <oliver@apple.com>

        Update custom setter implementations to perform type checks
        https://bugs.webkit.org/show_bug.cgi?id=126171

        Reviewed by Daniel Bates.

        Update the bindings code generator for setters so that they perform a real
        type check.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateAttributeEventListenerCall):
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::setJSTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::setJSTestInterfaceImplementsStr2):
        (WebCore::setJSTestInterfaceImplementsStr3):
        (WebCore::setJSTestInterfaceImplementsNode):
        (WebCore::setJSTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::setJSTestInterfaceSupplementalStr2):
        (WebCore::setJSTestInterfaceSupplementalStr3):
        (WebCore::setJSTestInterfaceSupplementalNode):
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjConstructorStaticStringAttr):
        (WebCore::setJSTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::setJSTestObjEnumAttr):
        (WebCore::setJSTestObjByteAttr):
        (WebCore::setJSTestObjOctetAttr):
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        (WebCore::setJSTestObjLongAttr):
        (WebCore::setJSTestObjLongLongAttr):
        (WebCore::setJSTestObjUnsignedLongLongAttr):
        (WebCore::setJSTestObjStringAttr):
        (WebCore::setJSTestObjTestObjAttr):
        (WebCore::setJSTestObjXMLObjAttr):
        (WebCore::setJSTestObjCreate):
        (WebCore::setJSTestObjReflectedStringAttr):
        (WebCore::setJSTestObjReflectedIntegralAttr):
        (WebCore::setJSTestObjReflectedUnsignedIntegralAttr):
        (WebCore::setJSTestObjReflectedBooleanAttr):
        (WebCore::setJSTestObjReflectedURLAttr):
        (WebCore::setJSTestObjReflectedCustomIntegralAttr):
        (WebCore::setJSTestObjReflectedCustomBooleanAttr):
        (WebCore::setJSTestObjReflectedCustomURLAttr):
        (WebCore::setJSTestObjTypedArrayAttr):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithSetterException):
        (WebCore::setJSTestObjStringAttrWithGetterException):
        (WebCore::setJSTestObjStringAttrWithSetterException):
        (WebCore::setJSTestObjCustomAttr):
        (WebCore::setJSTestObjWithScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAttribute):
        (WebCore::setJSTestObjWithScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::setJSTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr4Constructor):
        (WebCore::setJSTestObjConditionalAttr5Constructor):
        (WebCore::setJSTestObjConditionalAttr6Constructor):
        (WebCore::setJSTestObjAnyAttribute):
        (WebCore::setJSTestObjMutablePoint):
        (WebCore::setJSTestObjImmutablePoint):
        (WebCore::setJSTestObjStrawberry):
        (WebCore::setJSTestObjStrictFloat):
        (WebCore::setJSTestObjId):
        (WebCore::setJSTestObjReplaceableAttribute):
        (WebCore::setJSTestObjNullableLongSettableAttribute):
        (WebCore::setJSTestObjNullableStringValue):
        (WebCore::setJSTestObjAttributeWithReservedEnumType):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::setJSTestSerializedScriptValueInterfaceValue):
        (WebCore::setJSTestSerializedScriptValueInterfaceCachedValue):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::setJSTestTypedefsUnsignedLongLongAttr):
        (WebCore::setJSTestTypedefsImmutableSerializedScriptValue):
        (WebCore::setJSTestTypedefsAttrWithGetterException):
        (WebCore::setJSTestTypedefsAttrWithSetterException):
        (WebCore::setJSTestTypedefsStringAttrWithGetterException):
        (WebCore::setJSTestTypedefsStringAttrWithSetterException):
        * bindings/scripts/test/JS/JSTestTypedefs.h:

2013-12-23  Lucas Forschler  <lforschler@apple.com>

        <rdar://problem/15682948> Update copyright strings

        Reviewed by Dan Bernstein

        * Info.plist:

2013-12-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160945.
        http://trac.webkit.org/changeset/160945
        https://bugs.webkit.org/show_bug.cgi?id=126164

        Seems to have broken multiple canvas tests (Requested by ap on
        #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Removed.
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Removed.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):

2013-12-23  Eric Carlson  <eric.carlson@apple.com>

        AudioSessionManager should be MediaSessionManager
        https://bugs.webkit.org/show_bug.cgi?id=126087

        Reviewed by Jer Noble.

        No new tests, no change in functionality.

        * WebCore.xcodeproj/project.pbxproj: Change file names.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): MediaSessionManagerToken::create() takes a client
            interface instead of the media type.
        * html/HTMLMediaElement.h:

        * platform/audio/AudioSessionListener.h: Include <wtf/Noncopyable.h>.
        
        AudioSessionManager.* -> MediaSessionManager.*
        * platform/audio/AudioSessionManager.cpp: Removed.
        * platform/audio/AudioSessionManager.h: Removed.
        * platform/audio/MediaSessionManager.cpp: Copied from Source/WebCore/platform/audio/AudioSessionManager.cpp.
        (MediaSessionManagerToken::create):
        (MediaSessionManagerToken::MediaSessionManagerToken):
        (MediaSessionManagerToken::~MediaSessionManagerToken):
        (MediaSessionManager::sharedManager):
        (MediaSessionManager::MediaSessionManager):
        (MediaSessionManager::has):
        (MediaSessionManager::count):
        (MediaSessionManager::addToken):
        (MediaSessionManager::removeToken):
        (MediaSessionManager::updateSessionState):
        * platform/audio/MediaSessionManager.h: Copied from Source/WebCore/platform/audio/AudioSessionManager.h.

        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac): MediaSessionManagerToken::create() takes a
            client interface instead of the media type.
        * platform/audio/mac/AudioDestinationMac.h:

        * platform/audio/mac/AudioSessionMac.cpp:
        * platform/audio/mac/AudioSessionManagerMac.cpp: Removed.
        * platform/audio/mac/MediaSessionManagerMac.cpp: Copied from Source/WebCore/platform/audio/mac/AudioSessionManagerMac.cpp.
        (MediaSessionManager::updateSessionState):

2013-12-23  Zan Dobersek  <zdobersek@igalia.com>

        webkit gtk 2.2.3 stable tarball compilation error
        https://bugs.webkit.org/show_bug.cgi?id=125987

        Reviewed by Gustavo Noronha Silva.

        Only try including <gdk/gdkwayland.h> and using GDK_IS_WAYLAND_DISPLAY if the Wayland support has been
        enabled and when not compiling with GTK+ 2 (which occurs when building for libPlatformGtk2).

        * platform/graphics/GLContext.cpp:
        (WebCore::GLContext::createContextForWindow):

2013-12-23  Piotr Grad  <p.grad@samsung.com>

        [GStreamer] video/audio seeking is not unified.
        https://bugs.webkit.org/show_bug.cgi?id=125852

        Reviewed by Philippe Normand.

        This bug is fixing regression with seeking audio/video elements and unifies seeking
        in MediaPlayerPrivateGStreamer.

        Test: media/video-seek-with-negative-playback.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::seekIncludingRate):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2013-12-23  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][WK2] WebGL is not working with GLES
        https://bugs.webkit.org/show_bug.cgi?id=126138

        Reviewed by Martin Robinson.

        m_texture has been unnecessarily regenerated. It's generated in GraphicsContext3D
        constructor for offscreen rendering. And m_compositorTexture is used by only Mac port.
        They create it in their GraphicsContext3D constructor so that we don't need to recreate it
        in GC3DOpenGLES::reshapeFBOs.

        No new tests since no functionality changed.

        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::~GraphicsContext3D):
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):
        * platform/graphics/opengl/GraphicsContext3DOpenGLES.cpp:
        (WebCore::GraphicsContext3D::reshapeFBOs):

2013-12-22  Benjamin Poulain  <bpoulain@apple.com>

        Create a skeleton for CSS Selector code generation
        https://bugs.webkit.org/show_bug.cgi?id=126044

        Reviewed by Antti Koivisto and Gavin Barraclough.

        Add CSSCompiler, which provides the basic infrastructure to compile
        CSS Selectors on x86_64.

        Compilation happens in two phases.
        1) The various matching and relation of each CSSSelector is aggregated into units
           matching a single element: SelectorFragment.
           SelectorFragment also knows about the relations between different fragments,
           and contains all the information to generate the code for a particular element.
        2) The compiler then goes over the fragments, and generate code based on the information
           of each fragment.

        It the current state, SelectorCompiler only compiles the tag matching selectors and
        any of the relation between selectors.

        Depending on the relation and position of a fragment, failure on traversal or matching
        does not necessarily causes the complete selector. A failure can cause matching to
        resume from the parent or the sibling of a previously visisted node.
        The implementation of this is done through the BacktrackingAction. In case of failure,
        the next starting state is setup and the program counter jumps back to the appropriate
        starting point.

        When backtracking, the method used to save the starting point depends on the type
        of backtracking.
        The child/parent relation (">") is very common so it uses an additional register to keep
        the next starting point (m_descendantBacktrackingStart).
        The indirect sibling relation ("~") is much less common and uses the stack to save
        the next starting point.

        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/SelectorCompiler.cpp: Added.
        (WebCore::SelectorCompiler::SelectorFragment::SelectorFragment):
        (WebCore::SelectorCompiler::compileSelector):
        (WebCore::SelectorCompiler::fragmentRelationForSelectorRelation):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::SelectorCodeGenerator):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::compile):
        (WebCore::SelectorCompiler::updateChainStates):
        (WebCore::SelectorCompiler::isFirstAncestor):
        (WebCore::SelectorCompiler::isFirstAdjacent):
        (WebCore::SelectorCompiler::isAfterChildRelation):
        (WebCore::SelectorCompiler::solveBacktrackingAction):
        (WebCore::SelectorCompiler::requiresAdjacentTail):
        (WebCore::SelectorCompiler::requiresDescendantTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::computeBacktrackingInformation):
        (WebCore::SelectorCompiler::testIsElementFlagOnNode):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToParentElement):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateParentElementTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAncestorTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateWalkToPreviousAdjacent):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateIndirectAdjacentTreeWalker):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::markParentElementIfResolvingStyle):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::linkFailures):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateAdjacentBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateDescendantBacktrackingTail):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateBacktrackingTailsIfNeeded):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementMatching):
        (WebCore::SelectorCompiler::SelectorCodeGenerator::generateElementHasTagName):
        * cssjit/SelectorCompiler.h: Added.
        (WebCore::SelectorCompilationStatus::SelectorCompilationStatus):
        (WebCore::SelectorCompilationStatus::operator Status):
        (WebCore::SelectorCompiler::simpleSelectorCheckerFunction):
        (WebCore::SelectorCompiler::selectorCheckerFunctionWithCheckingContext):
        * dom/Element.cpp:
        (WebCore::Element::setChildrenAffectedByDirectAdjacentRules):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        * dom/Element.h:
        (WebCore::Element::tagQNameMemoryOffset):
        (WebCore::Element::setChildrenAffectedByForwardPositionalRules):
        * dom/Node.h:
        (WebCore::Node::parentNodeMemoryOffset):
        (WebCore::Node::previousSiblingMemoryOffset):
        (WebCore::Node::nodeFlagsMemoryOffset):
        (WebCore::Node::flagIsElement):
        * dom/QualifiedName.h:
        (WebCore::QualifiedName::QualifiedNameImpl::localNameMemoryOffset):
        (WebCore::QualifiedName::QualifiedNameImpl::namespaceMemoryOffset):
        (WebCore::QualifiedName::implMemoryOffset):

2013-12-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Crash when trying to select content from invalid region
        https://bugs.webkit.org/show_bug.cgi?id=126113

        Reviewed by Antti Koivisto.

        After fix for https://bugs.webkit.org/show_bug.cgi?id=120769, positionForPoint for a region attempts to use the associated named flow to perform its task.
        However, this should happen only when the region is valid. If the region is invalid, part of a dependency cycle, positionForPoint should behave as usual
        for a block instead of a region, otherwise it may run into an infinite loop due to cyclic dependencies and a crash will occur.

        This patch ensures that positionForPoint region specifie behaviour is followed only if the region is valid - not part of a dependency cycle.

        Test: fast/regions/selection/invalid-region-selection-crash.html

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::positionForPoint):

2013-12-21  Dirk Schulze  <krit@webkit.org>

        Start refactoring Filter code to reuse CachedSVGDocument for clipPath
        https://bugs.webkit.org/show_bug.cgi?id=126069

        Reviewed by Andreas Kling.

        Smaller refactoring of the CSS filter style resolver code. Previously the code
        requested the FilterOperations list from RenderStyle and compared the content
        in this list with an internal map. Then the resource loading was triggered.
        With the refactoring we do not request the list from RenderStyle anymore but
        rely on the hash map data entirely.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        * platform/graphics/filters/FilterOperation.h:

2013-12-20  Andy Estes  <aestes@apple.com>

        [Mac] Soft-link WebContentAnalysis.framework
        https://bugs.webkit.org/show_bug.cgi?id=126102

        Reviewed by Dan Bernstein.

        * Configurations/WebCore.xcconfig: There's no need to modify LDFLAGS
        now that we don't hard link against WebContentAnalysis.framework.
        * WebCore.xcodeproj/project.pbxproj: Removed
        WebContentAnalysis.framework from the 'Link Binary with Libraries'
        build phase.
        * platform/mac/ContentFilterMac.mm: Soft-linked
        WebContentAnalysis.framework and the WebFilterEvaluator @class.
        (WebCore::ContentFilter::ContentFilter): Called getWebFilterEvaluatorClass().
        (WebCore::ContentFilter::isEnabled): Ditto.
        * platform/mac/SoftLinking.h: Added an implementation of
        SOFT_LINK_PRIVATE_FRAMEWORK().

2013-12-21  Antti Koivisto  <antti@apple.com>

        Unreviewed, rolling out r160916.
        http://trac.webkit.org/changeset/160916
        https://bugs.webkit.org/show_bug.cgi?id=126073

        Roll out a temporary fix. The underlying issue was fixed.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::~AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2013-12-21  Antti Koivisto  <antti@apple.com>

        Figure out if node is focusable without requiring renderer
        https://bugs.webkit.org/show_bug.cgi?id=126118

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle):
        
            Use inDocument() test instead of the attached() test. We can compute style for anything that
            is in document.

        * dom/Node.cpp:
        (WebCore::Node::isContentEditable):
        (WebCore::Node::isContentRichlyEditable):
        (WebCore::Node::hasEditableStyle):
        
            Use computedStyle instead of getting the style from renderer. Computed style gets constructed
            on demand if renderer does not exist. If it does then the existing style is used.

        (WebCore::Node::isEditableToAccessibility):
        (WebCore::Node::canStartSelection):
        (WebCore::Node::isRootEditableElement):
        (WebCore::Node::rootEditableElement):
        * dom/Node.h:
        (WebCore::Node::hasEditableStyle):
        (WebCore::Node::hasRichlyEditableStyle):
        
            Renamed from rendererIsEditable since these no longer require renderer.

        (WebCore::HTMLElement::supportsFocus):
        
            Stop calling updateStyleIfNeeded() and forcing render tree construction.

2013-12-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [SOUP] ResourceHandleSoup should use async client callbacks when client uses async callbacks
        https://bugs.webkit.org/show_bug.cgi?id=126006

        Reviewed by Martin Robinson.

        This fixes WebKit2 loader client unit tests when using the network
        process.

        * platform/network/ResourceHandle.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::doRedirect): Call willSendRequestAsync on the client
        when usesAsyncCallbacks returns true.
        (WebCore::nextMultipartResponsePartCallback): Call
        didReceiveResponseAsync on the client when usesAsyncCallbacks
        returns true.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::ResourceHandle::continueWillSendRequest): Empty
        implementation for now because the default one asserts.
        (WebCore::ResourceHandle::continueDidReceiveResponse): Ditto.
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage): Ditto.

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Replace yield() and pauseBriefly() with std::this_thread::yield()
        https://bugs.webkit.org/show_bug.cgi?id=126105

        Reviewed by Sam Weinig.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2013-12-20  Ryosuke Niwa  <rniwa@webkit.org>

        Assert that RootInlineBox::setLineBreakInfo should is never called on a RenderInline without line boxes
        https://bugs.webkit.org/show_bug.cgi?id=126101

        Reviewed by Simon Fraser.

        Merge assertions added in https://chromium.googlesource.com/chromium/blink/+/716ac74fd475b581d69c0aa8ec2d806201c3a420

        The code change was not merged since we never hit the added assertion on the attached test case in WebKit.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::setLineBreakInfo):

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove the references to Node in InjectedScript
        https://bugs.webkit.org/show_bug.cgi?id=126091

        Reviewed by Timothy Hatcher.

        Remove the last DOM references from InjectedScript so that
        InjectedScript can move down into JavaScriptCore. The only
        remaining references were to Nodes, which are all just thin
        wrappers around existing functions. Move Node / JSNode (JSValue)
        conversion into InspectorDOMAgent, where it was used.

        No new tests, no observable change in functionality.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::inspectObject):
        (WebCore::InjectedScript::releaseObject):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptSource.js:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::highlightNode):
        (WebCore::InspectorDOMAgent::requestNode):
        (WebCore::InspectorDOMAgent::nodeForObjectId):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::scriptValueAsNode):
        (WebCore::InspectorDOMAgent::nodeAsScriptValue):
        * inspector/InspectorDOMAgent.h:
        * inspector/PageConsoleAgent.cpp:

2013-12-20  Myles C. Maxfield  <mmaxfield@apple.com>

        Faster implementation of text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=125718

        Reviewed by Simon Fraser.

        This new implementation of text-decoration-skip: ink extracts
        each glyph into a path, then decomposes each path into a series
        of contours. It then intersects each contour with the top and
        bottom of the underline (by approximating the contour with a line).
        It then draws underlines in between these intersection regions.

        Tests for text-decoration-skip: ink already exist in
        fast/css3-text/css3-text-decoration/text-decoration-skip

        * platform/graphics/Font.h: Signature of new function
        * platform/graphics/mac/FontMac.mm:
        (WebCore::GlyphIterationState::GlyphIterationState): Persistent
        between calls to findPathIntersections
        (WebCore::findIntersectionPoint): Calculates an intersection point
        between two lines
        (WebCore::findPathIntersections): Called by CGPathApply to find
        intersections of each contour
        (WebCore::Font::intersectionPoints): Function to get the places
        where an underline would intersect a TextRun.
        * rendering/InlineTextBox.cpp:
        (WebCore::compareTuples): Used for sorting intersection ranges
        (WebCore::translateIntersectionPointsToSkipInkBoundaries): Converts
        a sequence of intersection points to the locations where
        text-decoration-skip: ink should draw underlines
        (WebCore::drawSkipInkUnderline): Draws a sequence of short underlines
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::intersectionPoints): Calls Font::intersectionPoints
        * rendering/TextPainter.h:

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give the CommandLineAPIModule its own Host object, making InjectedScriptHost viable for a JS Context
        https://bugs.webkit.org/show_bug.cgi?id=126082

        Reviewed by Timothy Hatcher.

        Extract CommandLineAPIHost from InjectedScriptHost. The command line API contained
        a bunch of DOM specific JavaScript that would not be suitable for a pure JavaScript
        environment. Now that the DOM related code is in this WebCore only module, give this
        module a host object that WebCore will provide.

        No new tests, no observable change in functionality.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Add new files.

        * bindings/js/JSCommandLineAPIHostCustom.cpp: Added.
        (WebCore::JSCommandLineAPIHost::inspectedObject):
        (WebCore::getJSListenerFunctions):
        (WebCore::JSCommandLineAPIHost::getEventListeners):
        (WebCore::JSCommandLineAPIHost::inspect):
        (WebCore::JSCommandLineAPIHost::databaseId):
        (WebCore::JSCommandLineAPIHost::storageId):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * inspector/CommandLineAPIHost.cpp: Copied from Source/WebCore/inspector/InjectedScriptHost.cpp.
        (WebCore::CommandLineAPIHost::create):
        (WebCore::CommandLineAPIHost::CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::~CommandLineAPIHost):
        (WebCore::CommandLineAPIHost::disconnect):
        (WebCore::CommandLineAPIHost::inspectImpl):
        (WebCore::CommandLineAPIHost::getEventListenersImpl):
        (WebCore::CommandLineAPIHost::clearConsoleMessages):
        (WebCore::CommandLineAPIHost::copyText):
        (WebCore::CommandLineAPIHost::InspectableObject::get):
        (WebCore::CommandLineAPIHost::addInspectedObject):
        (WebCore::CommandLineAPIHost::clearInspectedObjects):
        (WebCore::CommandLineAPIHost::inspectedObject):
        (WebCore::CommandLineAPIHost::databaseIdImpl):
        (WebCore::CommandLineAPIHost::storageIdImpl):
        * inspector/CommandLineAPIHost.h: Copied from Source/WebCore/inspector/InjectedScriptHost.h.
        (WebCore::CommandLineAPIHost::init):
        * inspector/CommandLineAPIHost.idl: Copied from Source/WebCore/inspector/InjectedScriptHost.idl.
        * inspector/CommandLineAPIModule.cpp:
        These are almost all pure copies from InjectedScriptHost files. Cleaned up a bit.

        * inspector/InjectedScriptModule.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        Modules can now define a host object when they are getting injected.

        (WebCore::CommandLineAPIModule::host):
        * inspector/CommandLineAPIModule.h:
        Provide a CommandLineAPIHost, host object.

        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::host):
        No host object is needed for the CanvasModule.

        * inspector/InjectedScriptSource.js:
        * inspector/CommandLineAPIModuleSource.js:
        When injecting a module, pass on an optional host object to
        the module's source. Move a little more code between the
        two files. The two files are very tightly coupled right now.

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::create):
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::~InjectedScriptHost):
        (WebCore::InjectedScriptHost::InjectedScriptHost):
        * inspector/InjectedScriptHost.idl:
        Move any command line specific logic to CommandLineAPIHost classes.

        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::disconnect):
        * inspector/InjectedScriptManager.h:
        (WebCore::InjectedScriptManager::commandLineAPIHost):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addInspectedHeapObject):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::resetState):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::resetState):
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::addInspectedNode):
        * inspector/PageInjectedScriptManager.cpp:
        (WebCore::PageInjectedScriptManager::PageInjectedScriptManager):
        (WebCore::PageInjectedScriptManager::disconnect):
        * inspector/PageInjectedScriptManager.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        An InjectedScriptManager may optionally have a commandLineAPIHost object.
        If it does, initialize it, and send it messages.

2013-12-09  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to re-use IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=125477

        Reviewed by Geoff Garen.

        This test adds a static class, ImageBufferBackingStoreCache, that vends
        IOSurfaces. It remembers IOSurfaces that have been returned to it until
        a configurable timeout.

        The storage used by this class is in the form of a HashMap from a
        bucketed size to the IOSurface. There are many other data structures
        that could be used, but this implementation gives a 80% hit rate on
        normal browsing of some example sites with Canvas and
        text-decoration-skip: ink. Because the buckets are fairly
        small (rounding the width and height up to multiples of 8), traversing the
        bucket contents takes on average 2 steps. 

        Test: fast/canvas/canvas-backing-store-reuse.html

        * WebCore.xcodeproj/project.pbxproj: Added new caching class
        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp: Added.
        (WebCore::createIOSurface): Moved from ImageBufferCG.cpp
        (WebCore::ImageBufferBackingStoreCache::timerFired): Forget the cache
        contents
        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
        (WebCore::ImageBufferBackingStoreCache::get): Static getter
        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
        (WebCore::ImageBufferBackingStoreCache::insertIntoCache): Memory-management
        creation function
        (WebCore::ImageBufferBackingStoreCache::takeFromCache): Memory-management
        deletion function
        (WebCore::ImageBufferBackingStoreCache::isAcceptableSurface): Does this cached
        IOSurface fit the bill?
        (WebCore::ImageBufferBackingStoreCache::tryTakeFromCache): Lookup
        a bucket and walk through its contents
        (WebCore::ImageBufferBackingStoreCache::getOrAllocate): Public function
        for clients who want a IOSurface from the cache
        (WebCore::ImageBufferBackingStoreCache::deallocate): Public
        function for clients to return an IOSurface to the pool
        * platform/graphics/cg/ImageBufferBackingStoreCache.h: Added.
        * platform/graphics/cg/ImageBufferCG.cpp: Update to use new cache
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::~ImageBuffer):

2013-12-20  Simon Fraser  <simon.fraser@apple.com>

        Change "threaded scrolling" terminology to "asynchronous scrolling"
        https://bugs.webkit.org/show_bug.cgi?id=126094

        Reviewed by Tim Horton.

        Rename ENABLE_THREADED_SCROLLING to ENABLE_ASYNC_SCROLLING, and change
        references to "main thread scrolling" to "synchronous scrolling".
        
        In a few places, functions with names like shouldUpdateScrollLayerPositionOnMainThread()
        were actually returning SynchronousScrollingReasons, so rename them appropriately.

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        (WebCore::FrameView::isRubberBandInProgress):
        (WebCore::FrameView::requestScrollPositionUpdate):
        (WebCore::FrameView::updatesScrollLayerPositionOnMainThread):
        (WebCore::FrameView::wheelEvent):
        * page/Page.cpp:
        (WebCore::Page::synchronousScrollingReasonsAsText):
        * page/Page.h:
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::create):
        (WebCore::ScrollingCoordinator::ScrollingCoordinator):
        (WebCore::ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewFixedObjectsDidChange):
        (WebCore::ScrollingCoordinator::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::updateSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinator::setForceSynchronousScrollLayerPositionUpdates):
        (WebCore::ScrollingCoordinator::synchronousScrollingReasonsAsText):
        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollingCoordinator::shouldUpdateScrollLayerPositionSynchronously):
        (WebCore::ScrollingCoordinator::setSynchronousScrollingReasons):
        * page/scrolling/ScrollingStateFixedNode.cpp:
        * page/scrolling/ScrollingStateFixedNode.h:
        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setSynchronousScrollingReasons):
        (WebCore::ScrollingStateScrollingNode::dumpProperties):
        * page/scrolling/ScrollingStateScrollingNode.h: Awkward "ReasonsForSynchronousScrolling" to avoid
        conflict with the enum called SynchronousScrollingReasons.
        * page/scrolling/ScrollingStateStickyNode.cpp:
        * page/scrolling/ScrollingStateStickyNode.h:
        * page/scrolling/ScrollingStateTree.cpp:
        * page/scrolling/ScrollingStateTree.h:
        * page/scrolling/ScrollingThread.cpp:
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/ScrollingTree.cpp:
        * page/scrolling/ScrollingTree.h:
        * page/scrolling/ScrollingTreeNode.cpp:
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::synchronousScrollingReasons):
        (WebCore::ScrollingTreeScrollingNode::shouldUpdateScrollLayerPositionSynchronously):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::setSynchronousScrollingReasons):
        (WebCore::ScrollingCoordinatorMac::commitTreeState):
        * page/scrolling/mac/ScrollingStateNodeMac.mm:
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        * page/scrolling/mac/ScrollingThreadMac.mm:
        * page/scrolling/mac/ScrollingTreeFixedNode.h:
        * page/scrolling/mac/ScrollingTreeFixedNode.mm:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
        (WebCore::ScrollingTreeScrollingNodeMac::scrollPosition):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollPositionWithoutContentEdgeConstraints):
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        (WebCore::logThreadedScrollingMode):
        * page/scrolling/mac/ScrollingTreeStickyNode.h:
        * page/scrolling/mac/ScrollingTreeStickyNode.mm:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::supportsUpdateOnSecondaryThread):
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::updateTileCoverageMap):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::releaseMemory):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setupFontSubpixelQuantization):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):
        * testing/Internals.cpp:
        (WebCore::Internals::mainThreadScrollingReasons):
        * testing/Internals.idl:

2013-12-20  Tim Horton  <timothy_horton@apple.com>

        Revert r160327, r160273, and r160260.

        We'll come up with something less aggressive, as this doesn't quite work.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:

2013-12-20  Anders Carlsson  <andersca@apple.com>

        PostAttachCallbackDisabler should take a Document
        https://bugs.webkit.org/show_bug.cgi?id=126090

        Reviewed by Andreas Kling.

        suspendPostAttachCallbacks and resumePostAttachCallbacks always only get the document from the
        container node, so make them static member functions that take a Document&. Also, move PostAttachCallbackDisabler
        to Element.h in preparation for moving post attach callback handling to Element.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        * dom/ContainerNode.h:
        * dom/Element.h:
        (WebCore::PostAttachCallbackDisabler::PostAttachCallbackDisabler):
        (WebCore::PostAttachCallbackDisabler::~PostAttachCallbackDisabler):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachRenderTree):

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Move scheduleSetNeedsStyleRecalc to HTMLFrameOwnerElement
        https://bugs.webkit.org/show_bug.cgi?id=126083

        Reviewed by Antti Koivisto.

        scheduleSetNeedsStyleRecalc is only ever called on HTMLFrameOwnerElement, so
        move it there, remove the Node implementation and make it non-virtual.

        * dom/ContainerNode.cpp:
        * dom/ContainerNode.h:
        * dom/Node.h:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::needsStyleRecalcCallback):
        (WebCore::HTMLFrameOwnerElement::scheduleSetNeedsStyleRecalc):
        * html/HTMLFrameOwnerElement.h:

2013-12-20  Andy Estes  <aestes@apple.com>

        Remove an unneeded include of WebCoreSystemInterface.h.

        Rubber-stamped by Dan Bernstein.

        * platform/mac/ContentFilterMac.mm:

2013-12-20  Anders Carlsson  <andersca@apple.com>

        Node post attach callbacks should use references
        https://bugs.webkit.org/show_bug.cgi?id=126081

        Reviewed by Antti Koivisto.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::queuePostAttachCallback):
        (WebCore::ContainerNode::dispatchPostAttachCallbacks):
        (WebCore::needsStyleRecalcCallback):
        (WebCore::ContainerNode::scheduleSetNeedsStyleRecalc):
        * dom/ContainerNode.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::focusPostAttach):
        (WebCore::HTMLFormControlElement::didAttachRenderers):
        (WebCore::updateFromElementCallback):
        (WebCore::HTMLFormControlElement::didRecalcStyle):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        (WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
        * html/HTMLPlugInImageElement.h:

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
        https://bugs.webkit.org/show_bug.cgi?id=126038

        Reviewed by Timothy Hatcher.

        Only inject the CommandLineAPIModule once, when the InjectedScript
        is first created. This avoids running a small snippet of JavaScript
        to check if the module is loaded every time we fetch the InjectedScript.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add new files to the build.

        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createForPage):
        (WebCore::InjectedScriptManager::injectedScriptFor):
        (WebCore::InjectedScriptManager::didCreateInjectedScript):
        Add didCreateInjectedScript hook for a subclass to inject more scripts.

        * inspector/PageInjectedScriptManager.h: Added.
        * inspector/PageInjectedScriptManager.cpp: Added.
        (WebCore::PageInjectedScriptManager::didCreateInjectedScript):
        For pages, inject the CommandLineAPIModule.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        This is replaced by PageInjectedScriptManager, we no longer need
        to do extra work every time we fetch the injectedScriptForEval.

2013-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract CommandLineAPI into its own InjectedScriptModule
        https://bugs.webkit.org/show_bug.cgi?id=126038

        Reviewed by Timothy Hatcher.

        No tests, no observable change in behavior.

        Move the CommandLineAPI source into its own module. Load the module
        in InjectedScripts for WebCore::Pages. Not for workers.

        Moving CommandLineAPI into it's own module moves it from being inside
        the same anonymous function to being evaluated outside the anonymous
        function. To connect the two InjectedScript passes itself to the
        injected module, and the CommandLineAPI module places its class on the
        injectedScript as injectedScript.CommandLineAPI.

        This essentially makes the CommandLineAPI module an InjectedScript
        extension. InjectedScriptSource checks for the existence of
        this.CommandLineAPI to see if the fuller version is available. Otherwise
        it falls back to a BasicCommandLineAPI which only exposes "$_",
        which is the "last evaluated result". That will be useful for JS Contexts
        and Workers.

        At the same time, this patch makes InjectedScriptModule more generic,
        to support being used in a pure JavaScript environment, meaning one
        without "window" as the global object.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAllInOne.cpp:
        Add files. Minify the CommandLineAPIModuleSource in generation.

        * inspector/CommandLineAPIModule.h: Added.
        * inspector/CommandLineAPIModule.cpp: Added.
        (WebCore::CommandLineAPIModule::CommandLineAPIModule):
        (WebCore::CommandLineAPIModule::injectIfNeeded):
        (WebCore::CommandLineAPIModule::source):
        Inject the module that doesn't return an object, its just evaluated code
        extending the original InjectedScript.

        * inspector/InjectedScriptModule.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        Only ASSERT the result was an object if the Module claims it returns an object.

        * inspector/InjectedScriptCanvasModule.h:
        (WebCore::InjectedScriptCanvasModule::returnsObject):
        Return an object used later to call into the CanvasModule.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::injectedScriptForEval):
        Ensure the CommandLineAPIModule is loaded in the Page's InjectedScript.

        * inspector/CommandLineAPIModuleSource.js: Added.
        Create the CommandLineAPI class and place it on injectedScript.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype._evaluateOn):
        Inject either the BasicCommandLineAPI or extended CommandLineAPI.
        Derive the globalObject dynamically instead of assuming window.
        Inject the commandLineAPI on window.console or the globalObject based on context.
        Audit and rename uses of "window" to something like globalObject.

2013-12-20  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Implement smartMagnifyWithEvent: and make it work
        https://bugs.webkit.org/show_bug.cgi?id=125752
        <rdar://problem/15664245>

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Add some exports.

2013-12-20  Antti Koivisto  <antti@apple.com>

        http/tests/misc/object-image-error.html asserts
        https://bugs.webkit.org/show_bug.cgi?id=126074

        Reviewed by Andreas Kling.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAttachRenderers):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        (WebCore::HTMLPlugInImageElement::startLoadingImage):
        (WebCore::HTMLPlugInImageElement::startLoadingImageCallback):
        * html/HTMLPlugInImageElement.h:
        
            Start image load from post-attach so we don't re-enter attach when image load fails synchronously.

2013-12-20  Antti Koivisto  <antti@apple.com>

        Crashes in AccessibilityRenderObject::computeAccessibilityIsIgnored()
        https://bugs.webkit.org/show_bug.cgi?id=126073

        Reviewed by Ryosuke Niwa.

        Prevent the crash and try to catch in debug why it is happening.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::~AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::detach):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityRenderObject.h:

2013-12-20  Antti Koivisto  <antti@apple.com>

        Fix asserting accesibility tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::supportsFocus): Accessibility code checks focus status during painting.

2013-12-20  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r160909.
        Remove remaining uses of AttachLazily in code specific to the GTK port.

        * html/shadow/MediaControlsGtk.cpp:
        (WebCore::MediaControlsGtk::initializeControls):
        (WebCore::MediaControlsGtk::createTextTrackDisplay):

2013-12-19  Antti Koivisto  <antti@apple.com>

        Create render tree lazily
        https://bugs.webkit.org/show_bug.cgi?id=120685

        Reviewed by Andreas Kling.

        We currently recompute style and construct renderer for each DOM node immediately after they are added to 
        the tree. This is often inefficient as the style may change immediately afterwards and the work needs to be
        redone. 
        
        With this patch we always compute style and construct render tree lazily, either on style recalc timer or
        synchronously when they are needed. It also removes the 'attached' bit. If document has render tree then
        all nodes are conceptually "attached" even if this happens lazily.
        
        The patch slightly changes behavior of implicit CSS transitions. A synchronous style change during parsing
        may not trigger the animation anymore as laziness means we don't see anything changing. This matches Firefox
        and Chrome in our test cases.
        
        * WebCore.exp.in:
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::appendChild):
        
            All attaching is now lazy, remove AttachLazily.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        
            SVG renderers with !isValid() have empty display property value for some reason. Keep the behavior.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAppendChild):
        (WebCore::ContainerNode::updateTreeAfterInsertion):
        * dom/ContainerNode.h:
        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::createRenderTree):
        (WebCore::Document::destroyRenderTree):
        
            Remove attach bit maintenance.

        (WebCore::Document::webkitDidExitFullScreenForElement):
        
            Do lazy render tree reconstruction after returning from full screen. That is the only reliable way
            to get the render tree back to decent shape.

        * dom/Element.cpp:
        (WebCore::Element::isFocusable):
        
            Remove pointless !renderer()->needsLayout() assert.

        (WebCore::Element::addShadowRoot):
        (WebCore::Element::childShouldCreateRenderer):
        (WebCore::Element::resetComputedStyle):
        
            Take care to reset computed style in all descendants. attachRenderTree no longer does this.

        * dom/Element.h:
        * dom/Node.cpp:
        (WebCore::Node::insertBefore):
        (WebCore::Node::replaceChild):
        (WebCore::Node::appendChild):
        (WebCore::Node::setNeedsStyleRecalc):
        
            Propagate ReconstructRenderTree.

        (WebCore::Node::attached):
        
            Emulate the behavior of old attached bit for now so existing code calling this mostly stays working.

        * dom/Node.h:
        
            Add new ReconstructRenderTree value for StyleChangeType.

        * dom/Range.cpp:
        (WebCore::Range::isPointInRange):
        (WebCore::Range::comparePoint):
        (WebCore::Range::compareNode):
        (WebCore::Range::intersectsNode):
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::canRebalance):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        * html/HTMLDetailsElement.cpp:
        (WebCore::HTMLDetailsElement::didAddUserAgentShadowRoot):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::activeElement):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        
            TextControlInnerTextElement always preserves newline even if it doesn't have style yet.

        (WebCore::HTMLElement::supportsFocus):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::shouldAutofocus):
        
            Don't autofocus until we have renderer.

        * html/HTMLFormControlElementWithState.cpp:
        (WebCore::HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::didNotifySubtreeInsertions):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        
            Lazy render tree construction.

        (WebCore::HTMLInputElement::parseAttribute):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseAttribute):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::didAddUserAgentShadowRoot):
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::executeTask):
        
            Don't attach renderer after construction.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::invalidateDistribution):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::willAttachRenderers):
        (WebCore::InsertionPoint::willDetachRenderers):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MediaControls.cpp:
        (WebCore::MediaControls::createTextTrackDisplay):
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::createControls):
        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::getDisplayTree):
        * loader/PlaceholderDocument.cpp:
        (WebCore::PlaceholderDocument::createRenderTree):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::preload):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::attachTextRenderer):
        (WebCore::Style::detachTextRenderer):
        
            Remove attached bit maintenance.

        (WebCore::Style::attachChildren):
        (WebCore::Style::attachShadowRoot):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::detachShadowRoot):
        (WebCore::Style::detachRenderTree):
        (WebCore::Style::resolveLocal):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::handleAttributeChange):
        
            Make lazy.

        * testing/Internals.cpp:
        (WebCore::Internals::attached):
        (WebCore::Internals::elementRenderTreeAsText):
        (WebCore::Internals::markerAt):
        (WebCore::Internals::nodesFromRect):

2013-12-20  Andreas Kling  <akling@apple.com>

        Devirtualize RenderElement::setStyle().
        <https://webkit.org/b/126065>

        setStyle() was only virtual in order to let RenderSVGBlock override
        the display type in some cases. Devirtualized it and moved the fixup
        logic to StyleResolver::adjustRenderStyle().

        This hack had an evil twin in RenderElement::initializeStyle() that
        also goes away. FIXME--!

        Based on a Blink change by Elliott Sprehn.

        Reviewed by Antti Koivisto.

2013-12-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] When changing flow-from/flow-into on :hover, elements overflowing the region are not correctly repainted
        https://bugs.webkit.org/show_bug.cgi?id=117259

        Reviewed by Antti Koivisto.

        When computing the repaint rect for a region, the existing visual overflow must be taken into consideration.
        For this purpose, I overridden the visualOverflowRect method in RenderNamedFlowFragment, which ends up being
        called from RenderBox::clippedOverflowRectForRepaint. 

        Test: fast/regions/hover-single-flow-from-none-overflow.html
              fast/regions/hover-single-flow-from-none-overflow-top.html

        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::visualOverflowRect):
        * rendering/RenderNamedFlowFragment.h:

2013-12-20  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Test: accessibility/children-changed-sends-notification.html

        Emit children-changed::add and children-changed::remove whenever
        an object has been added/removed to the accessibility hierarchy,
        that is, when a new AtkObject is being attached/detached.

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::detachWrapper): Added a new parameter and
        updated all the prototypes in different ports.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache): Call detachWrapper()
        specifying that we do it because the cache is being destroyed.
        (WebCore::AXObjectCache::remove): Call detachWrapper() specifying
        that we do it because an accessible element is being destroyed.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper): Emit the children-changed
        signal when needed. We rely on the cached reference to the parent
        AtkObject (using the implementation of atk_object_get_parent from
        the AtkObject class) to find the right object to emit the signal
        from here, since the accessibility hierarchy from WebCore will no
        longer be accessible at this point.
        (WebCore::AXObjectCache::attachWrapper): Emit the children-change
        signal from here unless we are in the middle of a layout update,
        trying to provide as much information (e.g. the offset) as possible.
        (WebCore::AXObjectCache::postPlatformNotification): Make sure we
        update (touch) the subtree under an accessibility object whenever
        we receive AXChildrenChanded from WebCore, to ensure that those
        objects will also be visible rightaway to ATs, and that those get
        properly notified of the event at that very same moment.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper): Updated function signature.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Ditto.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper): Ditto.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::children): Add the option ot
        request the AccessibilityChildrenVector without updating it if
        needed, to avoid maybe recreating the child subtree when trying to
        get the offset of a newly attached element from attachWrapper.
        * accessibility/AccessibilityObject.h:

2013-12-20  Laszlo Vidacs  <lvidacs.u-szeged@partner.samsung.com>

        Move function calls outside loop in dom
        https://bugs.webkit.org/show_bug.cgi?id=125916

        Reviewed by Csaba Osztrogonác.

        Do not call length() in each iteration.

        * dom/Element.cpp:
        (WebCore::Element::cloneAttributesFromElement):
        * dom/Node.cpp:
        (WebCore::Node::dumpStatistics):

2013-12-19  Beth Dakin  <bdakin@apple.com>

        REGRESSION: cnn.com will continue to reveal 1 px of overhang after rubber-banding 
        at the top
        https://bugs.webkit.org/show_bug.cgi?id=126054

        Reviewed by Simon Fraser.

        This regression was caused by http://trac.webkit.org/changeset/160791 It turns out 
        that the line of code I removed was not always a no-op. In some instances, like on 
        cnn.com, it would ensure that our final scroll position after a rubber-band was 
        not something within the overhang area. It was still wrong in its assumption that 
        rubber-band is always bouncing back the spot it originated from. So this patch 
        continues to ignore the rubber-bands origin, and instead finds the nearest point 
        that is not in the overhang area, and scrolls to that point instead of the origin.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::adjustScrollPositionToBoundsIfNecessary):
        * platform/mac/ScrollAnimatorMac.h:
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionToBoundsIfNecessary):
        * platform/mac/ScrollElasticityController.h:
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2013-12-19  Simon Fraser  <simon.fraser@apple.com>

        Clarify the behavior of composited canvases
        https://bugs.webkit.org/show_bug.cgi?id=126042

        Reviewed by Tim Horton.

        Different platforms composite 2D and 3D canvases in different ways.
        
        "Accelerated 2D" canvases, and WebGL are always set as GraphicsLayer
        contents.
        
        "IOSurface" canvases (Mac and iOS-only) get a compositing layer, but
        paint into it (because this is fast, and a convenient way to get
        synchronization).
        
        So make these behaviors explicit in RenderLayerBacking and RenderLayerCompositor.
        No behavior changes on OS X, bug fix on iOS.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::canvasCompositingStrategy):
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::contentChanged):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):

2013-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add InspectorFrontendHost.debuggableType to let the frontend know it's backend is JavaScript or Web
        https://bugs.webkit.org/show_bug.cgi?id=126016

        Reviewed by Timothy Hatcher.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::debuggableType):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Expose the debuggableType to the frontend. In WebCore it is always a "web" type.

2013-12-19  Benjamin Poulain  <benjamin@webkit.org>

        Add an utility class to simplify generating function calls
        https://bugs.webkit.org/show_bug.cgi?id=125972

        Reviewed by Geoffrey Garen.

        FunctionCall is a little helper class to make function calls from the JIT
        in 3 or 4 lines.

        FunctionCall takes a StackAllocator, a RegisterAllocator and a function pointer.
        When the call is generated, the helper saves the registers as necessary, aligns
        the stack, does the call, restores the stack, and restore the registers.

        * cssjit/FunctionCall.h: Added.
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setFunctionAddress):
        (WebCore::FunctionCall::setFirstArgument):
        (WebCore::FunctionCall::call):

        (WebCore::FunctionCall::callAndBranchOnCondition): Most test functions used
        with FunctionCall return a boolean. When the boolean is the sole purpose of the function
        call, this provides an easy way to branch on the boolean without worrying about registers.

        The return register is tested first, then all the saved registers are restored from the stack
        (which can include the return register), finally the flags are used for a jump.

        (WebCore::FunctionCall::prepareAndCall):
        (WebCore::FunctionCall::cleanupPostCall):
        (WebCore::FunctionCall::saveAllocatedRegisters):
        (WebCore::FunctionCall::restoreAllocatedRegisters):
        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/FunctionCall.h: Added.
        (WebCore::FunctionCall::FunctionCall):
        (WebCore::FunctionCall::setFunctionAddress):
        (WebCore::FunctionCall::setFirstArgument):
        (WebCore::FunctionCall::call):
        (WebCore::FunctionCall::callAndBranchOnCondition):
        (WebCore::FunctionCall::prepareAndCall):
        (WebCore::FunctionCall::cleanupPostCall):
        (WebCore::FunctionCall::saveAllocatedRegisters):
        (WebCore::FunctionCall::restoreAllocatedRegisters):

2013-12-19  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out the KeyedDecoder class
        https://bugs.webkit.org/show_bug.cgi?id=126031

        Reviewed by Andreas Kling.

        KeyedDecoder is going to be the new way to decode back forward trees.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::decodeBackForwardTree):
        * history/HistoryItem.h:
        * platform/KeyedCoding.h:
        (WebCore::KeyedDecoder::~KeyedDecoder):

2013-12-19  Oliver Hunt  <oliver@apple.com>

        DOM bindings should use thisValue for attributes
        https://bugs.webkit.org/show_bug.cgi?id=126011

        Reviewed by Antti Koivisto.

        Make all standard DOM attributes use the thisValue instead
        of the slot object.  This requires using a dynamic cast in
        the attribute getters. Happily for normal uses this a single
        indirect load and pointer compare, and we were already doing
        it for many attributes.

        Alas it's too expensive to do this on the window object still
        due to the proxy indirection that intercepts global variable
        access.  I'll correct this in a follow on patch (bug 126013).

        A number of custom getters have also been updated to use the
        thisValue and full type checks.

        This patch still leaves the index and generic named getters
        on the slot based model as fixing these cases requires more
        complicated changes.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::jsTestActiveDOMObjectExcitingAttr):
        (WebCore::jsTestActiveDOMObjectConstructor):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::jsTestCustomNamedGetterConstructor):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::jsTestEventConstructorAttr1):
        (WebCore::jsTestEventConstructorAttr2):
        (WebCore::jsTestEventConstructorConstructor):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::jsTestEventTargetConstructor):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::jsTestExceptionName):
        (WebCore::jsTestExceptionConstructor):
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
        (WebCore::jsTestGenerateIsReachableConstructor):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::jsTestInterfaceConstructorImplementsStaticReadOnlyAttr):
        (WebCore::jsTestInterfaceConstructorImplementsStaticAttr):
        (WebCore::jsTestInterfaceImplementsStr1):
        (WebCore::jsTestInterfaceImplementsStr2):
        (WebCore::jsTestInterfaceImplementsStr3):
        (WebCore::jsTestInterfaceImplementsNode):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticReadOnlyAttr):
        (WebCore::jsTestInterfaceConstructorSupplementalStaticAttr):
        (WebCore::jsTestInterfaceSupplementalStr1):
        (WebCore::jsTestInterfaceSupplementalStr2):
        (WebCore::jsTestInterfaceSupplementalStr3):
        (WebCore::jsTestInterfaceSupplementalNode):
        (WebCore::jsTestInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerConstructor):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::jsTestNamedConstructorConstructor):
        * bindings/scripts/test/JS/JSTestNode.cpp:
        (WebCore::jsTestNodeConstructor):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjReadOnlyLongAttr):
        (WebCore::jsTestObjReadOnlyStringAttr):
        (WebCore::jsTestObjReadOnlyTestObjAttr):
        (WebCore::jsTestObjConstructorStaticReadOnlyLongAttr):
        (WebCore::jsTestObjConstructorStaticStringAttr):
        (WebCore::jsTestObjConstructorTestSubObj):
        (WebCore::jsTestObjTestSubObjEnabledBySettingConstructor):
        (WebCore::jsTestObjEnumAttr):
        (WebCore::jsTestObjByteAttr):
        (WebCore::jsTestObjOctetAttr):
        (WebCore::jsTestObjShortAttr):
        (WebCore::jsTestObjUnsignedShortAttr):
        (WebCore::jsTestObjLongAttr):
        (WebCore::jsTestObjLongLongAttr):
        (WebCore::jsTestObjUnsignedLongLongAttr):
        (WebCore::jsTestObjStringAttr):
        (WebCore::jsTestObjTestObjAttr):
        (WebCore::jsTestObjXMLObjAttr):
        (WebCore::jsTestObjCreate):
        (WebCore::jsTestObjReflectedStringAttr):
        (WebCore::jsTestObjReflectedIntegralAttr):
        (WebCore::jsTestObjReflectedUnsignedIntegralAttr):
        (WebCore::jsTestObjReflectedBooleanAttr):
        (WebCore::jsTestObjReflectedURLAttr):
        (WebCore::jsTestObjReflectedCustomIntegralAttr):
        (WebCore::jsTestObjReflectedCustomBooleanAttr):
        (WebCore::jsTestObjReflectedCustomURLAttr):
        (WebCore::jsTestObjTypedArrayAttr):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjStringAttrWithGetterException):
        (WebCore::jsTestObjStringAttrWithSetterException):
        (WebCore::jsTestObjCustomAttr):
        (WebCore::jsTestObjWithScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAttribute):
        (WebCore::jsTestObjWithScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttribute):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises):
        (WebCore::jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute):
        (WebCore::jsTestObjWithScriptArgumentsAndCallStackAttribute):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::jsTestObjConditionalAttr4Constructor):
        (WebCore::jsTestObjConditionalAttr5Constructor):
        (WebCore::jsTestObjConditionalAttr6Constructor):
        (WebCore::jsTestObjCachedAttribute1):
        (WebCore::jsTestObjCachedAttribute2):
        (WebCore::jsTestObjAnyAttribute):
        (WebCore::jsTestObjContentDocument):
        (WebCore::jsTestObjMutablePoint):
        (WebCore::jsTestObjImmutablePoint):
        (WebCore::jsTestObjStrawberry):
        (WebCore::jsTestObjStrictFloat):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::jsTestObjReplaceableAttribute):
        (WebCore::jsTestObjNullableDoubleAttribute):
        (WebCore::jsTestObjNullableLongAttribute):
        (WebCore::jsTestObjNullableBooleanAttribute):
        (WebCore::jsTestObjNullableStringAttribute):
        (WebCore::jsTestObjNullableLongSettableAttribute):
        (WebCore::jsTestObjNullableStringValue):
        (WebCore::jsTestObjAttribute):
        (WebCore::jsTestObjAttributeWithReservedEnumType):
        (WebCore::jsTestObjConstructor):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::jsTestOverloadedConstructorsConstructor):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::jsTestSerializedScriptValueInterfaceValue):
        (WebCore::jsTestSerializedScriptValueInterfaceReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedValue):
        (WebCore::jsTestSerializedScriptValueInterfacePorts):
        (WebCore::jsTestSerializedScriptValueInterfaceCachedReadonlyValue):
        (WebCore::jsTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsUnsignedLongLongAttr):
        (WebCore::jsTestTypedefsImmutableSerializedScriptValue):
        (WebCore::jsTestTypedefsConstructorTestSubObj):
        (WebCore::jsTestTypedefsAttrWithGetterException):
        (WebCore::jsTestTypedefsAttrWithSetterException):
        (WebCore::jsTestTypedefsStringAttrWithGetterException):
        (WebCore::jsTestTypedefsStringAttrWithSetterException):
        (WebCore::jsTestTypedefsConstructor):
        * bindings/scripts/test/JS/JSattribute.cpp:
        (WebCore::jsattributeReadonly):
        (WebCore::jsattributeConstructor):
        * bindings/scripts/test/JS/JSreadonly.cpp:
        (WebCore::jsreadonlyConstructor):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):

2013-12-19  Andy Estes  <aestes@apple.com>

        Remove WebFilterEvaluator wrappers from WebKitSystemInterface
        https://bugs.webkit.org/show_bug.cgi?id=126028

        Reviewed by Anders Carlsson.

        It's overkill to pipe access to WebFilterEvaluator through
        WebKitSystemInterface. Instead, include WebFilterEvaluator.h when it
        exists and re-declare WebFilterEvaluator when it doesn't.
        
        WebKitSystemInterface used to soft-link WebContentAnalysis.framework
        since OS X 10.7 didn't contain this framework. Since we no longer
        support 10.7, we can now directly link against the framework.

        * Configurations/WebCore.xcconfig: Add /System/Library/PrivateHeaders
        to the system framework search path at both compile and link time so
        that we can find WebContentAnalysis.framework.
        * WebCore.exp.in: Don't export removed symbols.
        * WebCore.xcodeproj/project.pbxproj: Added WebContentAnalysis.framework
        to the 'Link Binary With Libraries' build phase.
        * platform/mac/ContentFilterMac.mm: Included WebFilterEvaluator.h when
        it exists and re-declared WebFilterEvaluator when it doesn't.
        (WebCore::ContentFilter::ContentFilter): Directly called a method on
        m_platformContentFilter rather than going through WKSI.
        (WebCore::ContentFilter::isEnabled): Ditto.
        (WebCore::ContentFilter::addData): Ditto.
        (WebCore::ContentFilter::finishedAddingData): Ditto.
        (WebCore::ContentFilter::needsMoreData): Ditto.
        (WebCore::ContentFilter::didBlockData): Ditto.
        * platform/mac/WebCoreSystemInterface.h: Removed function pointers for
        calling into WKSI.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.

2013-12-19  Andreas Kling  <akling@apple.com>

        Use CascadedProperties for page and keyframe style resolution as well.
        <https://webkit.org/b/125997>

        Port StyleResolver's styleForKeyframe() and styleForPage() over to
        the new property cascading code. Neither of them care about !important
        or matched properties caches, so the code is very simple.

        Removed the old applyMatchedProperties and applyProperties code with
        low/high priority passes.

        Reviewed by Antti Koivisto.

2013-12-19  Eric Carlson  <eric.carlson@apple.com>

        tryAddEventListener uses local PassRefPtr<>
        https://bugs.webkit.org/show_bug.cgi?id=126001

        Reviewed by Daniel Bates.

        * dom/Node.cpp:
        (WebCore::tryAddEventListener): Put PassRefPtr<EventListener> parameter into a local RefPtr
            because it is sometimes used twice.

2013-12-19  Ryosuke Niwa  <rniwa@webkit.org>

        overflowchanged event could cause a crash
        https://bugs.webkit.org/show_bug.cgi?id=125978

        Reviewed by Tim Horton.

        Made the event asynchrnous by re-using Document's event queuing ability. Also removed
        the infrastructure to queue up events in FrameView.

        Test: fast/events/overflowchanged-inside-selection-collapse-crash.html

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        (WebCore::Document::enqueueOverflowEvent):
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::updateOverflowStatus):
        * page/FrameView.h:
        * rendering/RenderBlock.cpp:
        (WebCore::OverflowEventDispatcher::~OverflowEventDispatcher):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollRectToVisible):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::start):

2013-12-19  Daniel Bates  <dabates@apple.com>

        Fix the Windows build after <http://trac.webkit.org/changeset/160841>
        (https://bugs.webkit.org/show_bug.cgi?id=125879)

        Add ENABLE(CACHE_PARTITIONING)-guard around call to ResourceRequest::setCachePartition()
        as this function is only compiled when building with cache partitioning enabled.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::addImageToCache):

2013-12-19  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/accessibility changes
        https://bugs.webkit.org/show_bug.cgi?id=125925

        Reviewed by Chris Fleizach.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint): Opt out of code when building for iOS.

2013-12-19  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Compile fix for VS2013 when using ACCELERATED_COMPOSITING.
        https://bugs.webkit.org/show_bug.cgi?id=124866

        Reviewed by Darin Adler.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        * platform/graphics/TiledBackingStore.h:
        Added constructor overload to avoid compile errors
        from using MSVC's make_unique as a default parameter.

2013-12-19  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/loader changes
        https://bugs.webkit.org/show_bug.cgi?id=125879

        Reviewed by Darin Adler.

        * WebCore.exp.in: Added symbols for MemoryCache::{addImageToCache, removeImageFromCache}().
        * loader/DocumentLoader.cpp:
        (WebCore::areAllLoadersPageCacheAcceptable): Added.
        (WebCore::DocumentLoader::DocumentLoader): Initialize m_subresourceLoadersArePageCacheAcceptable.
        (WebCore::DocumentLoader::stopLoading): Modified to conditionally call areAllLoadersPageCacheAcceptable().
        (WebCore::DocumentLoader::handleSubstituteDataLoadSoon): Modified to query FrameLoader::loadsSynchronously()
        whether to load substitute data immediately or to schedule a load.
        (WebCore::DocumentLoader::responseReceived): Modified to create a content filer when the response protocol
        is either HTTP or HTTPS, assuming content filtering is enabled.
        (WebCore::DocumentLoader::dataReceived): Modified to call DocumentLoader::setContentFilterForBlockedLoad()
        as appropriate.
        (WebCore::DocumentLoader::clearMainResourceLoader): Added PLATFORM(IOS)-guarded code. Also added a
        FIXME comment to remove the PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
        (WebCore::DocumentLoader::setResponseMIMEType): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::DocumentLoader::startLoadingMainResource): Added PLATFORM(IOS)-guarded code. Also added a
        FIXME comment to remove the PLATFORM(IOS)-guard once we upstream the iOS changes to ResourceRequest.h.
        I also substituted static NeverDestroyed<> for DEFINE_STATIC_LOCAL.
        (WebCore::DocumentLoader::setContentFilterForBlockedLoad): Added; guarded by USE(CONTENT_FILTERING).
        (WebCore::DocumentLoader::handleContentFilterRequest): Added; guarded by USE(CONTENT_FILTERING) and PLATFORM(IOS).
        Also added a FIXME comment to remove the PLATFORM(IOS) guard inside its function body once we upstream
        file ContentFilterIOS.mm and implement ContentFilter::requestUnblockAndDispatchIfSuccessful() for Mac.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::setResponse): Added; guard by PLATFORM(IOS). Also added a FIXME comment as
        this method seems to violate the encapsulation of DocumentLoader.
        (WebCore::DocumentLoader::subresourceLoadersArePageCacheAcceptable): Added.
        (WebCore::DocumentLoader::documentURL): Added; returns the URL of the document resulting from the DocumentLoader.
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument): Added iOS-specific code to create a PDF document.
        * loader/EmptyClients.cpp:
        (WebCore::EmptyChromeClient::openDateTimeChooser): Opt out of compiling this code for iOS. Also substituted
        nullptr for 0.
        * loader/EmptyClients.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameProgressTracker::~FrameProgressTracker):
        (WebCore::FrameLoader::FrameLoader): Initialize m_loadsSynchronously.
        (WebCore::FrameLoader::initForSynthesizedDocument): Added; guarded by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::FrameLoader::checkCompleted): Added iOS-specific code with FIXME comment.
        (WebCore::FrameLoader::willLoadMediaElementURL): Added iOS-specific code.
        (WebCore::FrameLoader::stopForUserCancel): Added iOS-specific code and FIXME comment.
        (WebCore::FrameLoader::commitProvisionalLoad): Added iOS-specific code and FIXME comment.
        (WebCore::FrameLoader::transitionToCommitted): Opt out of ENABLE(TOUCH_EVENTS) logic when building for iOS.
        (WebCore::FrameLoader::didFirstLayout): Added iOS-specific code.
        (WebCore::FrameLoader::connectionProperties): Added; guarded by PLATFORM(IOS).
        (WebCore::createWindow): Added iOS-specific code and FIXME comment.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::setLoadsSynchronously): Added.
        (WebCore::FrameLoader::loadsSynchronously): Added.
        * loader/FrameLoaderClient.h:
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState): Opt out of scroll position logic when building for iOS.
        (WebCore::HistoryController::replaceCurrentItem): Added.
        * loader/HistoryController.h:
        * loader/PlaceholderDocument.h: Changed access control of constructor from private to protected and removed the FINAL
        keyword from the class so that we can subclass PlaceholderDocument on iOS.
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy): Added USE(QUICK_LOOK)- and USE(CONTENT_FILTERING)-guarded code.
        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::shouldUsePurgeableMemory): Added; guarded by PLATFORM(IOS).
        * loader/ResourceBuffer.h:
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchWillSendRequest): Added USE(QUICK_LOOK)-guarded code.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad): Added iOS-specific code.
        (WebCore::ResourceLoadScheduler::scheduleLoad): Ditto.
        (WebCore::ResourceLoadScheduler::remove): Added iOS-specific code with FIXME comment.
        (WebCore::ResourceLoadScheduler::crossOriginRedirectReceived): Added null-check for variable oldHost. Also added
        iOS-specific code.
        (WebCore::ResourceLoadScheduler::servePendingRequests): Added iOS-specific code.
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init): Ditto.
        (WebCore::ResourceLoader::willSendRequest): Ditto.
        (WebCore::ResourceLoader::connectionProperties): Added; guarded by PLATFORM(IOS).
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::startLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::ResourceLoader::iOSOriginalRequest): Added; iOS-specific.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin): Added iOS-specific code.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Ditto.
        (WebCore::SubresourceLoader::startLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::SubresourceLoader::didFinishLoading): Added iOS-specific code.
        (WebCore::SubresourceLoader::willCancel): Ditto.
        (WebCore::SubresourceLoader::notifyDone): Ditto.
        (WebCore::SubresourceLoader::releaseResources): Ditto.
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCacheGroup): Added iOS-specific code.
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::fallbackCacheGroupForURL): Ditto.
        (WebCore::ApplicationCacheStorage::calculateQuotaForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::calculateUsageForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::calculateRemainingSizeForOriginExcludingCache): Ditto.
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin): Ditto.
        (WebCore::ApplicationCacheStorage::executeSQLCommand): Ditto.
        (WebCore::ApplicationCacheStorage::verifySchemaVersion): Ditto.
        (WebCore::ApplicationCacheStorage::openDatabase): Ditto.
        (WebCore::ApplicationCacheStorage::executeStatement): Ditto.
        (WebCore::ApplicationCacheStorage::store): Ditto.
        (WebCore::ApplicationCacheStorage::storeUpdatedType): Ditto.
        (WebCore::ApplicationCacheStorage::ensureOriginRecord): Ditto.
        (WebCore::ApplicationCacheStorage::loadCache): Ditto.
        (WebCore::ApplicationCacheStorage::remove): Ditto.
        (WebCore::ApplicationCacheStorage::empty): Ditto.
        (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto.
        (WebCore::ApplicationCacheStorage::manifestURLs): Ditto.
        (WebCore::ApplicationCacheStorage::cacheGroupSize): Ditto.
        (WebCore::ApplicationCacheStorage::deleteCacheGroup): Ditto.
        (WebCore::ApplicationCacheStorage::vacuumDatabaseFile): Ditto.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage): Added.
        (WebCore::CachedImage::imageSizeForRenderer): Added iOS-specific code.
        (WebCore::CachedImageManual::CachedImageManual): Added; guarded by USE(CF). Also added FIXME comment to incorporate
        the functionality of this class into CachedImage and to remove the USE(CF)-guard once we make MemoryCache::addImageToCache()
        platform-independent.
        (WebCore::CachedImageManual::mustRevalidateDueToCacheHeaders): Added; guarded by USE(CF).
        * loader/cache/CachedImage.h: Removed FINAL keyword from class so that we can define derived class CachedImageManual.
        (WebCore::CachedImage::isManual): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::CachedImageManual::addFakeClient): Added; guarded by USE(CF).
        (WebCore::CachedImageManual::removeFakeClient): Added; guarded by USE(CF).
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load): Added iOS-specific code.
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::loadDone): Added argument shouldPerformPostLoadActions, defaults to true. Modified
        to conditionally call performPostLoadActions() with respect to the argument shouldPerformPostLoadActions.
        (WebCore::CachedResourceLoader::preload): Added iOS-specific code.
        (WebCore::CachedResourceLoader::checkForPendingPreloads): Ditto.
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.cpp:
        (WebCore::memoryCache):
        (WebCore::MemoryCache::add): Added iOS-specific code.
        (WebCore::MemoryCache::revalidationFailed): Ditto.
        (WebCore::MemoryCache::resourceForRequest): Ditto.
        (WebCore::MemoryCache::addImageToCache): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::MemoryCache::removeImageFromCache): Added; guarded by USE(CF). Also added FIXME comment.
        (WebCore::MemoryCache::pruneLiveResources): Modified to take argument shouldDestroyDecodedDataForAllLiveResources.
        (WebCore::MemoryCache::pruneLiveResourcesToSize): Modified to take argument shouldDestroyDecodedDataForAllLiveResources,
        defaults to false. When this argument is true we destroy the decoded data for all live resources from the memory cache.
        Such functionality is useful when the system is running low on memory.
        (WebCore::MemoryCache::evict): Added iOS-specific code.
        * loader/cache/MemoryCache.h:
        * loader/cf/SubresourceLoaderCF.cpp:
        (WebCore::SubresourceLoader::didReceiveDataArray): Actually make this code compile. In particular, there is no
        method called sendDataToResource on SubresourceLoader or in its class hierarchy.
        * loader/mac/DocumentLoaderMac.cpp:
        (WebCore::DocumentLoader::schedule): This method has an empty implementation when building for iOS.
        (WebCore::DocumentLoader::unschedule): Ditto.
        * platform/graphics/BitmapImage.h: Exposed decodedSize() to access the decoded size of the bitmap image.
        This functionality is used in MemoryCache::addImageToCache().

2013-12-19  Jer Noble  <jer.noble@apple.com>

        Build fix for platforms which do not define -[AVSampleBufferAudioRenderer muted].
        Rubber-stamped by Eric Carlson.

        To work around platforms with broken AVSampleBufferAudioRenderer headers, just
        declare only those functions we need, and update isAvalable to bail out early if
        those methods are not present.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:

2013-12-16  Darin Adler  <darin@apple.com>

        Improve "bad parent" and "bad child list" assertions in line boxes
        https://bugs.webkit.org/show_bug.cgi?id=125656

        Reviewed by Sam Weinig.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::root): Use parent() function with assertions rather than
        using m_parent function, which skips the assertions.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::removeAndDestroyTextBoxes): Call invalidateParentChildLists
        if we are in the optimized document-destruction code path and destroying children
        without removing them from their parents.
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::invalidateParentChildLists): Added.
        * rendering/RenderTextLineBoxes.h: Added invalidateParentChildLists.

2013-12-19  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/15696824> [CFNetwork] Loading stops at server redirects
        https://bugs.webkit.org/show_bug.cgi?id=125984

        Reviewed by Anders Carlsson.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::willSendRequest): If the client uses async callbacks, call its
        willSendRequestAsync callback instead if willSendRequest.

2013-12-19  Andreas Kling  <akling@apple.com>

        CascadedProperties: Deferred properties should have inline capacity.
        <https://webkit.org/b/125994>

        Give CascadedProperties::m_deferredProperties an inline capacity
        of 8 to sidestep malloc churn (0.2% of HTML5-8266 profile.)

        Reviewed by Antti Koivisto.

2013-12-19  Andreas Kling  <akling@apple.com>

        Two small refinements to matched properties cache.
        <https://webkit.org/b/125992>

        - Avoid computing the matched properties hash if we're banned from
          using the cache anyway.

        - When adding a new entry to the cache, use move semantics to avoid
          creating a transient copy of all the data.

        Reviewed by Antti Koivisto.

2013-12-19  Andreas Kling  <akling@apple.com>

        CascadedProperties should use a bitset to track property presence.
        <https://webkit.org/b/125991>

        Avoid zeroing out a bunch of memory in the CascadedProperties ctor
        by using a bitset to track whether each property is present in the
        cascaded set.

        Reviewed by Antti Koivisto.

2013-12-19  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Fix description of parameters in Page.setGeolocationOverride
        https://bugs.webkit.org/show_bug.cgi?id=125983

        Reviewed by Joseph Pecoraro.

        No new tests, no changes in behavior.

        * inspector/protocol/Page.json:

2013-12-18  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add AVSampleBufferRendererSynchronizer support.
        https://bugs.webkit.org/show_bug.cgi?id=125954

        Reviewed by Eric Carlson.

        Instead of slaving all the various renderer's CMTimebases to one master timebase,
        use AVSampleBufferRenderSynchronizer, which essentially does the same thing.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::CMTimebaseEffectiveRateChangedCallback): Added; call effectiveRateChanged().
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC): Set up
            the synchronizer and all the observers.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC): Tear down
            the same.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable): Require the
            AVSampleBufferRenderSynchronizer class.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal): Convert Clock -> Synchronizer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::effectiveRateChanged): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer): Ditto.

        Drive-by fix; audio samples can't be subdivided, and video samples are
        rarely combined, so remove the call to CMSampleBufferCallForEachSample:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):

2013-12-18  Andreas Kling  <akling@apple.com>

        CSS: Fall back to cache-less cascade when encountering explicitly inherited value.
        <https://webkit.org/b/125968>

        When encountering an explicitly inherited value for a property that's not
        "statically inherited", drop out of the matched properties cache path
        immediately instead of waiting for some coincidence to trigger it later on.

        Fixes 3 asserting table tests:

        - fast/table/border-collapsing/cached-69296.html
        - tables/mozilla/bugs/bug27038-3.html
        - tables/mozilla_expected_failures/marvin/backgr_border-table-row-group.html

        Reviewed by Antti Koivisto.

2013-12-18  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches
        https://bugs.webkit.org/show_bug.cgi?id=125970

        Reviewed by Antti Koivisto.

        The bug was caused by containingBlockForAbsolutePosition returning a non-RenderBlock render object.
        Fixed the bug by obtaining its containg block.

        Also changed the return type of containingBlockForFixedPosition, containingBlockForAbsolutePosition,
        containingBlockForObjectInFlow from RenderElement to RenderBlock as all callers of these functions
        had assumed the return value to be an instance of RenderBlock.

        Test: svg/text/select-text-inside-non-static-position.html

        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::containingBlockForFixedPosition):
        (WebCore::containingBlockForAbsolutePosition):
        (WebCore::containingBlockForObjectInFlow):
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):

2013-12-18  Andreas Kling  <akling@apple.com>

        Don't waste cycles on zeroing every CascadedProperties::Property.
        <https://webkit.org/b/125966>

        The CascadedProperties constructor already zeroes out the whole
        property array. Move the memset() to setDeferred() which is the only
        other place we create a Property.

        Brought to you by Instruments.app. Profile your code today!

        Reviewed by Antti Koivisto.

2013-12-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify the BoxShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=125548

        Reviewed by Andreas Kling.

        Reduce BoxShape's footprint by about 2/3rds. Instead of caching the
        FloatRoundedRects which represent a BoxShape's shape-padding and shape-margin
        boundaries, compute them as needed.

        No new tests, this is just an internal refactoring.

        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::shapeMarginLogicalBoundingBox): Now just computes the bounding box rect.
        (WebCore::BoxShape::shapePaddingLogicalBoundingBox): Ditto.
        (WebCore::BoxShape::shapeMarginBounds): Removed the caching logic.
        (WebCore::BoxShape::shapePaddingBounds): Ditto.
        (WebCore::BoxShape::getExcludedIntervals): Use the computed margin bounds, instead of the cached one.
        (WebCore::BoxShape::getIncludedIntervals): Ditto (padding bounds).
        * rendering/shapes/BoxShape.h:
        (WebCore::BoxShape::BoxShape): Simplified the constructor.
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape):
        (WebCore::Shape::createShape):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add AVSampleBufferAudioRenderer support.
        https://bugs.webkit.org/show_bug.cgi?id=125905

        Reviewed by Eric Carlson.

        On platforms which support AVSampleBufferAudioRenderer, add support
        for playback of audio CMSampleBufferRefs generated by AVStreamDataParser.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable): Require AVSampleBufferAudioRenderer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVolume): Pass through to every audio renderer.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setMuted): Ditto.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addAudioRenderer): Slave the renderer's
            timebase to the master clock.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeAudioRenderer):
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC): Drive by fix; initialize
            m_enabledVideoTrackID.
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC): Call destroyRenderers().
        (WebCore::callProcessCodedFrameForEachSample): Drive by fix; convert the bool return to an OSErr.
        (WebCore::SourceBufferPrivateAVFObjC::destroyRenderers): Added; flush and destroy the audio
            renderers.  
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Call destroyRenderers().
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Enable or disable the audio
            renderer in response.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Added audio
            specific version.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::didBecomeReadyForMoreSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::notifyClientWhenReadyForMoreSamples): Ditto.

2013-12-18  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove leftover code from InspectorController after r108965
        https://bugs.webkit.org/show_bug.cgi?id=125956

        Reviewed by Joseph Pecoraro.

        No new tests, no changes in behavior.

        * inspector/InspectorController.h: PostWorkerNotificationToFrontendTask was removed in r108965.

2013-12-18  Andreas Kling  <akling@apple.com>

        CSS: Add a property cascading pass to style application.
        <https://webkit.org/b/125213>

        Add an intermediate pass to style application where we cascade all
        style properties to figure out their final values before starting
        to build RenderStyles.

        This opens up various opportunities for further optimization.

        Reviewed by Antti Koivisto.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::CascadedProperties::Property::Property):
        (WebCore::StyleResolver::CascadedProperties::CascadedProperties):
        (WebCore::StyleResolver::CascadedProperties::property):
        (WebCore::StyleResolver::CascadedProperties::set):
        (WebCore::StyleResolver::CascadedProperties::addStyleProperties):
        (WebCore::StyleResolver::CascadedProperties::addMatches):
        (WebCore::StyleResolver::CascadedProperties::Property::apply):

            Added. CascadedProperties is something of a container class
            that takes CSS property/value/linkMatchType as input and boils
            them down to the final values that will actually be used.

            Most properties are poked into an unfancy array where latest
            is greatest (unless !important, of course.) Some properties are
            queued up to be applied in parse order, more on that below.

        (WebCore::StyleResolver::applyCascadedProperties):
        (WebCore::StyleResolver::applyMatchedProperties):

            The brains of this patch. applyMatchedProperties() now creates
            a CascadedProperties and uses it to figure out the final values
            and uses applyCascadedProperties() to apply them. Deferred
            properties (parse order) are applied last.

            We may discover during property application that we won't be
            able to use a matched properties cache item. This happens if
            the effective zoom or font changes. If that happens, we start
            the process over, now with the cache disabled. This may need
            some optimization work.

        (WebCore::extractDirectionAndWritingMode):

            Directional properties ending in e.g -before or -after depend on
            the direction and writing mode in effect, so we must begin with
            resolving those properties before doing the full cascade.

            This is done by simply walking the set of matched properties and
            manually applying '-webkit-writing-mode' and 'direction'.

            If this starts showing up in profiles, we can easily cache some
            of the information in e.g RuleData to avoid the traversal here.

        (WebCore::elementTypeHasAppearanceFromUAStyle):

            To determine whether a form element is styled beyond the default
            UA style sheet, StyleResolver caches the border and background
            values from RenderStyle after applying the UA style sheet.

            Those values are then compared against after all style is applied
            and if some (platform-dependent) values differ, the element is
            considered "styled."

            This really only affects elements with -webkit-appearance values
            in the default UA style sheet, so this function determines if an
            element should take the goofy slow path for this.

        (WebCore::shouldApplyPropertyInParseOrder):
        (WebCore::StyleResolver::CascadedProperties::setDeferred):
        (WebCore::StyleResolver::CascadedProperties::applyDeferredProperties):

            Some CSS properties will write to the same RenderStyle fields when
            applied, so in order to maintain previous behavior, we must apply
            them in the order they were parsed.

            We accomplish this by keeping an ordered queue of such properties
            to apply separately after all the other properties.

        (WebCore::StyleResolver::CascadedProperties::setPropertyInternal):

            Helper for poking values into a CascadedProperties::Property.

        * css/StyleResolver.h:
        (WebCore::StyleResolver::state):

            Expose the StyleResolver::State so CascadedProperties can access it.

2013-12-16  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building WebKit1
        https://bugs.webkit.org/show_bug.cgi?id=116377

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Add a missing source required by WebKit1 to
        the WebCore build.

2013-12-18  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Simplify RectangleShape implementation
        https://bugs.webkit.org/show_bug.cgi?id=125536

        Reviewed by Andreas Kling.

        Instead of caching an instance of a private FloatRoundedRect (ish) class for
        RectangleShape's shape-margin and shape-padding bounds, we just compute
        the FloatRect and radii as needed. This reduces the classes footprint a little
        and it simplifies the implementation.

        Removed the private RectangleShape::ShapeBounds class and made its
        cornerInterceptForWidth() method a static function. Added members for
        the RectangleShape constructor args, and private getters for their properties.

        There are no new tests because this is just an internal refactoring.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::shapePaddingBounds):
        (WebCore::RectangleShape::shapeMarginBounds):
        (WebCore::ellipseXIntercept):
        (WebCore::ellipseYIntercept):
        (WebCore::RectangleShape::getExcludedIntervals):
        (WebCore::RectangleShape::getIncludedIntervals):
        (WebCore::cornerInterceptForWidth):
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        (WebCore::RectangleShape::buildPath):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::RectangleShape):
        (WebCore::RectangleShape::rx):
        (WebCore::RectangleShape::ry):
        (WebCore::RectangleShape::x):
        (WebCore::RectangleShape::y):
        (WebCore::RectangleShape::width):
        (WebCore::RectangleShape::height):
        * rendering/shapes/Shape.cpp:
        (WebCore::createCircleShape): Renamed this internal function (it was createShapeCircle) because it was inconsistent.
        (WebCore::createEllipseShape): Ditto.
        (WebCore::Shape::createShape):

2013-12-18  Benjamin Poulain  <benjamin@webkit.org>

        Add a simple stack abstraction for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=125908

        Reviewed by Geoffrey Garen.

        StackAllocator provides an abstraction to make it hard to make mistakes and protects from obvious
        issues at runtime.

        The key roles of StackAllocators are:
        -Provide the necessary stack alignment for function calls (only x86_64 stack for now).
        -Provide ways to save registers on the stack, restore or discard them as needed.
        -Crash at runtime if an operation would obviously cause a stack inconsistency.

        The way simple inconsistencies are detected is through the StackReference object
        returned whenever something is added on the stack.
        The object keeps a reference to the offset of what has been pushed. When the StackReference
        is used to recover the register, if the offset is different, there is a missmatch between
        push() and pop() after the object was pushed.

        * cssjit/StackAllocator.h: Added.
        (WebCore::StackAllocator::StackReference::StackReference):
        (WebCore::StackAllocator::StackReference::operator unsigned):
        (WebCore::StackAllocator::StackAllocator):
        (WebCore::StackAllocator::~StackAllocator):
        (WebCore::StackAllocator::push):
        (WebCore::StackAllocator::pop):

        (WebCore::StackAllocator::alignStackPreFunctionCall):
        (WebCore::StackAllocator::unalignStackPostFunctionCall):
        Those helpers provide a simple way to have a valid stack prior to a function call.
        Since StackAllocator knows the offset and the platform rules, it can adjust the stack
        if needed for x86_64.

        (WebCore::StackAllocator::discard): Discard a single register or the full stack.

        (WebCore::StackAllocator::combine): combining stacks is the way to solve branches
        where the stack is used differently in each case.
        To do that, the stack is first copied to A and B. Each branch works on its own
        StackAllocator copy, then the two copies are linked together to the original stack.

        The copies ensure the local consistency in each branch, linking the copies ensure global
        consistencies and that both branches end in the same stack state.

        (WebCore::StackAllocator::offsetToStackReference): Helper function to access the stack by address
        through its StackReference.

        (WebCore::StackAllocator::reset):

2013-12-18  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for GStreamer on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=125946

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        Use new GStreamer property sheets for WinCairo.
        * WebCore.vcxproj/WebCoreCairo.props:
        Include GStreamer directory.

2013-12-18  Oliver Hunt  <oliver@apple.com>

        Refactor CodeGeneratorJS - Move attribute function creation out of getOwnPropertyName guard
        https://bugs.webkit.org/show_bug.cgi?id=125940

        Reviewed by Simon Fraser.

        This is just a huge block move of code out from behind the
        ImplementationOverridesGetOwnProperty guard.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):

2013-12-18  Tim Horton  <timothy_horton@apple.com>

        [iOS] Frequent ASSERT(hasOneRef()) in SharedBuffer::releasePurgeableBuffer
        https://bugs.webkit.org/show_bug.cgi?id=125939

        Reviewed by Simon Fraser.

        r146082 fixed these assertions by not making a purgeable buffer if a SharedBuffer
        has multiple refs, but the check was put in ResourceBuffer::createPurgeableBuffer
        instead of down in SharedBuffer::createPurgeableBuffer.

        This is fine for most WebKit ports, because ResourceBuffer::createPurgeableBuffer
        is the only caller of SharedBuffer::createPurgeableBuffer, but causes trouble for
        not-quite-yet-upstreamed iOS SharedBuffer code, which adds another caller
        of SharedBuffer::createPurgeableBuffer.

        Push the early-return down into SharedBuffer::createPurgeableBuffer to ensure
        that all callers are protected from creating a purgeable buffer if the SharedBuffer
        has previously been vended elsewhere.

        No new tests, has no effect on the current Open Source tree.

        * loader/ResourceBuffer.cpp:
        (WebCore::ResourceBuffer::createPurgeableBuffer):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::createPurgeableBuffer):

2013-12-18  Beth Dakin  <bdakin@apple.com>

        Starting a momentum scroll while rubber banding can cause scrolling to jump back 
        when the rubberband snaps
        https://bugs.webkit.org/show_bug.cgi?id=119507
        -and corresponding-
        <rdar://problem/14655893>

        Reviewed by Simon Fraser.

        This line of code was added with the very first implementation of rubber-banding. 
        As far as I can tell, it was always a belt-and-suspenders line of code that is a 
        no-op in all normal rubber-banding. In this J-shaped scrolling case, this line of 
        code is what causes the bug to occur because this line of code assumes that your 
        rubber-band is always trying to take you back to the origin. 
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::ScrollElasticityController::snapRubberBandTimerFired):

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: make aria-hidden=false work with subtrees
        https://bugs.webkit.org/show_bug.cgi?id=125592

        Reviewed by Mario Sanchez Prada.

        When a hidden object uses aria-hidden=false, that needs to apply to
        the entire sub-tree (not just the object with aria-hidden on it as it does now).

        Enabling this had the side effect of exposing non-rendered text nodes, so there's
        some extra checks to ensure we don't include those elements in this cases.

        Test: accessibility/aria-hidden-false-works-in-subtrees.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::isNodeAriaVisible):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::computeAccessibilityIsIgnored):

2013-12-18  Oliver Hunt  <oliver@apple.com>

        Simplify bindings codegen for adding getOwnPropertySlot overrides
        https://bugs.webkit.org/show_bug.cgi?id=125934

        Reviewed by Alexey Proskuryakov.

        Simple refactoring no change in behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (InstanceOverridesGetOwnPropertySlot):
        (PrototypeOverridesGetOwnPropertySlot):
        (GenerateHeader):
        (GenerateImplementation):

2013-12-18  Conrad Shultz  <conrad_shultz@apple.com>

        AudioSessionManagerMac.cpp: kLowPowerVideoBufferSize unused before OS X 10.9
        https://bugs.webkit.org/show_bug.cgi?id=125935

        Reviewed by Jer Noble.

        * platform/audio/mac/AudioSessionManagerMac.cpp:
        Add __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 guard.

2013-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some basic DebuggerAgent cleanup
        https://bugs.webkit.org/show_bug.cgi?id=125901

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDebuggerAgent.h:
        Remove virtual from not really virtual method.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        Use member variable instead of private function.

        (WebCore::InspectorDebuggerAgent::setPauseOnExceptions):
        Inline the three lines from the private function.

2013-12-18  Martin Hodovan  <mhodovan@inf.u-szeged.hu>

        REGRESSION (r155536): Broken error recovery in @media at-rule
        https://bugs.webkit.org/show_bug.cgi?id=125637

        Reviewed by Darin Adler.

        Error recovery in @media is broken if any of its rules misses the opening '{'.
        The problem is that when the parser recognises the mistake it removes only the last
        WHITESPACE token instead of the whole selector and tries to recover the selector again.
        it swallows everything until it finds the next opening bracket. thats why the '}' brackets
        of both subrules and even the @media rule are ignored, and the whole @media will be
        considered invalid. By joining the selector and its trailing whitespace the error recovery
        ignores the bad selector only and keep the @media rule.

        Test: fast/css/media-error-recovery.html

        * css/CSSGrammar.y.in:

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit not sending AXMenuClosed notification
        https://bugs.webkit.org/show_bug.cgi?id=125783

        Reviewed by Mario Sanchez Prada.

        When an object with a role=menu is removed, we need to send out a notification informing that the menu has closed.
        This means detecting the right kind of destruction event for an element, because we do not want to 
        send this notification when the entire cache is being torn down.

        Test: platform/mac/accessibility/aria-menu-closed-notification.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::remove):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::document):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::detach):
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::detach):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::detach):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::detach):
        * accessibility/AccessibilityScrollView.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):

2013-12-18  Eric Carlson  <eric.carlson@apple.com>

        Do not create cue subtree just to delete it
        https://bugs.webkit.org/show_bug.cgi?id=125904

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::setIsActive): Return early if display tree is NULL.
        (WebCore::TextTrackCue::removeDisplayTree): Ditto.

2013-12-17  Oliver Hunt  <oliver@apple.com>

        Remove JSInlineGetOwnPropertySlot attribute as it is no longer necessary
        https://bugs.webkit.org/show_bug.cgi?id=125875

        Reviewed by Brady Eidson.

        Tested this on dromaeo and acid3 (the original reason for this attribute)
        and it no longer provided any benefit. This makes it easier to reason about
        creation of getOwnPropertySlot during binding generation.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Node.idl:

2013-12-18  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Fix ASSERTION FAILED in WebCore::SVGLengthContext::determineViewport
        https://bugs.webkit.org/show_bug.cgi?id=120284

        Reviewed by Philip Rogers.

        Added handling of root <svg> elements.
        Blink merge: https://chromium.googlesource.com/chromium/blink/+/a7dedf81eb7008276bb6854f0e46465e039788f8

        SVGLengthContext::determineViewport() currently asserts that we're not
        resolving lengths for the topmost element, but there's nothing to
        prevent such calls.

        The patch updates determineViewport() to handle root elements geracefully
        (using their current viewport). It also changes the signature slightly
        to operate directly on a FloatSize, reducing some of the boiler-plate
        client code.

        Tests: svg/custom/svg-length-value-handled.svg
               svg/dom/svg-root-lengths.html

        * svg/SVGLengthContext.cpp:
        (WebCore::SVGLengthContext::convertValueFromUserUnitsToPercentage):
        (WebCore::SVGLengthContext::convertValueFromPercentageToUserUnits):
        (WebCore::SVGLengthContext::determineViewport):
        * svg/SVGLengthContext.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::platformApplySoftware):

2013-12-18  Darin Adler  <darin@apple.com>

        Additional refinement in MathMLSelectElement toggle implementation
        https://bugs.webkit.org/show_bug.cgi?id=125785

        Reviewed by Andreas Kling.

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::defaultEventHandler): Call setDefaultHandled
        so this will be handled by only one element.
        (WebCore::MathMLSelectElement::willRespondToMouseClickEvents): Return true
        only when action is set to toggle, since other select elements will not
        respond to mouse click events.
        (WebCore::MathMLSelectElement::toggle): Simplified code a bit and gave
        local a clearer variable name.

2013-12-18  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] Implement interpolation between keywords in basic shapes
        https://bugs.webkit.org/show_bug.cgi?id=125108

        Reviewed by Simon Fraser.

        Allow blending for all center coordinates since top/left and bottom/right default to correct
        Length values of 0% and 100%. For mixed keyword and value positions compute the length's used
        for blending to percentages. This is possible since we compute the reference box bounds given the
        renderer.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc): Pass additional RenderBox parameter.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Don't check circle/ellipse center anymore, but do check that both
        shapes use the same reference box.
        (WebCore::BasicShape::referenceBoxSize): Compute box dimension depending on reference box.
        (WebCore::BasicShapeCenterCoordinate::lengthForBlending): Convert to percentage for Bottom/Right.
        (WebCore::BasicShapeRectangle::blend):
        (WebCore::DeprecatedBasicShapeCircle::blend):
        (WebCore::BasicShapeCircle::blend):
        (WebCore::DeprecatedBasicShapeEllipse::blend):
        (WebCore::BasicShapeEllipse::blend):
        (WebCore::BasicShapePolygon::blend):
        (WebCore::BasicShapeInsetRectangle::blend):
        (WebCore::BasicShapeInset::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::blend): Use new lengthForBlending.

2013-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        CSS: Null-pointer dereference with negative 'orphans' value.
        https://bugs.webkit.org/show_bug.cgi?id=125924

        Reviewed by Andreas Kling.

        orphans and widows should be positive integer.

        spec link:
        http://www.w3.org/TR/CSS2/page.html#propdef-orphans

        Backported from Blink: https://codereview.chromium.org/108663009

        Test: fast/css/negative-orphans-crash.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2013-12-18  Andreas Kling  <akling@apple.com>

        Make more computed style helpers return values by PassRef.
        <https://webkit.org/b/125923>

        Tighten yet another handful of CSS computed style helper functions
        to return their CSSValues by PassRef where we never return null.

        Reviewed by Antti Koivisto.

2013-12-18  Andreas Kling  <akling@apple.com>

        Use range for syntax in Frame and FrameView.
        <https://webkit.org/b/125922>

        Convert code in Frame and FrameView to use C++11's range for syntax.

        Reviewed by Antti Koivisto.

2013-12-18  Andreas Kling  <akling@apple.com>

        RenderElement-ize adjustForAbsoluteZoom() and friends.
        <https://webkit.org/b/125921>

        Make adjustForAbsoluteZoom() take a const RenderElement& instead
        of a RenderObject* so we can avoid the extra branch in style().
        All call sites already had RenderElements.

        Reviewed by Antti Koivisto.

2013-12-18  Chris Fleizach  <cfleizach@apple.com>

        AX: HTML spec change indicates @aria-required should trump @required on any element
        https://bugs.webkit.org/show_bug.cgi?id=122145

        Reviewed by Mario Sanchez Prada.

        aria-required should win over the native "required" attribute.

        Updated tests: accessibility/aria-required.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isRequired):

2013-12-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2013-12-18  Dániel Bátyai  <dbatyai.u-szeged@partner.samsung.com>

        [soup] Fix unused parameter warnings in ResourceHandleSoup.
        https://bugs.webkit.org/show_bug.cgi?id=125918

        Reviewed by Martin Robinson.

        Comment out the method parameters to avoid the warnings.

        No tests required.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Periodically monitor source buffers.
        https://bugs.webkit.org/show_bug.cgi?id=125898

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-monitor-source-buffers.html

        The MSE spec requires that the SourceBuffer Monitoring step is run
        periodically during playback. No specific update interval is specified
        so we will re-use the existing HTMLMediaElement playback progress
        timer to signal the media source monitoring.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::playbackProgressTimerFired):

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Add per-track signalling between SourceBuffer and SourceBufferPrivate.
        https://bugs.webkit.org/show_bug.cgi?id=125899

        Reviewed by Eric Carlson.

        To accommodate the future addition of audio support to MSE in the Mac
        port, add the concept of trackIDs to the communication between
        SourceBuffer and SourceBufferPrivate.

        The following virtual methods  now take a trackID parameter:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivate::stopAskingForMoreSamples):
        (WebCore::SourceBufferPrivate::notifyClientWhenReadyForMoreSamples):
        * platform/graphics/SourceBufferPrivateClient.h:
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateDidBecomeReadyForMoreSamples):

        Update overridden methods in subclasses:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        Change the logic in provideMediaData to update a single TrackBuffer
        rather than iterating over all of them:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::provideMediaData):

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorAgent::hasFrontend
        https://bugs.webkit.org/show_bug.cgi?id=125907

        Reviewed by Timothy Hatcher.

        Remove InspectorAgent::hasFrontend only used by
        InspectorInstrumentation::collectingHTMLParseErrors. However,
        following the single callers of that, the result is unused
        in the HTMLDocumentParser and HTMLTreeBuilder. So remove
        more stale / unused code.

        * html/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/parser/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::create):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):
        * html/parser/TextDocumentParser.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchDocument):
        * inspector/InspectorAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some basic InjectedScriptHost cleanup
        https://bugs.webkit.org/show_bug.cgi?id=125902

        Reviewed by Timothy Hatcher.

        Remove InjectedScriptHost::scriptDebugServer. Nobody accesses
        the ScriptDebugServer through the injected script host. This
        also lets us remove the reference to the DebuggerAgent.

        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::init):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):

2013-12-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorFrontendHost.setInjectedScriptForOrigin
        https://bugs.webkit.org/show_bug.cgi?id=125906

        Reviewed by Timothy Hatcher.

        Remove stale code related to a since removed feature,
        Inspector extensions. This allows us to remove a number
        of entry points into InspectorAgent.

        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        Remove setInjectedScriptForOrigin and InjectedScript management.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        Remove the API and calling through InspectorController.

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didClearWindowObjectInWorldImpl):
        (WebCore::InspectorInstrumentation::domContentLoadedEventFiredImpl):
        (WebCore::InspectorInstrumentation::didCommitLoadImpl):
        Remove now unnecessary calls into InspectorAgent.

2013-12-17  Jer Noble  <jer.noble@apple.com>

        Fix TimeRanges::intersectWith
        https://bugs.webkit.org/show_bug.cgi?id=118802

        Test: TestWebKitAPI/Tests/WebCore/TimeRanges.cpp.

        Reviewed by Eric Carlson.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/TimeRanges.cpp:
        (TimeRanges::invert):
        (TimeRanges::intersectWith):

        Merge
        https://chromium.googlesource.com/chromium/blink/+/f557582b6c6283a8b165514f52d01cfd98130e85        

2013-12-17  Eric Carlson  <eric.carlson@apple.com>

        ASSERT setting pseudoID with registered DOMSubtreeModified listener
        https://bugs.webkit.org/show_bug.cgi?id=125900

        Reviewed by Ryosuke Niwa.

        Test: fast/dom/attribute-set-before-element-in-tree.html

        * dom/Node.cpp:
        (WebCore::Node::dispatchSubtreeModifiedEvent): Return early if the node does not have a
            parent and does not have a DOMSubtreeModified listener.

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Remove dead code for reflected attributes from audio, video, and track elements
        https://bugs.webkit.org/show_bug.cgi?id=125838

        Reviewed by Eric Carlson.

        Merge https://chromium.googlesource.com/chromium/blink/+/310514e2f0fd934975b841d463bad0cd62e6fd64

        Where [Reflect] is used in the IDL, the getters and setters in C++ are
        only for internal convenience, and these were unused.

        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLTrackElement.cpp:
        * html/HTMLTrackElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:

2013-12-17  Simon Fraser  <simon.fraser@apple.com>

        Rename "canRubberBands" to "canRubberBand"
        https://bugs.webkit.org/show_bug.cgi?id=125897

        Reviewed by Anders Carlsson.

        Rename "canRubberBands" to "canRubberBand" in various places.

        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::setCanRubberBandState):
        * page/scrolling/ScrollingTree.h:

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE] Update duration after appending samples, per spec.
        https://bugs.webkit.org/show_bug.cgi?id=125703

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-duration-after-append.html

        After appending a sample, update the MediaSource duration if the sample's
        presentation end time is greater than the existing duration.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::setDuration): Notify the MediaPlayer.

2013-12-17  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Null-deref in CMSampleBufferIsRandomAccess().
        https://bugs.webkit.org/show_bug.cgi?id=125698

        Reviewed by Sam Weinig.

        If a given CMSampleBufferRef does not have a sample attachments array (which is unlikely, but
        possible), CMSampleBufferGetAttachmentsArray() will return a null value.

        Additionally, the CMSampleBuffer documentation states that "samples are assumed to be sync
        samples by default", so the absence of an attachment array (or the absense of a
        kCMSampleAttachmentKey_NotSync entry in any of the attachment dictionaries) indicates the
        sample is sync.

        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::CMSampleBufferIsRandomAccess):

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Video element's width and height content attributes should not influence intrinsic width and height
        https://bugs.webkit.org/show_bug.cgi?id=125822

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/022ce34efb5b70cb964c3ca29f23c8980ffaef05

        The width/height content attributes already influence specified style via
        HTMLVideoElement::collectStyleForPresentationAttribute, to also influence the intrinsic size has never
        been part of the spec: http://www.w3.org/TR/2013/WD-html51-20130528/embedded-content-0.html#dom-dim-width

        The test case passes in Firefox Nightly and IE11 Release Preview, but fails in Opera Presto, which has
        no default intrinsic size.

        Test: media/video-intrinsic-width-height.html

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/html changes
        https://bugs.webkit.org/show_bug.cgi?id=125765

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * html/Autocapitalize.cpp: Added.
        * html/Autocapitalize.h: Added. Also, added FIXME comment to forward declare AtomicString once we upstream
        more of the iOS port.
        * html/BaseChooserOnlyDateAndTimeInputType.cpp:
        (WebCore::BaseChooserOnlyDateAndTimeInputType::handleDOMActivateEvent): Opt out of code when building for iOS.
        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::isKeyboardFocusable): Added; iOS-specific.
        * html/BaseDateAndTimeInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::FileInputType): Added iOS-specific code.
        (WebCore::FileInputType::~FileInputType): Opt out of code when building for iOS. Also, added FIXME comment.
        (WebCore::FileInputType::requestIcon): Ditto.
        (WebCore::FileInputType::filesChosen): Added; iOS-specific.
        (WebCore::FileInputType::displayString): Added; iOS-specific.
        (WebCore::FileInputType::receiveDroppedFiles): Guarded code with ENABLE(DRAG_SUPPORT).
        * html/FileInputType.h:
        * html/FormController.cpp:
        (WebCore::FormController::formElementsCharacterCount): Added.
        * html/FormController.h:
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::updateWidget): Opt out of code when building for iOS.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::computePath): Changed argument datatype from RenderElement* to RenderObject*.
        Also, added FIXME comment to fix this up once we upstream iOS's DOMUIKitExtensions.{h, mm}.
        (WebCore::HTMLAreaElement::computeRect): Ditto.
        * html/HTMLAreaElement.h:
        * html/HTMLAttributeNames.in: Added attributes ongesture{start, change, end}, autocorrect, autocapitalize,
        data-youtube-id, onwebkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}, webkit-playsinline,
        x-webkit-airplay, and x-webkit-wirelessvideoplaybackdisabled.
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft): Added iOS-specific code.
        (WebCore::HTMLBodyElement::scrollTop): Ditto.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLCanvasElement::createImageBuffer): Added iOS-specific code.
        * html/HTMLCanvasElement.h: Added iOS-specific code and FIXME comment.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument): Added argument isSynthesized (default to false), which is
        passed through to Document::Document(), to create a synthesized document.
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::createSynthesizedDocument): Added.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::collectStyleForPresentationAttribute): Added iOS-specific code.
        (WebCore::populateEventNameForAttributeLocalNameMap): Ditto.
        (WebCore::HTMLElement::willRespondToMouseMoveEvents): Added; iOS-specific.
        (WebCore::HTMLElement::willRespondToMouseWheelEvents): Added; iOS-specific.
        (WebCore::HTMLElement::willRespondToMouseClickEvents): Added; iOS-specific.
        * html/HTMLElement.h:
        * html/HTMLFormControlElement.cpp: Added FIXME comment to share more code with class HTMLFormElement.
        (WebCore::HTMLFormControlElement::autocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::setAutocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::autocapitalizeType): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::autocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormControlElement::setAutocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp: Added FIXME comment to share more code with class HTMLFormControlElement.
        (WebCore::HTMLFormElement::submitImplicitly): Modified to code to allow implicit submission of multi-input
        forms only if Settings::allowMultiElementImplicitSubmission() returns true. Such behavior is expected by older
        iOS apps. Also, changed datatype of variable submissionTriggerCount from int to unsigned because it represents
        a non-negative value.
        (WebCore::HTMLFormElement::autocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::setAutocorrect): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::autocapitalizeType): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::autocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        (WebCore::HTMLFormElement::setAutocapitalize): Added; guarded by PLATFORM(IOS_AUTOCORRECT_AND_AUTOCAPITALIZE).
        * html/HTMLFormElement.h:
        * html/HTMLFormElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLIFrameElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::displayString): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLInputElement::dateType): Added; guarded by PLATFORM(IOS).
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::willRespondToMouseClickEvents): Added iOS-specific code.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Added iOS-specific code.
        (WebCore::HTMLMediaElement::parseMediaPlayerAttribute): Added; iOS-specific.
        (WebCore::HTMLMediaElement::parseAttribute): Added iOS-specific code.
        (WebCore::HTMLMediaElement::insertedInto): Ditto.
        (WebCore::HTMLMediaElement::load): Ditto.
        (WebCore::HTMLMediaElement::prepareForLoad): Ditto.
        (WebCore::HTMLMediaElement::autoplay): Ditto.
        (WebCore::HTMLMediaElement::play): Ditto.
        (WebCore::HTMLMediaElement::playInternal): Ditto.
        (WebCore::HTMLMediaElement::pauseInternal): Ditto.
        (WebCore::HTMLMediaElement::setVolumne): Opt out of code when building for iOS.
        (WebCore::HTMLMediaElement::setMuted): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Added iOS-specific code.
        (WebCore::HTMLMediaElement::updateVolume): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Ditto.
        (WebCore::HTMLMediaElement::userCancelledLoad): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLMediaElement::resume): Added iOS-specific comment. See <rdar://problem/9751303>.
        (WebCore::HTMLMediaElement::deliverNotification): Added iOS-specific code.
        (WebCore::HTMLMediaElement::getPluginProxyParams): Added iOS-specific code. Also, changed src() to getNonEmptyURLAttribute()
        in the non-iOS code as their doesn't exist a method called src in this class or its superclasses.
        (WebCore::HTMLMediaElement::webkitShowPlaybackTargetPicker): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::webkitCurrentPlaybackTargetIsWireless): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackTargetAvailabilityChanged): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::addEventListener): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::removeEventListener): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLMediaElement::enterFullscreen): Added iOS-specific code.
        (WebCore::HTMLMediaElement::exitFullscreen): Ditto.
        (WebCore::HTMLMediaElement::createMediaPlayer): Added ENABLE(IOS_AIRPLAY)-guarded code.
        (WebCore::HTMLMediaElement::userRequestsMediaLoading): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLMediaElement::shouldUseVideoPluginProxy): Use dot operator instead of dereference operator (->)
        when accessing Document::settings().
        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot): Added ENABLE(PLUGIN_PROXY_FOR_VIDEO)-guarded code.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::userGestureRequiredToShowPlaybackTargetPicker): Added; guarded by ENABLE(IOS_AIRPLAY).
        * html/HTMLMediaElement.idl: Added ENABLE_IOS_AIRPLAY-guarded attributes and functions:webkitCurrentPlaybackTargetIsWireless,
        onwebkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}, and webkitShowPlaybackTargetPicker().
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::process): Added iOS-specific code.
        * html/HTMLObjectElement.cpp:
        (WebCore::shouldNotPerformURLAdjustment): Added; iOS-specific.
        (WebCore::HTMLObjectElement::parametersForPlugin): Modified to call shouldNotPerformURLAdjustment() when
        building for iOS.
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createRenderer): Added iOS-specific code.
        (WebCore::HTMLPlugInImageElement::createShadowIFrameSubtree): Added; iOS-specific.
        * html/HTMLPlugInImageElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::usesMenuList): Added iOS-specific code.
        (WebCore::HTMLSelectElement::createRenderer): Ditto.
        (WebCore::HTMLSelectElement::childShouldCreateRenderer): Ditto.
        (WebCore::HTMLSelectElement::willRespondToMouseClickEvents): Added; iOS-specific.
        (WebCore::HTMLSelectElement::updateListBoxSelection): Added iOS-specific code.
        (WebCore::HTMLSelectElement::scrollToSelection): Ditto.
        (WebCore::HTMLSelectElement::setOptionsChangedOnRenderer): Ditto.
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Opt out of code when building for iOS.
        (WebCore::HTMLSelectElement::defaultEventHandler): Added iOS-specific code.
        * html/HTMLSelectElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::willRespondToMouseClickEvents): Added; iOS-specific.
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextAreaElement.idl: Added iOS-specific attributes: autocorrect and autocapitalize.
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::select): Added iOS-specific code and FIXME comment.
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Opt out of code when building for iOS.
        (WebCore::HTMLTextFormControlElement::hidePlaceholder): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTextFormControlElement::showPlaceholderIfNecessary): Added; guarded by PLATFORM(IOS).
        * html/HTMLTextFormControlElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createRenderer): Fix up call to HTMLMediaElement::createRenderer().
        (WebCore::HTMLVideoElement::parseAttribute): Added iOS-specific code.
        (WebCore::HTMLVideoElement::supportsFullscreen): Ditto.
        (WebCore::HTMLVideoElement::webkitWirelessVideoPlaybackDisabled): Added; guarded by ENABLE(IOS_AIRPLAY).
        (WebCore::HTMLVideoElement::setWebkitWirelessVideoPlaybackDisabled): Added; guarded by ENABLE(IOS_AIRPLAY).
        * html/HTMLVideoElement.h:
        * html/HTMLVideoElement.idl: Added ENABLE_IOS_AIRPLAY-guarded attribute: webkitWirelessVideoPlaybackDisabled.
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Added iOS-specific code.
        (WebCore::ImageDocument::scale): Ditto.
        (WebCore::ImageDocument::resizeImageToFit): Ditto.
        (WebCore::ImageDocument::imageClicked): Ditto.
        (WebCore::ImageDocument::imageFitsInWindow): Ditto.
        (WebCore::ImageDocument::windowSizeChanged): Ditto.
        * html/InputType.cpp:
        (WebCore::InputType::dateType): Added; guarded by PLATFORM(IOS).
        (WebCore::InputType::isKeyboardFocusable): Added iOS-specific code.
        (WebCore::InputType::displayString): Added; guarded by PLATFORM(IOS).
        * html/InputType.h:
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure): Added iOS-specific code.
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleTouchEvent): Ditto.
        (WebCore::RangeInputType::disabledAttributeChanged): Added; iOS-specific.
        * html/RangeInputType.h:
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::addSearchResult): Opt out of code when building for iOS.
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::isKeyboardFocusable): Added iOS-specific code.
        * html/TextFieldInputType.h:
        * html/WebAutocapitalize.h: Added.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createImageData): Added iOS-specific code.
        (WebCore::CanvasRenderingContext2D::getImageData): Ditto.
        * html/parser/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::isTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        * html/parser/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::checkForYieldBeforeToken): Added iOS-specific code.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertPhoneNumberLink): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTreeBuilder::linkifyPhoneNumbers): Added; guarded by PLATFORM(IOS).
        (WebCore::disallowTelephoneNumberParsing): Added; guarded by PLATFORM(IOS).
        (WebCore::shouldParseTelephoneNumbersInNode): Added; guarded by PLATFORM(IOS).
        (WebCore::HTMLTreeBuilder::processCharacterBufferForInBody): Added iOS-specific code.
        * html/parser/HTMLTreeBuilder.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::MediaControlClosedCaptionsTrackListElement): Guarded member initialization of m_controls with ENABLE(VIDEO_TRACK). Also added UNUSED_PARAM(event) when building with
        VIDEO_TRACK disabled.
        (WebCore::MediaControlClosedCaptionsTrackListElement::defaultEventHandler): Added UNUSED_PARAM(event) when
        building with VIDEO_TRACK disabled.
        * html/shadow/MediaControls.h:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement): Added iOS-specific code.
        (WebCore::SliderThumbElement::dragFrom): Opt out of code when building for iOS.
        (WebCore::SliderThumbElement::willDetachRenderers):  Added iOS-specific code.
        (WebCore::SliderThumbElement::exclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::setExclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::clearExclusiveTouchIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::findTouchWithIdentifier): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchStart): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchMove): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchEndAndCancel): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::didAttachRenderers): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::handleTouchEvent): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::shouldAcceptTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::registerForTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::unregisterForTouchEvents): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        (WebCore::SliderThumbElement::disabledAttributeChanged): Added; guarded by ENABLE(TOUCH_EVENTS) && PLATFORM(IOS).
        * html/shadow/SliderThumbElement.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler): Opt out of code when building for iOS.
        * html/shadow/TextControlInnerElements.h:
        * page/Settings.in: Added setting allowMultiElementImplicitSubmission to enable/disable multi-input implicit form
        submission (disabled by default). Also added FIXME comment to rename this setting to allowMultiElementImplicitFormSubmission
        once we upstream the iOS changes to WebView.mm.

2013-12-17  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Pipe through object store IDs and transaction mode for "openTransaction"
        https://bugs.webkit.org/show_bug.cgi?id=125872

        Reviewed by Alexey Proskuryakov.

        Make these enums into enum classes.
        Add const maximums for each enum class that might be serialized to allow for conversion later:
        * Modules/indexeddb/IndexedDB.h:

        Add cross-thread copying for these new enum classes.
        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy):
        * platform/CrossThreadCopier.h:

        Adopt the new enum classes throughout the rest of WebCore:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::stringToDirection):
        (WebCore::IDBCursor::directionToString):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::deleteFunction):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::value):
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::createObjectStore):
        (WebCore::IDBDatabaseBackend::deleteObjectStore):
        (WebCore::IDBDatabaseBackend::createIndex):
        (WebCore::IDBDatabaseBackend::deleteIndex):
        (WebCore::IDBDatabaseBackend::get):
        (WebCore::IDBDatabaseBackend::put):
        (WebCore::IDBDatabaseBackend::setIndexKeys):
        (WebCore::IDBDatabaseBackend::openCursor):
        (WebCore::IDBDatabaseBackend::deleteRange):
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        (WebCore::IDBDatabaseBackend::transactionStarted):
        (WebCore::IDBDatabaseBackend::transactionFinished):
        (WebCore::IDBDatabaseBackend::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackend::transactionFinishedAndCompleteFired):
        (WebCore::IDBDatabaseBackend::createTransaction):
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        (WebCore::IDBDatabaseBackend::deleteDatabase):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        (WebCore::IDBFactory::openInternal):
        (WebCore::IDBFactory::deleteDatabase):
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        (WebCore::IDBOpenDBRequest::onUpgradeNeeded):
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::stringToMode):
        (WebCore::IDBTransaction::modeToString):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform):
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        * Modules/indexeddb/IDBVersionChangeEvent.h:
        (WebCore::IDBVersionChangeEvent::create):
        (WebCore::IDBVersionChangeEvent::newVersion):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchIteration):

        * WebCore.exp.in:

2013-12-17  Gavin Barraclough  <barraclough@apple.com>

        Remove PageVisibilityStateUnloaded
        https://bugs.webkit.org/show_bug.cgi?id=125869

        Reviewed by Anders Carlsson.

        This is not currently supported by WebKit, remove this enum value.
        We can always add this back later if/when we add support for this state.

        * page/PageVisibilityState.cpp:
        (WebCore::pageVisibilityStateString):
        * page/PageVisibilityState.h:
            - removed PageVisibilityStateUnloaded

2013-12-12  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Build the plugin process against GTK+ 2
        https://bugs.webkit.org/show_bug.cgi?id=116374

        Reviewed by Gustavo Noronha Silva.

        * PlatformGTK.cmake: Split off the GTK+-dependent sources into
        libWebCorePlatformGTK and compile libWebCorePlatformGTK2 when
        WebKit2 is enabled.

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        Compile fix for WebGL on Windows without GRAPHICS_SURFACE.
        https://bugs.webkit.org/show_bug.cgi?id=125867

        Reviewed by Martin Robinson.

        * platform/graphics/opengl/GLPlatformSurface.cpp:
        (WebCore::GLPlatformSurface::createOffScreenSurface):
        Protect reference to EGLOffScreenSurface with USE(GRAPHICS_SURFACE).

2013-12-17  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Positioned elements in regions get clipped if they fall outside the region
        https://bugs.webkit.org/show_bug.cgi?id=117120

        Reviewed by Mihnea Ovidenie.

        Fixed the computing of the box decorations clip rect when having statically positioned
        elements inside positioned elements. The existing algorithm computed the rect in a loop
        running up the containing block chain and only checked for positioned elements before 
        starting the loop. If a positioned elements was found in the middle of a loop (as would
        be the case with a positioned element parenting a non-positioned element), it was not 
        correctly handled.
        Also changed it so the clip is only performed in the fragmentation direction as that was 
        the original purpose of this method.

        Tests: fast/regions/absolute-in-relative-overflow.html
               fast/regions/static-in-relative-overflow.html
               fast/regions/sticky-border-overflow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):

2013-12-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160717.
        http://trac.webkit.org/changeset/160717
        https://bugs.webkit.org/show_bug.cgi?id=125863

        New tests are failing, and possibly broke an existing test
        (Requested by ap on #webkit).

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2013-12-17  Ryosuke Niwa  <rniwa@webkit.org>

        Invalid dir attributes should resolve to ltr
        https://bugs.webkit.org/show_bug.cgi?id=125830

        Reviewed by Darin Adler.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/2d592d1c998bec9438e421e1ce1ee6caba05a884

        The dir attribute should resolve to direction: ltr by default when the attribute value is
        "not in a defined state": http://www.w3.org/TR/2013/WD-html51-20130528/dom.html#the-directionality

        Test: fast/dom/HTMLElement/set-and-clear-dir-attribute.html

        * html/HTMLElement.cpp:
        (WebCore::isLTROrRTLIgnoringCase): Extracted from HTMLElement::directionality.
        (WebCore::HTMLElement::collectStyleForPresentationAttribute):
        (WebCore::HTMLElement::directionality):

2013-12-17  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Incorrect repaint of fixed element with transformed parent
        https://bugs.webkit.org/show_bug.cgi?id=125756

        Reviewed by Darin Adler.

        When collecting the layers for fixed positioned elements with named flow
        as a containing block, use layers collection at named flow layer level
        instead of relying on the positioned elements collection.

        Modified also FlowThreadController::collectFixedPositionedLayers function
        to always return the layers sorted by z-index, as this operation was always
        done at the call sites.

        Tests: fast/regions/repaint/fixed-in-named-flow-cb-changed.html
               fast/regions/repaint/fixed-in-named-flow-cb-changed2.html

        * rendering/FlowThreadController.cpp:
        (WebCore::compareZIndex):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintFixedLayersInNamedFlows):
        (WebCore::RenderLayer::hitTestFixedLayersInNamedFlows):

2013-12-17  Bem Jones-Bey  <bjonesbe@adobe.com>

        REGRESSION(r159166?): fast/block/float/float-with-fractional-height-vertical-lr.html, fast/block/float/float-with-fractional-height.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=124506

        Reviewed by Dirk Schulze.

        Floor the endpoints of the floating object interval to keep the old
        behavior until a better fix can be created.

        No new tests, fixes regression in existing tests.

        * rendering/FloatingObjects.cpp:
        (WebCore::FloatingObjects::intervalForFloatingObject):

2013-12-17  Alex Christensen  <achristensen@webkit.org>

        [Win] Visual Studio workaround for compiling WebGL.
        https://bugs.webkit.org/show_bug.cgi?id=125808

        Reviewed by Darin Adler.

        * platform/graphics/GraphicsContext3D.cpp:
        Don't inline outermost function to prevent Visual Studio crash.

2013-12-17  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for <dl>, <dt> and <dd>
        https://bugs.webkit.org/show_bug.cgi?id=125857

        Reviewed by Chris Fleizach.

        Map description lists to the newly introduced ATK roles
        ATK_ROLE_DESCRIPTION_LIST, ATK_ROLE_DESCRIPTION_TERM and
        ATK_ROLE_DESCRIPTION_VALUE, introduced in ATK 2.11.4.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Do the right mapping.
        (webkitAccessibleGetRole): Update call to atkRole, now that it
        receives an AccessibilityObject* as parameter.

2013-12-17  Frédéric Wang  <fred.wang@free.fr>

        Ensure inferred mrows for msqrt, mstyle, merror, mphantom and math.
        https://bugs.webkit.org/show_bug.cgi?id=124841

        Reviewed by Darin Adler.

        Tests: mathml/presentation/inferred-mrow-baseline.html
               mathml/presentation/inferred-mrow-stretchy.html

        * css/mathml.css: make merror, mphantom and mstyle behave like an mrow.
        (mo, mrow, mfenced, mfrac, msub, msup, msubsup, mmultiscripts, mprescripts, none, munder, mover, munderover, msqrt, mroot, merror, mphantom, mstyle):
        (math, mrow, mfenced, msqrt, mroot, merror, mphantom, mstyle):
        * mathml/MathMLInlineContainerElement.cpp: ditto
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/mathtags.in: ditto
        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::paint): fix failure in mathml/presentation/phantom.html now that phantom can stretch operators.

2013-12-17  Simon Pena  <simon.pena@samsung.com>

        [NIX] Enable full debug builds by having ar creating thin archives
        https://bugs.webkit.org/show_bug.cgi?id=125850

        Reviewed by Csaba Osztrogonác.

        By default, CMake uses ar to generate libWebCore.a with cr parameters
        (do not warn if the library has to be created, and replace existing
        files in the archive). That results in a very large file, and ar fails
        with sizes over 4GB.

        By using thin archives (the T option of ar), the generated
        libWebCore.a is much smaller, and can be successfully archived. As a
        result, we can generate a full debug build. This patch is based on Xan
        López's webkit.org/b/110580.

        * PlatformNix.cmake: Instruct cmake to invoke ar with T option.

2013-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r160336.

        * bindings/gobject/webkitdom.symbols: Add new methods exposed for
        VideoPlaybackQuality.

2013-12-17  Mihai Maerean  <mmaerean@adobe.com>

        Fix hit testing for divs with a hierarchy of css transformed and non-transformed elements
        https://bugs.webkit.org/show_bug.cgi?id=124777

        Reviewed by Darin Adler.

        After bug #124647, the hit test will still behave incorrectly for transformed divs with non
        transformed siblings that are all inside a transformed element (tested by the
        hover-rotated-with-children-negative-z.html layout test).

        The fix is to not take zOffset into account during hit-testing when child layers are in the
        same 3D rendering context. Only when preserve3d is true, should hit-testing compute the
        zOffset of the layers with transformations and, when two layers overlap, to return the layer
        with the highest zOffset.

        The patch includes the work of a.renevier from https://codereview.chromium.org/79943002/

        Tests: transforms/3d/hit-testing/hover-rotated-with-children-negative-z.html
               transforms/3d/hit-testing/negative-zoffset-hit-test.html
               transforms/3d/hit-testing/overlapping-layers-hit-test.html

        * rendering/RenderLayer.cpp:
        (WebCore::computeZOffset):
        (WebCore::RenderLayer::hitTestLayer):

2013-12-17  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove a few more guards mistakenly added in r160367

        Reviewed by Martin Robinson.

        r160367 was too liberal in hiding APIs from the GObject DOM bindings.

        * Modules/battery/NavigatorBattery.idl: Expose NavigatorBattery.

2013-12-17  Benjamin Poulain  <benjamin@webkit.org>

        Add a simple register allocator to WebCore for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=125771

        Reviewed by Geoffrey Garen.

        Add a brain dead register allocator to simplify the use of registers
        when writting code generators.

        RegisterAllocator has two purposes:
        -make it easy to name registers properly.
        -make it hard to reuse a register accidentally.

        A helper class LocalRegister is also defined to provide an easy
        way to work with registers within a C++ scope. For example:
            LocalRegister elementPointer(allocator);
            assembler.load(address, elementPointer);

        RegisterAllocator makes no attempt at optimizing register allocations, but it reduces
        implicit dependencies by returning used register at the end of the queue, making it less
        likely they will be reused before their last instruction is executed.

        The current implementation only support unix x86_64, it only uses caller saved registers.

        * WebCore.xcodeproj/project.pbxproj:
        * cssjit/RegisterAllocator.h: Added.
        (WebCore::RegisterAllocator::allocateRegister): Provides any available register.
        To restrict runtime exploitation of compiler bugs, the method crashes in release
        if the register pool is empty.

        (WebCore::RegisterAllocator::reserveRegister): Reserve a particular register.
        (WebCore::RegisterAllocator::returnRegister): Return a previously allocated or reserved register.

        (WebCore::RegisterAllocator::allocatedRegisters):
        (WebCore::LocalRegister::LocalRegister):
        (WebCore::LocalRegister::~LocalRegister):
        (WebCore::LocalRegister::operator JSC::MacroAssembler::RegisterID):
        (WebCore::RegisterAllocator::RegisterAllocator):

2013-12-16  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Checking RTCPeerConnection signalingState before setting local/remoteDescription
        https://bugs.webkit.org/show_bug.cgi?id=125655

        Reviewed by Eric Carlson.

        Before setting a session description RTCPeerConnection must check if it is in valid state for that SDP type.

        New tests: fast/mediastream/RTCPeerConnection-have-local-answer.html
               fast/mediastream/RTCPeerConnection-have-local-offer.html
               fast/mediastream/RTCPeerConnection-have-local-pranswer.html
               fast/mediastream/RTCPeerConnection-have-remote-offer.html
               fast/mediastream/RTCPeerConnection-have-remote-pranswer.html
               fast/mediastream/RTCPeerConnection-stable.html

        Modified: fast/mediastream/RTCPeerConnection-remoteDescription.html

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::checkStateForLocalDescription): Checks if the current state of RTCPeerConnection is
        valid for the local SDP that is being set.
        (WebCore::RTCPeerConnection::checkStateForRemoteDescription): Checks if the current state of RTCPeerConnection
        is valid for the remote SDP that is being set.
        (WebCore::RTCPeerConnection::setLocalDescription): Now calls checkStateForLocalDescription prior to set the
        local SDP.
        (WebCore::RTCPeerConnection::setRemoteDescription): Now Calls checkStateForRemoteDescription prior to set the
        remote SDP.
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mock/RTCNotifiersMock.cpp: Adding new class to notify RTCPeerConnection about a signaling state
        change: SignalingStateNotifier.
        (WebCore::SignalingStateNotifier::SignalingStateNotifier):
        (WebCore::SignalingStateNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::signalingStateFromSDP): Defines the new state that RTCPeerConnection
        should be, according the SDP that is being set.
        (WebCore::RTCPeerConnectionHandlerMock::setLocalDescription): Calls signalingStateFromSDP, in order to get the
        new signaling state and notify RTCPeerConnection object.
        (WebCore::RTCPeerConnectionHandlerMock::setRemoteDescription): Ditto.
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-12-16  Tim Horton  <timothy_horton@apple.com>

        Revert a mysterious and inexplicable part of http://trac.webkit.org/changeset/160685

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeEnum):
        (WebCore::KeyedEncoder::encodeObject):
        (WebCore::KeyedEncoder::encodeConditionalObject):
        (WebCore::KeyedEncoder::encodeObjects):

2013-12-16  Anders Carlsson  <andersca@apple.com>

        Remove EnumClass.h from WTF
        https://bugs.webkit.org/show_bug.cgi?id=125820

        Reviewed by Darin Adler.

        Replace uses of ENUM_CLASS with real enum class declarations.

        * Modules/webdatabase/DatabaseBasicTypes.h:
        * Modules/webdatabase/DatabaseError.h:
        * Modules/webdatabase/SQLTransactionState.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        * crypto/CryptoAlgorithmIdentifier.h:
        * crypto/CryptoAlgorithmParameters.h:
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyData.h:
        * crypto/CryptoKeyType.h:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * inspector/InspectorTimelineAgent.h:

2013-12-16  Tim Horton  <timothy_horton@apple.com>

        WebKit2 View Gestures: Pinching beyond the extremes doesn't animate back to the min/max
        https://bugs.webkit.org/show_bug.cgi?id=125750

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export a few things so WebKit2 can use them.

2013-12-16  Joseph Pecoraro  <pecoraro@apple.com>

        Fix some whitespace issues in inspector code
        https://bugs.webkit.org/show_bug.cgi?id=125814

        Reviewed by Darin Adler.

        * inspector/protocol/DOM.json:
        * inspector/protocol/DOMStorage.json:
        * inspector/protocol/Timeline.json:

2013-12-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Use JSC::SourceID and JSC::BreakpointID instead of WebCore dups
        https://bugs.webkit.org/show_bug.cgi?id=125818

        Reviewed by Mark Lam.

        Remove the WebCore typedefs of JSC types. Prefer JSC namespace
        prefixed types throughout WebCore's Inspector code.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BreakpointID.h: Removed.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/SourceID.h: Removed.
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/dom changes
        https://bugs.webkit.org/show_bug.cgi?id=125646

        Reviewed by David Kilzer.

        * WebCore.exp.in: Added symbol __ZN7WebCore8Settings17setLayoutIntervalEi and removed symbol
        __ZN7WebCore24cLayoutScheduleThresholdE.
        * dom/ActiveDOMObject.h: Add suspension reason DocumentWillBePaused.
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Opt-out of ENABLE(VIDEO) logic when
        building for iOS.
        * dom/DeviceMotionClient.h: Made class non-copyable.
        (WebCore::DeviceMotionClient::DeviceMotionClient): Added;
        * dom/DeviceMotionController.cpp: Added FIXME comment to reconcile iOS and OpenSource differences.
        (WebCore::DeviceMotionController::suspendUpdates): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceMotionController::resumeUpdates): Added; guarded by PLATFORM(IOS).
        * dom/DeviceMotionController.h: Added FIXME comment to reconcile iOS and OpenSource differences.
        * dom/DeviceOrientationClient.h: Made class non-copyable.
        (WebCore::DeviceOrientationClient::DeviceOrientationClient): Added.
        * dom/DeviceOrientationController.cpp: Added FIXME comment to reconcile iOS and OpenSource differences.
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::suspendUpdates): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationController::resumeUpdates): Added; guarded by PLATFORM(IOS).
        * dom/DeviceOrientationController.h: Added FIXME comment to reconcile iOS and OpenSource differences.
        * dom/DeviceOrientationData.cpp:
        (WebCore::DeviceOrientationData::create): Added; iOS-specific. Added FIXME comment.
        (WebCore::DeviceOrientationData::DeviceOrientationData): Added iOS-specific code.
        (WebCore::DeviceOrientationData::compassHeading): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::compassAccuracy): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::canProvideCompassHeading): Added; guarded by PLATFORM(IOS).
        (WebCore::DeviceOrientationData::canProvideCompassAccuracy): Added; guarded by PLATFORM(IOS).
        * dom/DeviceOrientationData.h:
        * dom/DeviceOrientationEvent.idl: Added iOS-specific code.
        * dom/Document.cpp: Moved constant cLayoutScheduleThreshold to Settings.cpp and renamed it
        layoutScheduleThreshold towards allowing a port to configure the layout interval.
        (WebCore::Document::Document): Added optional argument isSynthesized, defaults false.
        (WebCore::Document::~Document): Added iOS-specific code to destroy the device motion
        and device orientation controllers.
        (WebCore::Document::didBecomeCurrentDocumentInFrame): Added iOS-specific code with FIXME comment.
        (WebCore::Document::prepareForDestruction): Added iOS-specific touch event code.
        (WebCore::Document::removeAllEventListeners): Ditto.
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Added; compiles to an empty function on
        non-iOS port.
        (WebCore::Document::suspendActiveDOMObjects): Modified to call platformSuspendOrStopActiveDOMObjects().
        (WebCore::Document::resumeActiveDOMObjects): Ditto.
        (WebCore::Document::stopActiveDOMObjects): Added.
        (WebCore::Document::implicitClose): Modified to query Settings::layoutInterval().
        (WebCore::Document::minimumLayoutDelay): Ditto.
        (WebCore::Document::processViewport): Added iOS-specific code.
        (WebCore::Document::updateViewportArguments): Ditto.
        (WebCore::setParserFeature): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::processFormatDetection): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::processWebAppOrientations): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::isTelephoneNumberParsingEnabled): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::setIsTelephoneNumberParsingAllowed): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::isTelephoneNumberParsingAllowed): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::initSecurityContext): Added iOS-specific code.
        (WebCore::Document::suspendScheduledTasks): Added; guarded by PLATFORM(IOS).
        (WebCore::Document::deviceMotionController): Added; iOS-specific.
        (WebCore::Document::deviceOrientationController): Added; iOS-specific.
        (WebCore::Document::adjustFloatQuadsForScrollAndAbsoluteZoomAndFrameScale): Added iOS-specific code.
        (WebCore::Document::adjustFloatRectForScrollAndAbsoluteZoomAndFrameScale): Added iOS-specific code.
        * dom/Document.h: Register gesture events gesture{change, end, start}; guarded by ENABLE(IOS_GESTURE_EVENTS).
        (WebCore::Document::isSynthesized): Added.
        (WebCore::Document::platformSuspendOrStopActiveDOMObjects): Added.
        * dom/Document.idl:
        * dom/DocumentMarker.h: Added iOS-specific changes. We should look to reconcile the differences between
        iOS and OpenSource. See <rdar://problem/11306422>.
        (WebCore::DocumentMarker::AllMarkers::AllMarkers):
        (WebCore::DocumentMarker::DocumentMarker): Added; iOS-specific.
        (WebCore::DocumentMarker::alternatives): Added; iOS-specific.
        (WebCore::DocumentMarker::setAlternative): Added; iOS-specific.
        (WebCore::DocumentMarker::metadata): Added; iOS-specific.
        (WebCore::DocumentMarker::setMetadata): Added; iOS-specific.
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::addDictationPhraseWithAlternativesMarker):
        (WebCore::DocumentMarkerController::addDictationResultMarker):
        (WebCore::DocumentMarkerController::shiftMarkers):
        * dom/DocumentMarkerController.h:
        * dom/Element.cpp:
        (WebCore::Element::focus): Add iOS-specific workaround for <rdar://problem/6699741>.
        * dom/Element.h: Register gesture events gesture{change, end, start}; guarded by ENABLE(IOS_GESTURE_EVENTS).
        * dom/EventContext.cpp: Opt-out of ENABLE(TOUCH_EVENTS)-guarded code when building the iOS port.
        * dom/EventContext.h: Ditto.
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::EventRelatedNodeResolver): Ditto.
        (WebCore::EventDispatcher::dispatchEvent): Ditto.
        (WebCore::EventPath::EventPath): Ditto.
        * dom/EventNames.h: Added events webkit{currentplaybacktargetiswirelesschanged, playbacktargetavailabilitychanged}
        and gesture{change, end, start}.
        * dom/EventNames.in: Added event names GestureEvent and WebKitPlaybackTargetAvailabilityEvent conditioned on
        the macro defines ENABLE_IOS_GESTURE_EVENTS and ENABLE_IOS_AIRPLAY.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsScrollOffset): Added iOS-specific code.
        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::willBeDeletedFrom): Ditto.
        (WebCore::Node::isDescendantOf): Fixed style issue in function prototype; moved '*' to the left side.
        (WebCore::Node::isDescendantOrShadowDescendantOf): Added.
        (WebCore::tryAddEventListener): Added iOS-specific code; also added FIXME comment.
        (WebCore::tryRemoveEventListener): Ditto.
        (WebCore::Node::dispatchEvent): Opt-out of ENABLE(TOUCH_EVENTS)-guarded code when building the iOS port.
        (WebCore::Node::defaultEventHandler): Added iOS-specific code.
        (WebCore::Node::willRespondToMouseMoveEvents): Added iOS-specific code; also added FIXME comment.
        (WebCore::Node::willRespondToMouseClickEvents): Added iOS-specific code; also added FIXME comment.
        (WebCore::Node::willRespondToMouseWheelEvents): Added.
        * dom/Node.h:
        * dom/Position.h:
        (WebCore::operator<): Added.
        (WebCore::operator>): Added.
        (WebCore::operator>=): Added.
        (WebCore::operator<=): Added.
        * dom/Range.cpp:
        (WebCore::Range::create): Added iOS-specific code; also added FIXME comment.
        (WebCore::intervalsSufficientlyOverlap): Added; guarded by PLATFORM(IOS).
        (WebCore::printRects): Added; guarded by PLATFORM(IOS).
        (WebCore::adjustLineHeightOfSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::coalesceSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::Range::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        * dom/Range.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects): Added iOS-specific code.
        (WebCore::ScriptExecutionContext::dispatchErrorEvent): Ditto.
        * dom/TreeScope.cpp:
        (WebCore::nodeFromPoint): Ditto.
        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes): Ditto.
        (WebCore::setViewportFeature): Added iOS-specific code.
        (WebCore::finalizeViewportArguments): Added; iOS-specific.
        * dom/ViewportArguments.h:
        * dom/make_names.pl: Added support to find the path to gcc with respect to the environment
        variable SDKROOT.
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::suspend):
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize setting m_layoutInterval to layoutScheduleThreshold.
        (WebCore::Settings::setLayoutInterval): Added.
        * page/Settings.h:
        (WebCore::Settings::layoutInterval): Added.

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the Windows build after r160672.
        
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        * platform/graphics/ca/win/PlatformCALayerWin.h:

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Apply overhang shadow and linen to UI-side layers
        https://bugs.webkit.org/show_bug.cgi?id=125807

        Reviewed by Tim Horton.
        
        With UI-side compositing, we need to apply the overhang shadow and linen
        background to layers in the UI process. Achieve this by setting a "custom
        appearance" flag on layers that need a shadow or linen background, and
        migrating this flag to the UI process. Static functions on ScrollbarThemeMac
        are exposed to do the actual setting.

        * WebCore.exp.in: Export ScrollbarThemeMac and GraphicsLayerCA functions.
        * WebCore.xcodeproj/project.pbxproj: ScrollbarThemeMac.h and ScrollbarThemeComposite.h
        need to be Private.
        * platform/graphics/GraphicsLayer.cpp: Initialize m_customAppearance.
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h: Getter/setter for CustomAppearance.
        (WebCore::GraphicsLayer::setCustomAppearance):
        (WebCore::GraphicsLayer::customAppearance):
        * platform/graphics/ca/GraphicsLayerCA.cpp: Update CustomAppearanceChanged as
        we do other properties.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateCustomAppearance):
        (WebCore::GraphicsLayerCA::setCustomAppearance):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: When we have a custom
        appearance, use ScrollbarThemeMac functions to update the layer. Ensure
        that if the bounds change, we update the shadow (whose path depends on the bounds).
        (PlatformCALayerMac::PlatformCALayerMac):
        (PlatformCALayerMac::clone):
        (PlatformCALayerMac::setBounds):
        (PlatformCALayerMac::requiresCustomAppearanceUpdateOnBoundsChange):
        (PlatformCALayerMac::updateCustomAppearance):
        * platform/mac/ScrollbarThemeMac.h: Export some static functions.
        * platform/mac/ScrollbarThemeMac.mm: Change code to use static functions.
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaBackground):
        (WebCore::ScrollbarThemeMac::removeOverhangAreaBackground):
        (WebCore::ScrollbarThemeMac::setUpOverhangAreaShadow):
        (WebCore::ScrollbarThemeMac::removeOverhangAreaShadow):
        (WebCore::ScrollbarThemeMac::setUpOverhangAreasLayerContents):
        (WebCore::ScrollbarThemeMac::setUpContentShadowLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateRootLayerPosition): No need to call
        setUpContentShadowLayer() now when size changes; PlatformCALayer takes
        care of that.
        (WebCore::RenderLayerCompositor::updateOverflowControlsLayers): Now set
        custom appearance via GraphicsLayer.

2013-12-16  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove dead code after converstion to VS2013
        https://bugs.webkit.org/show_bug.cgi?id=125795

        Reviewed by Darin Adler.

        * WebCorePrefix.h: Remove VS2012 include kludge.
        * loader/FTPDirectoryParser.cpp: Remove gmtime workaround code.
        * page/DOMWindow.cpp: Remove older pointer-based open implementation.
        * page/DOMWindow.h: Ditto
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::TextEncodingNameHash::equal): Remove optimization bug workaround
        * testing/Internals.cpp:
        (WebCore::Internals::openDummyInspectorFrontend): Remove compiler workaround

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/history changes
        https://bugs.webkit.org/show_bug.cgi?id=125769

        Reviewed by Darin Adler.

        * history/BackForwardClient.h:
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::current): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::BackForwardList::setCurrent): Added; guard by PLATFORM(IOS). Also added FIXME comment.
        (WebCore::BackForwardList::clearAllPageCaches): Added; guarded by PLATFORM(IOS).
        * history/BackForwardList.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore): Added iOS-specific code.
        (WebCore::CachedFrame::CachedFrame): Ditto.
        * history/CachedPage.cpp:
        (WebCore::CachedPage::restore): Ditto.
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem): Ditto.
        * history/HistoryItem.h:
        (WebCore::HistoryItem::scale): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::scaleIsInitial): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setScale): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::viewportArguments): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setViewportArguments): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::bookmarkID): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setBookmarkID): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::sharedLinkUniqueIdentifier): Added; guarded by PLATFORM(IOS).
        (WebCore::HistoryItem::setSharedLinkUniqueIdentifier): Added; guarded by PLATFORM(IOS).
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision): Added iOS-specific code.
        (WebCore::logCanCachePageDecision): Ditto.
        (WebCore::PageCache::canCachePageContainingThisFrame): Ditto.
        (WebCore::PageCache::canCache): Ditto.
        (WebCore::PageCache::pruneToCapacityNow): Added.
        * history/PageCache.h:

2013-12-16  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/svg changes
        https://bugs.webkit.org/show_bug.cgi?id=125784

        Reviewed by Darin Adler.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::willRespondToMouseClickEvents): Added.
        * svg/SVGAElement.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseAttribute): Added attribute listeners for touch{cancel, end, move, start},
        and gesture{change, end, start}.

2013-12-13  Jeffrey Pfau  <jpfau@apple.com>

        [Mac] Cache partitioning asserts when associated NSURLRequest is nil
        https://bugs.webkit.org/show_bug.cgi?id=125716

        Reviewed by Darin Adler.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2013-12-16  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Fix a few bugs with opening an IDB connection
        https://bugs.webkit.org/show_bug.cgi?id=125798

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::processPendingCalls): As the comment says, we should only
          early return when there *are* pending delete calls. The logic here was backwards,
          preventing the backend from ever getting to processPendingOpenCalls().

2013-12-16  Alex Christensen  <achristensen@webkit.org>

        Fixed Win64 build on VS2013.
        https://bugs.webkit.org/show_bug.cgi?id=125753

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        Added correct PlatformToolset for 64-bit builds.

2013-12-16  Simon Fraser  <simon.fraser@apple.com>

        Package up some data about scrollability into a struct for use in the scrolling tree
        https://bugs.webkit.org/show_bug.cgi?id=125792

        Reviewed by Beth Dakin.

        Both scrolling state nodes and scrolling nodes share a set of parameters
        relating to scrollability and rubberbanding, so package them into a struct
        for re-use. Send the struct wholesale to the scrolling thread.

        * page/scrolling/ScrollingCoordinator.h:
        (WebCore::ScrollableAreaParameters::ScrollableAreaParameters): New struct.
        (WebCore::ScrollableAreaParameters::operator==):
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode): Reordering.
        (WebCore::ScrollingStateScrollingNode::setScrollOrigin): Moved.
        (WebCore::ScrollingStateScrollingNode::setScrollableAreaParameters): Set the parameters all at once.
        (WebCore::ScrollingStateScrollingNode::setRequestedScrollPosition):
        * page/scrolling/ScrollingStateScrollingNode.h: Getters access the struct. Reorder member variables.
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollOrigin):
        (WebCore::ScrollingTreeScrollingNode::horizontalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::verticalScrollElasticity):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledHorizontalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::hasEnabledVerticalScrollbar):
        (WebCore::ScrollingTreeScrollingNode::canHaveScrollbars):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm: Removed setScrollParametersForNode().
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated): Set the params in this
        function. Reordering.

2013-12-16  Sam Weinig  <sam@webkit.org>

        CTTE: Convert more of SVG to use references
        https://bugs.webkit.org/show_bug.cgi?id=125762

        Reviewed by Darin Adler.

        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResource.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::removeClientFromCache):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        (WebCore::RenderSVGResourceContainer::markAllClientLayersForInvalidation):
        (WebCore::RenderSVGResourceContainer::markClientForInvalidation):
        (WebCore::RenderSVGResourceContainer::removeClient):
        * rendering/svg/RenderSVGResourceContainer.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::removeClientFromCache):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMarker.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::removeClientFromCache):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::removeClientFromCache):
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::removeClientFromCache):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        * rendering/svg/SVGResources.cpp:
        (WebCore::SVGResources::removeClientFromCache):
        * rendering/svg/SVGResources.h:
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientStyleChanged):
        (WebCore::SVGResourcesCache::clientWasAddedToTree):
        (WebCore::SVGResourcesCache::clientWillBeRemovedFromTree):
        (WebCore::SVGResourcesCache::clientDestroyed):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::invalidateFilterPrimitiveParent):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidate):
        (WebCore::SVGFilterPrimitiveStandardAttributes::primitiveAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGGraphicsElement.cpp:
        (WebCore::SVGGraphicsElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::invalidateMPathDependencies):
        (WebCore::SVGPathElement::pathSegListChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::setupInitialView):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::svgAttributeChanged):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::svgAttributeChanged):
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2013-12-16  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Add support for the computing the included intervals for a BoxShape
        https://bugs.webkit.org/show_bug.cgi?id=124605

        Reviewed by Andreas Kling.

        Setting shape-inside to content-box now works.

        Changed FloatRoundedRect::xInterceptsAtY() to include the bottom edge of
        the rectangle and to check for the special cases where any or all of the
        corner radii are empty.

        Test: fast/shapes/shape-inside/shape-inside-content-box.html

        * platform/graphics/FloatRoundedRect.cpp:
        (WebCore::FloatRoundedRect::xInterceptsAtY):
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getIncludedIntervals): Replaced the stub implementation with logic that's similar to getExcludedIntervals().
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Removed a meaningless assert.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor):

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects for more WAI-ARIA roles
        https://bugs.webkit.org/show_bug.cgi?id=125596

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with the proper AtkRoles, some of
        them to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-16  Eric Carlson  <eric.carlson@apple.com>

        Fix QuickTime plug-in replacement scripting bugs
        https://bugs.webkit.org/show_bug.cgi?id=125717

        Reviewed by Sam Weinig.

        No new tests, existing test updated.

        * Modules/plugins/QuickTimePluginReplacement.js:
        (Replacement): Change '' to "" to avoid "Empty character constant" warning when creating
            Derived Sources.
        (Replacement.prototype.createVideoElement): Handle qtsrc attribute. Remember base url.
        (Replacement.prototype.setURL): Resolve urls relative to base.

2013-12-15  Darin Adler  <darin@apple.com>

        Catch callers who forget to use initializeStyle
        https://bugs.webkit.org/show_bug.cgi?id=125763

        Reviewed by Andreas Kling.

        A recent fix was because a caller used setStyle first rather than using
        initializeStyle. This patch adds an assertion to catch cases where we do
        that so we see the mistake right away instead of indirectly later.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle): Simplified an assertion.
        (WebCore::RenderElement::setStyle): Added an assertion that m_hasInitializedStyle
        is true, with an exception for RenderView, which needs to be created before we
        have the correct style computed for it (at least for now). Also broke out an
        assertion that was using &&, since we would prefer to know which clause failed,
        making separate assertions more useful than a combined assertion.

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_CHECK_MENU_ITEM
        https://bugs.webkit.org/show_bug.cgi?id=125594

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with checkmenuitem role with the
        proper AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-16  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects with ATK_ROLE_ARTICLE
        https://bugs.webkit.org/show_bug.cgi?id=125587

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with article role with the proper
        AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-11-27  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix the preferred logical widths code to work with spanning grid items
        https://bugs.webkit.org/show_bug.cgi?id=123994

        Reviewed by Andreas Kling.

        From Blink r159189 by <jchaffraix@chromium.org>

        There was no definition in the specs for the intrinsic / preferred
        logical widths on the grid element. The following was proposed to
        the WG and later accepted:
        - The sum of the grid tracks' UsedBreadth is the minimum logical width
        - The sum of the grid tracks' MaxBreadth is the maximum logical width

        http://lists.w3.org/Archives/Public/www-style/2013Oct/0054.html
        for more information.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computeIntrinsicLogicalWidths):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::minContentForChild):
        (WebCore::RenderGrid::maxContentForChild):
        * rendering/RenderGrid.h:

2013-12-15  Frédéric Wang  <fred.wang@free.fr>

        Add support for maction@toggle
        https://bugs.webkit.org/show_bug.cgi?id=120059

        Reviewed by Chris Fleizach.

        Test: mathml/presentation/maction-toggle.html

        * mathml/MathMLSelectElement.cpp:
        (WebCore::MathMLSelectElement::getSelectedChildAndIndex):
        (WebCore::MathMLSelectElement::updateSelectedChild):
        (WebCore::MathMLSelectElement::defaultEventHandler):
        (WebCore::MathMLSelectElement::willRespondToMouseClickEvents):
        (WebCore::MathMLSelectElement::toggle):
        * mathml/MathMLSelectElement.h:

2013-12-15  Darin Adler  <darin@apple.com>

        More nullptr in RenderElement
        https://bugs.webkit.org/show_bug.cgi?id=125764

        Reviewed by Andreas Kling.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::uncachedFirstLineStyle):
        (WebCore::RenderElement::updateShapeImage):
        (WebCore::RenderElement::destroyLeftoverChildren):
        (WebCore::RenderElement::findNextLayer):
        Use nullptr in a few more places.

2013-12-15  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: 2x regression on Dromaeo DOM query tests
        https://bugs.webkit.org/show_bug.cgi?id=125377

        Reviewed by Filip Pizlo.

        The bug was caused by JSC not JIT'ing property accesses on document because of its having
        custom named getter (named properties).  This resulted in resolution of methods on document
        such as getElementById to happen inside the interpreter.

        Fixed the bug by using the new JSC type info flag which tells JSC to JIT property access on
        document, and then notifying JSC whenever a new named property appeared on document.

        Tests: js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
               js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
               js/dom/dfg-prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-2.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-3.html
               js/dom/prototype-chain-caching-with-impure-get-own-property-slot-traps-4.html

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::addImpureProperty): Wraps VM::addImpureProperty.
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader): Added the support for NewImpurePropertyFiresWatchpoints.
        * bindings/scripts/IDLAttributes.txt: Ditto.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::addDocumentNamedItem): Calls addImpureProperty.
        * html/HTMLDocument.idl: Added NewImpurePropertyFiresWatchpoints.

2013-12-15  Brent Fulgham  <bfulgham@webkit.org>

        [WIn] Unreviewed build fix after r160599

        * rendering/RenderMediaControls.cpp:
        (WebCore::determineState): RenderObject::theme now returns
        a reference.

2013-12-15  Brent Fulgham  <bfulgham@webkit.org>

        [Win] Unreviewed build fix

        The build system continues to attempt to build QTMovieWin, even
        though it is excluded from the build solution. I'm actually
        removing the project files to prevent this.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj: Removed.
        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj.filters: Removed.

2013-12-15  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] shape-outside animation does not handle 'auto' well
        https://bugs.webkit.org/show_bug.cgi?id=125700

        Reviewed by Dirk Schulze.

        Handle the case where we are blending/animating with a null ShapeValue due to 'auto'.

        Adapted LayoutTests/fast/shapes/shape-outside-floats/shape-outside-animation.html for testing this.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

2013-12-15  Andy Estes  <aestes@apple.com>

        [iOS] Upstream changes to FeatureDefines.xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=125742

        Reviewed by Dan Bernstein.

        * Configurations/FeatureDefines.xcconfig:

2013-12-14  Darin Adler  <darin@apple.com>

        Crash in CSSImageGeneratorValue and RenderScrollbar
        https://bugs.webkit.org/show_bug.cgi?id=125702

        Reviewed by Alexey Proskuryakov.

        This crash had two causes at two different levels. The crash fixes both.

        At the RenderScrollbar level, we were setting up a new renderer, a
        RenderScrollbarPart, and never calling initializeStyle. This meant that
        we did not do proper style setup, which meant we did not end up calling
        CSSImageGeneratorValue::addClient and so had a removeClient that was not
        properly balanced by an addClient. This is the primary bug.

        At the CSSImageGeneratorValue level, the addClient and removeClient
        functions were not properly handling possibly-mismatched calls. It was
        easy to fix the functions to work even if the calls are not perfectly
        matched up, which makes the consequences of a missed addClient call
        much less dire, no longer messing up reference counting. Fixing this
        mitigates the risk if we made this same mistake elsewhere, although I
        could not find any other places with some quick searches.

        Test: fast/css/scrollbar-image-crash.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient): Only call ref if this will
        add the first client.
        (WebCore::CSSImageGeneratorValue::removeClient): Only call deref if this
        removes the last client. Also added an assertion that can fire if we call
        removeClient without first calling addClient, which is illegal. However,
        the function handles that case without over-deref'ing itself.

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::updateScrollbarPart): Simplify the logic for
        needRenderer a bit. Use initializeStyle rather than setStyle when first
        creating the RenderScrollbarPart. Also use add and take properly so we
        don't do extra hash lookups the old code did with get/set and get/remove.

2013-12-14  Sam Weinig  <sam@webkit.org>

        CTTE: SVGResourcesCache::cachedResourcesForRenderObject() should take a reference
        https://bugs.webkit.org/show_bug.cgi?id=125743

        Reviewed by Dan Bernstein.

        * rendering/svg/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/svg/RenderSVGResource.cpp:
        (WebCore::requestPaintingResource):
        (WebCore::removeFromCacheAndInvalidateDependencies):
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paintReplaced):
        * rendering/svg/RenderSVGShape.cpp:
        (WebCore::RenderSVGShape::shouldGenerateMarkerPositions):
        (WebCore::RenderSVGShape::markerRect):
        (WebCore::RenderSVGShape::drawMarkers):
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren):
        (WebCore::SVGRenderSupport::layoutChildren):
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources):
        (WebCore::SVGRenderSupport::filtersForceContainerLayout):
        (WebCore::SVGRenderSupport::pointInClippingArea):
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::prepareToRenderSVGContent):
        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject):
        (WebCore::SVGResourcesCache::clientLayoutChanged):
        (WebCore::SVGResourcesCache::clientDestroyed):
        * rendering/svg/SVGResourcesCache.h:
        * rendering/svg/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles):

2013-12-14  Dan Bernstein  <mitz@apple.com>

        Clean up the project after r160487

        * WebCore.xcodeproj/project.pbxproj: Moved reference to Security.framework from the top
        level of the project to the Frameworks group, and made it SDK-relative.

2013-12-14  Andreas Kling  <akling@apple.com>

        Page::theme() should return a reference.
        <https://webkit.org/b/125737>

        There's always a RenderTheme, and not a single call site was checking
        for null pointers anyway. Updated RenderObject::theme() as well.

        Reviewed by Antti Koivisto.

2013-12-13  Sam Weinig  <sam@webkit.org>

        CTTE: Convert Element and RenderObject iterator usage to use range-based for loops
        https://bugs.webkit.org/show_bug.cgi?id=125731

        Reviewed by Andreas Kling.

        Perform straight forward conversions. A few stragglers that do odd things remain.

2013-12-14  Joseph Pecoraro  <pecoraro@apple.com>

        Small string improvements to JSInjectedScriptHost::type and other bindings
        https://bugs.webkit.org/show_bug.cgi?id=125722

        Reviewed by Timothy Hatcher.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::type):
        Use SmallStrings, jsNontrivialString and ASCIILiteral.

        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::type):
        Use jsNontrivialString.

        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::stringValue):
        Use jsNontrivialString and ASCIILiteral.

2013-12-14  Andreas Kling  <akling@apple.com>

        Move a couple of inlines from RenderObject to RenderElement.
        <https://webkit.org/b/125734>

        Take most of the inline functions on RenderObject that call style()
        and move them over to RenderElement where style() is branchless.

        Reviewed by Antti Koivisto.

2013-12-14  Andreas Kling  <akling@apple.com>

        RenderElement::rendererForRootBackground() should return a reference.
        <https://webkit.org/b/125735>

        This function always finds a renderer to return.

        Reviewed by Antti Koivisto.

2013-12-14  Mark Rowe  <mrowe@apple.com>

        Build fix after r160557.

        * Configurations/WebCore.xcconfig: Find JavaScriptCore.framework below SDKROOT so that we'll pick
        up the built version in production builds rather than the system version.

2013-12-14  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Use GMutexLocker instead of g_mutex_lock
        https://bugs.webkit.org/show_bug.cgi?id=125588

        Reviewed by Philippe Normand.

        No new tests because this is just code simplification.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkTimeoutCallback):
        (webkitVideoSinkRender):
        (unlockBufferMutex):
        (webkitVideoSinkUnlockStop):
        (webkitVideoSinkStart):

2013-12-13  Andreas Kling  <akling@apple.com>

        Move RenderObject::repaintAfterLayoutIfNeeded() to RenderElement.
        <https://webkit.org/b/125712>

        This function is only ever called on RenderElements, so move it there.
        Removes some RenderObject::style() branchiness.

        Reviewed by Darin Adler.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move Inspector and Debugger protocol domains into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125707

        Reviewed by Timothy Hatcher.

          - Switch TypeBuilder::Page::SearchMatch to TypeBuilder::GenericTypes::SearchMatch
            which comes from InspectorJSTypeBuilders.
          - Remove domains that moved to JavaScriptCore.

        No new tests, this only moves code around. There are no functional changes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        Add new files.

        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::searchInResource):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:
        Update includes and type builder type names.

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::breakpointActionTypeForString):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        Use the new getEnum function names.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove pre-VS2013 support code.
        https://bugs.webkit.org/show_bug.cgi?id=125693

        Reviewed by Darin Adler.

        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setQuota): Use C99 format arguments
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine): Ditto
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::pruneUnretainedIcons): Ditto 
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setMaximumSize): Ditto

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        SVG bindings are improperly being generated with "fastGetAttribute"
        https://bugs.webkit.org/show_bug.cgi?id=125670

        Reviewed by Darin Adler.

        A bug was introduced in r152845 that improperly called the
        IsSVGAnimatedType using the $attribute hash, rather than the
        expected $attribute->signature->type.

        * bindings/scripts/CodeGenerator.pm:
        (GetterExpression): Clean up attribute type confusion.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        * WebCore.vcxproj/WebCore.vcxproj: Exclude MediaPlayerPrivateQuickTimeVisualContext from
        Windows build.
        * platform/graphics/MediaPlayer.cpp: Don't use QuickTime as the PlatformMediaEngine.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        [GTK] Remove Warnings in building about duplicate INSPECTOR variables
        https://bugs.webkit.org/show_bug.cgi?id=125710

        Reviewed by Tim Horton.

        * GNUmakefile.am:

2013-12-13  Roger Fong  <roger_fong@apple.com>

        [WebGL] Check for global variable precision mismatch between vertex and fragment shaders.
        https://bugs.webkit.org/show_bug.cgi?id=125546.
        <rdar://problem/15203364>

        Reviewed by Brent Fulgham.

        Covered Khronos conformances tests:
        webgl/1.0.2/glsl/misc/shader-with-global-variable-precision-mismatch.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::linkProgram):
        * platform/graphics/GraphicsContext3D.h: Rename areProgramSymbolsValid since it currently only serves one purpose.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::precisionsMatch):

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix after r160548

        * WebCore.vcxproj/WebCoreGenerated.vcxproj: Specify that we are
        using the vs120_xp build target for Makefile-based projects.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Inspector Code Generation to JavaScriptCore for Runtime Domain
        https://bugs.webkit.org/show_bug.cgi?id=125595

        Reviewed by Timothy Hatcher.

          - CodeGeneration changed to output Frontend and Backend dispatchers
            in namespace Inspector. So update all the agent's appropriately.
          - Update Derived Sources code generation to use the Scripts that had
            moved to JavaScriptCore. Some ports just use JSC/inspector/scripts
            directly, but others have to use the Scripts exported by JSC
            in JavaScriptCore's PrivateHeaders.
          - Add ForwardingHeaders for the files generated in JavaScriptCore.
          - Update the names of Inspector DerivedSources files, since they
            were renamed to InspectorWeb*.

        No new tests, this only moves code around. There are no functional changes.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/inspector/InspectorJSBackendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorJSFrontendDispatchers.h: Added.
        * ForwardingHeaders/inspector/InspectorJSTypeBuilders.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/build-generated-files.sh:
        * WebCore.xcodeproj/project.pbxproj:
        Remove files, rename files, update code generation.

        * make-generated-sources.sh:
        Update this standalone developer script to fill in the new InspectorScripts variable.

        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.h:
        * inspector/ScriptCallFrame.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerRuntimeAgent.h:
        Updates header names and class namespace changes.

2013-12-13  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding RTCPeerConnectionErrorCallback
        https://bugs.webkit.org/show_bug.cgi?id=125574

        Reviewed by Eric Carlson.

        According to the spec there should be a RTCPeerConnectionErrorCallback function type for createOffer/Answer,
        setLocal/RemoteDescription and updateIce function calls. This callback must handle a DOMError object.

        Existing tests were updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::createOffer):
        (WebCore::RTCPeerConnection::createAnswer):
        (WebCore::RTCPeerConnection::setLocalDescription):
        (WebCore::RTCPeerConnection::setRemoteDescription):
        (WebCore::RTCPeerConnection::addIceCandidate):
        * Modules/mediastream/RTCErrorCallback.h: Removed.
        * Modules/mediastream/RTCErrorCallback.idl: Removed.
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCPeerConnectionErrorCallback.h: Added.
        * Modules/mediastream/RTCPeerConnectionErrorCallback.idl: Added.
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.cpp:
        (WebCore::RTCSessionDescriptionRequestImpl::create):
        (WebCore::RTCSessionDescriptionRequestImpl::RTCSessionDescriptionRequestImpl):
        (WebCore::RTCSessionDescriptionRequestImpl::requestFailed):
        * Modules/mediastream/RTCSessionDescriptionRequestImpl.h:
        * Modules/mediastream/RTCVoidRequestImpl.cpp:
        (WebCore::RTCVoidRequestImpl::create):
        (WebCore::RTCVoidRequestImpl::RTCVoidRequestImpl):
        (WebCore::RTCVoidRequestImpl::requestFailed):
        * Modules/mediastream/RTCVoidRequestImpl.h:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (WebCore::RTCPeerConnectionHandler::incompatibleConstraintsErrorName):
        (WebCore::RTCPeerConnectionHandler::invalidSessionDescriptionErrorName):
        (WebCore::RTCPeerConnectionHandler::incompatibleSessionDescriptionErrorName):
        (WebCore::RTCPeerConnectionHandler::internalErrorName):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::SessionRequestNotifier::SessionRequestNotifier):
        (WebCore::SessionRequestNotifier::fire):
        (WebCore::VoidRequestNotifier::VoidRequestNotifier):
        (WebCore::VoidRequestNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):
        (WebCore::RTCPeerConnectionHandlerMock::createAnswer):

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch WebKit solution to Visual Studio 2013
        https://bugs.webkit.org/show_bug.cgi?id=125192

        Reviewed by Anders Carlsson.

        * WebCore.vcxproj/WebCore.vcxproj: Update for VS2013
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj: Ditto

2013-12-13  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto Key.usages should be ordered alphabetically
        https://bugs.webkit.org/show_bug.cgi?id=125696

        Reviewed by Darin Adler.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::usages): Do it.

2013-12-13  Darin Adler  <darin@apple.com>

        Make some optimizations for DOM bindings involving vectors
        https://bugs.webkit.org/show_bug.cgi?id=125680

        Reviewed by Andreas Kling.

        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS): Removed unnecessary copying of vectors when converting them
        to JavaScript values.
        (WebCore::toRefPtrNativeArray): Use reserveInitialCapacity and uncheckedAppend.
        (WebCore::toNativeArray): Ditto.
        (WebCore::toNativeArguments): Ditto.

2013-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r155784): [GTK] Some methods incorrectly removed in r155784 and deprecated in r158662
        https://bugs.webkit.org/show_bug.cgi?id=125692

        Reviewed by Martin Robinson.

        In r155784 the build was fixed by skipping Console::profile() and
        Console::profileEnd(), but the patch also skipped other methods
        containing the profile method name. Those were incorrectly
        deprecated in r158662 thinking that the property had been removed
        in the idl.

        * bindings/gobject/WebKitDOMDeprecated.cpp: Undeprecate
        webkit_dom_html_head_element_get_profile and
        webkit_dom_html_head_element_set_profile.
        * bindings/gobject/WebKitDOMDeprecated.h: Ditto.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Ditto.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip webkit_dom_console_profile and
        webkit_dom_console_profile_end.

2013-12-13  Rob Buis  <rob.buis@samsung.com>

        Clean up SVGScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=125527

        Reviewed by Darin Adler.

        From the Blink port of this bug it becomes clear that svg/dom/SVGScriptElement/script-set-href.svg and
        svg/dom/svg-element-attribute-js-null.xhtml still hit an assert in Debug because SVGNames::typeAttr can't
        be used with fastGetAttribute in all cases, because it can be animatable. However for SVGScriptElement
        it is not animatable, so make isAnimatableAttribute virtual (note Debug only method) and allow typeAttr
        in the SVGScriptElement case to be useable for fastGetAttribute.

        Test: svg/dom/SVGScriptElement/script-type-attribute.svg

        * svg/SVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::isAnimatableAttribute):
        * svg/SVGScriptElement.h:

2013-12-13  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Expose also webkit_dom_document_get_url
        https://bugs.webkit.org/show_bug.cgi?id=125691

        Reviewed by Martin Robinson.

        For some reason we expose the URL property, so it can be accessed
        with g_object_get(), but we have a special case to not provide a
        public getter.

        * bindings/gobject/webkitdom.symbols: Add new symbol.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunctions): Remove the special case of URL property.

2013-12-13  Andreas Kling  <akling@apple.com>

        CSSFilterImageValue constructor should require both image and filter.
        <https://webkit.org/b/125056>

        Make the CSSFilterImageValue::create() helper take both the image and
        filter CSSValues by PassRef since they should never be null.

        Tweaked ComputedStyleExtractor::valueForFilter() to return a PassRef
        for this to work.

        Reviewed by Anders Carlsson.

2013-12-12  Andreas Kling  <akling@apple.com>

        StyleResolver::adjustRenderStyle() should take RenderStyle references.
        <https://webkit.org/b/125623>

        This function doesn't handle null styles being passed, so prevent
        it at compile time.

        Reviewed by Anders Carlsson.

2013-12-13  Darin Adler  <darin@apple.com>

        Eliminate awkward virtualComputedStyle construction
        https://bugs.webkit.org/show_bug.cgi?id=125681

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::computedStyle): Tweak coding style a bit.

        * dom/Element.h: Marked computedStyle virtual and got rid of virtualComputedStyle.
        This fixes a bug that we would not call SVGElement::computedStyle if we called
        it through an Element pointer or reference. Not sure how to get test coverage for this.

        * dom/Node.cpp:
        (WebCore::Node::computedStyle): Use a loop instead of recursive virtual calls.

        * dom/Node.h: Made computedStyle virtual and got rid of virtualComputedStyle.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::computedStyle): Tweak coding style a bit.

        * svg/SVGElement.h: Made computedStyle virtual (and FINAL) and got rid fo
        virtualComputedStyle.

2013-12-13  Darin Adler  <darin@apple.com>

        Fix a couple stray uses of RefPtr that should release
        https://bugs.webkit.org/show_bug.cgi?id=125679

        Reviewed by Andreas Kling.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFilter): Add calls to release, in
        one case rearranging the order of operations slightly so we
        don't release the pointer before using it.

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto wrapKey operation doesn't check key usage
        https://bugs.webkit.org/show_bug.cgi?id=125675

        Reviewed by Darin Adler.

        Tests: crypto/subtle/unwrapKey-check-usage.html
               crypto/subtle/wrapKey-check-usage.html

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::wrapKey):
        Added accidentally omitted code. Other operations are fine.

2013-12-12  Darin Adler  <darin@apple.com>

        Make some improvements in CSSImageGeneratorValue code
        https://bugs.webkit.org/show_bug.cgi?id=125676

        Reviewed by Simon Fraser.

        * css/CSSCrossfadeValue.cpp:
        (WebCore::subimageKnownToBeOpaque): Take a reference to the CSSValue, since
        it's known not to be null. Used checked cast.
        (WebCore::CSSCrossfadeValue::knownToBeOpaque): Updated to pass a reference.

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize): Use
        make_unique instead of adoptPtr.
        (WebCore::CSSImageGeneratorValue::subimageIsPending): Use checked cast.
        (WebCore::CSSImageGeneratorValue::cachedImageForCSSValue): Ditto, also
        use nullptr.

        * css/CSSImageGeneratorValue.h: Removed unneeded includes, added some forward
        declarations, used unique_ptr instead of OwnPtr, and used CSS_VALUE_TYPE_CASTS
        macro to create cast functions.

        * css/CSSValue.cpp: Removed unneeded include of CSSImageGeneratorValue.h.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::clear): Use nullptr instead of 0.
        (WebCore::StyleResolver::applyProperty): Use checked cast and pass references
        instead of pointers to StyleGeneratedImage::create.
        (WebCore::StyleResolver::styleImage): Use checked cast and pass references
        instead of pointers to generatedOrPendingFromValue.
        (WebCore::StyleResolver::generatedOrPendingFromValue): Take the value as a
        reference instead of a pointer.
        (WebCore::StyleResolver::loadPendingImage): Pass a refernece instead of a
        pointer to StyleGeneratedImage::create.
        (WebCore::StyleResolver::loadPendingImages): Use auto for iteration instead of
        a lot type name.

        * css/StyleResolver.h: Changed generatedOrPendingFromValue to take the value
        as a reference instead of a pointer.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilter): Pass a reference insted of a pointer to
        StyleGeneratedImage::create.
        (WebCore::crossfadeBlend): Ditto.
        (WebCore::blendFunc): Ditto. Also use references for local variables.

        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::StyleGeneratedImage): Use PassRef instead of
        PassRefPtr for the argument type.
        (WebCore::StyleGeneratedImage::cssValue): Updated since m_imageGeneratorValue
        is now a Ref instead of a RefPtr. Sadly this requires a const_cast that we can
        come back and get rid of later.
        (WebCore::StyleGeneratedImage::imageSize): Ditto.
        (WebCore::StyleGeneratedImage::image): Ditto.

        * rendering/style/StyleGeneratedImage.h: Changed create function and constructor
        to take a PassRef. Made imageValue non-const since it returns a non-const value,
        to be consistent with "conceptual const". Changed m_imageGeneratorValue to be a
        Ref instead of a RefPtr.

        * rendering/style/StyleImage.h: Made WrappedImagePtr be const void*, since it's
        a pointer used only for equality checks. Not a great idiom, but fine to use a
        const pointer instead of non-const, and avoids the const_cast we'd otherwise
        need in StyleGeneratedImage::data.

2013-12-12  KyungTae Kim  <ktf.kim@samsung.com>

        Improve the find word boundary performance
        https://bugs.webkit.org/show_bug.cgi?id=125619

        In endWordBoundary case, the textBreakPrevious call in findWordBoundary is unnecessary.
        So use separate function for endWordBoundary can improve the performance.

        Reviewed by Darin Adler.

        No tests because no operation changes.

        * editing/VisibleUnits.cpp: Use findEndWordBoundary in endWordBoundary
        (WebCore::endWordBoundary):
        * platform/text/TextBoundaries.cpp: Add findEndWordBoundary function
        (WebCore::findEndWordBoundary):
        * platform/text/TextBoundaries.h:
        * platform/text/mac/TextBoundaries.mm: Add findEndWordBoundary function
        (WebCore::findEndWordBoundary):

2013-12-12  Benjamin Poulain  <bpoulain@apple.com>

        Fix a silly mistake of r160467
        https://bugs.webkit.org/show_bug.cgi?id=125657

        Reviewed by Alexey Proskuryakov.

        Fix a typo. The validity check was missing the logical not.

        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):

2013-12-12  Tim Horton  <timothy_horton@apple.com>

        [wk2] Handle pinch-to-zoom gesture
        https://bugs.webkit.org/show_bug.cgi?id=125604

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export some TransformationMatrix functions.

        * WebCore.xcodeproj/project.pbxproj:
        Make some headers private so that RenderLayerCompositor/Backing can be used from WebKit2.

        * rendering/RenderLayerCompositor.h:
        (WebCore::RenderLayerCompositor::layerForContentShadow):
        Add a getter for the content shadow layer.

2013-12-12  Brady Eidson  <beidson@apple.com>

        DatabaseProcess IndexedDB: Establish a metadata backing store on disk
        https://bugs.webkit.org/show_bug.cgi?id=125258

        Reviewed by Alexey Proskuryakov, Anders Carlsson, and Tim Horton.

        Teach CrossThreadCopier how to handle IDBDatabaseMetadata.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseMetadata.cpp: Added.
        (WebCore::IDBDatabaseMetadata::isolatedCopy):
        (WebCore::IDBObjectStoreMetadata::isolatedCopy):
        (WebCore::IDBIndexMetadata::isolatedCopy):
        * Modules/indexeddb/IDBDatabaseMetadata.h:

        * Modules/indexeddb/IDBKeyPath.cpp:
        (WebCore::IDBKeyPath::isolatedCopy):
        * Modules/indexeddb/IDBKeyPath.h:

        * platform/CrossThreadCopier.cpp:
        (WebCore::::copy): Add an IDBDatabaseMetadata specialization.
        * platform/CrossThreadCopier.h:

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Add support for RSAES-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=125647

        Build fix.

        * crypto/CommonCryptoUtilities.h: Declare a newly used private constant.

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Add support for RSAES-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=125647

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/rsaes-pkcs1-v1_5-decrypt.html
               crypto/subtle/rsaes-pkcs1-v1_5-wrap-unwrap-aes.html

        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.h:
        Removed meaningless parameters arguments from private functions. The base arguments
        class is always empty.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.cpp: Added.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::CryptoAlgorithmRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::~CryptoAlgorithmRSAES_PKCS1_v1_5):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::create):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::identifier):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::encrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::decrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSAES_PKCS1_v1_5.h: Added.
        * crypto/mac/CryptoAlgorithmRSAES_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformEncrypt):
        (WebCore::CryptoAlgorithmRSAES_PKCS1_v1_5::platformDecrypt):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Added support for this algorithm.

2013-12-12  Andreas Kling  <akling@apple.com>

        [Mac] Stop not caching HTTP resources with "Vary" header in response.
        <https://webkit.org/b/125483>
        <rdar://problem/11781097>

        Remove the workaround preventing resources with the "Vary" header
        from going into cache, as the CFNetwork cache has supported this
        for quite a while now.

        31.5 MB progression on Membuster3, because we can now mmap those
        resources from disk once they are in the cache.

        We keep the workaround on PLATFORM(WIN) for now.

        Reviewed by Antti Koivisto.

2013-12-12  Sam Weinig  <sam@webkit.org>

        Replace uses of WTF::BitArray with std::bitset
        https://bugs.webkit.org/show_bug.cgi?id=125642

        Reviewed by Anders Carlsson.

        * css/CSSParser.cpp:
        (WebCore::filterProperties):
        (WebCore::CSSParser::createStyleProperties):
        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::asText):

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Public key in a generated KeyPair should always be extractable
        https://bugs.webkit.org/show_bug.cgi?id=125643

        Reviewed by Sam Weinig.

        The spec doesn't explain how generateKey works with key pairs (there are open bugs
        about that). Making public keys non-extractable makes no sense one way or another.

        Test: crypto/subtle/rsa-oaep-generate-non-extractable-key.html

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::generatePair):

2013-12-12  Alexey Proskuryakov  <ap@apple.com>

        Make algorithm.name return registered name, not normalized one
        https://bugs.webkit.org/show_bug.cgi?id=125641

        Reviewed by Anders Carlsson.

        Currently, WebCrypto editor's draft stipulates that algorithm name is lowercased
        as part of normalization.

        But it makes little sense to register algorithms as mixed (mostly upper) case, yet
        return the name lowercased. Other implementations don't bother respecting this,
        and signs are that the spec will change.

        I'd like to match other implementations here, because sticking to the spec only
        makes us fail 3rd party test suites for no good reason.

        Updated many existing tests.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoAlgorithmRegistry.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:

2013-12-12  Csaba Osztrogonác  <ossy@webkit.org>

        Move CertificateInfo to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124720

        Reviewed by Darin Adler.

        Based on the patch by Kwang Yul Seo <skyul@company100.net>

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/mac/CertificateInfo.h: Renamed from Source/WebKit2/Shared/mac/CertificateInfo.h.
        (WebCore::CertificateInfo::setCertificateChain): Added, because WebCoreArgumentCoders needs it.
        * platform/network/mac/CertificateInfoMac.mm: Renamed from Source/WebKit2/Shared/mac/CertificateInfo.mm.
        (WebCore::CertificateInfo::CertificateInfo): Moved encode() and decode() to WebCoreArgumentCodersMac.mm.
        * platform/network/soup/CertificateInfo.cpp: Copied from Source/WebKit2/Shared/WebCertificateInfo.h.
        (WebCore::CertificateInfo::CertificateInfo): Moved encode() and decode() to WebCoreArgumentCodersSoup.cpp.
        * platform/network/soup/CertificateInfo.h: Renamed from Source/WebKit2/Shared/soup/CertificateInfo.h.
        (WebCore::CertificateInfo::setCertificate): Added, because WebCoreArgumentCoders needs it.
        (WebCore::CertificateInfo::setTLSErrors): Added, because WebCoreArgumentCoders needs it.

2013-12-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160417.
        http://trac.webkit.org/changeset/160417
        https://bugs.webkit.org/show_bug.cgi?id=125629

        The patch is causing crashes (Requested by zdobersek1 on
        #webkit).

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        (WebCore::AXObjectCache::remove):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper):
        (WebCore::AXObjectCache::attachWrapper):
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper):
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper):

2013-12-12  Martin Robinson  <mrobinson@igalia.com>

        Remove a few more guards mistakenly added in r160367

        Reviewed by Carlos Garcia Campos

        r160367 was too liberal in hiding APIs from the GObject DOM bindings.
        We should expose the BatteryManager and the text and audio tracks.

        * Modules/battery/BatteryManager.idl:
        * html/HTMLMediaElement.idl:

2013-12-11  Darin Adler  <darin@apple.com>

        StylePendingImage needs to correctly manage the CSSValue pointer lifetime
        https://bugs.webkit.org/show_bug.cgi?id=125468

        Reviewed by Andreas Kling.

        Test: fast/css/pending-image-crash.xhtml

        Disconnect the reference counted StylePendingImage from the CSSValue that owns
        it when it's not needed any more, otherwise we could end up using a pointer
        that might no longer be valid.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::detachPendingImage): Added. Calls detachFromCSSValue
        on the current image if it is a StylePendingImage.
        (WebCore::CSSCursorImageValue::~CSSCursorImageValue): Call detachPendingImage.
        (WebCore::CSSCursorImageValue::cachedImage): Call detachPendingImage before changing
        m_image to a new value.
        (WebCore::CSSCursorImageValue::clearCachedImage): Ditto.
        * css/CSSCursorImageValue.h: Added detachPendingImage.

        * css/CSSImageSetValue.cpp:
        (WebCore::CSSImageSetValue::detachPendingImage): Added. Calls detachFromCSSValue
        on the current image set if it is a StylePendingImage.
        (WebCore::CSSImageSetValue::~CSSImageSetValue): Call detachPendingImage.
        (WebCore::CSSImageSetValue::cachedImageSet): Call detachPendingImage before changing
        m_imageSet to a new value.
        * css/CSSImageSetValue.h: Added detachPendingImage.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::detachPendingImage): Added. Calls detachFromCSSValue on the
        current image if it is a StylePendingImage.
        (WebCore::CSSImageValue::~CSSImageValue): Call detachPendingImage.
        (WebCore::CSSImageValue::cachedImage): Call detachPendingImage before changing m_image
        to a new value.
        * css/CSSImageValue.h: Added detachPendingImage.

        * rendering/style/StylePendingImage.h:
        (WebCore::StylePendingImage::cssImageValue): Added a null check.
        (WebCore::StylePendingImage::cssImageGeneratorValue): Added a null check.
        (WebCore::StylePendingImage::cssCursorImageValue): Added a null check.
        (WebCore::StylePendingImage::cssImageSetValue): Added a null check.
        (WebCore::StylePendingImage::detachFromCSSValue): Added. Sets m_value to null since
        the style is no longer using this StylePendingImage.
        (WebCore::StylePendingImage::data): Changed to use the "this" pointer since all we
        need is some arbitrary pointer uniquely identifying the image. Before loading the image,
        we have no suitable weak identifier, so it suffices to use the unique pointer to each
        StylePendingImage object. This function is used only in a limited way; it would be nice
        to find a way to make the code less strange long term.

2013-12-11  Darin Adler  <darin@apple.com>

        Remove some unneeded code noticed while looking at StylePendingImage
        https://bugs.webkit.org/show_bug.cgi?id=125618

        Reviewed by Andreas Kling.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingImage): Removed redundant function calls.

        * rendering/RenderImageResource.cpp: Removed unneeded nullImage and
        usesImageContainerSize member functions.
        (WebCore::RenderImageResource::image): Use Image::nullImage directly instead of
        through RenderImageResourceImage::nullImage.

        * rendering/RenderImageResource.h: Removed unneeded usesImageContainerSize
        and nullImage functions. Also removed unneeded includes.

        * rendering/RenderImageResourceStyleImage.h: Removed unneeded
        usesImageContainerSize override. Nobody was calling it.

2013-12-11  Benjamin Poulain  <bpoulain@apple.com>

        Add the CFNetwork implementation of the asynchronous ResourceHandle
        https://bugs.webkit.org/show_bug.cgi?id=124440

        Reviewed by Alexey Proskuryakov.

        Add a second subclass of ResourceHandleCFURLConnectionDelegate: ResourceHandleCFURLConnectionDelegateWithOperationQueue.
        The difference is those objects handle the network callback on a different queue.

        Some common code has been refactored in ResourceHandleCFURLConnectionDelegate to reduce duplicated code.

        The initialization of the request and connection is moved to the subclass to clean up initialization.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::willCacheResponseAsync):
        * platform/network/ResourceHandleClient.h:
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.cpp: Added.
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::~ResourceHandleCFURLConnectionDelegateWithOperationQueue):
        (WebCore::connectionWasCancelled):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::setupConnectionScheduling):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFinishLoading):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didFail):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::willCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveChallenge):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didSendBodyData):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::shouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::canRespondToProtectionSpace):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::didReceiveDataArray):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillSendRequest):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueDidReceiveResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueWillCacheResponse):
        (WebCore::ResourceHandleCFURLConnectionDelegateWithOperationQueue::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegateWithOperationQueue.h: Copied from Source/WebCore/platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h.
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::shouldUseCredentialStorage):
        (WebCore::ResourceHandle::canAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillSendRequest):
        (WebCore::ResourceHandle::continueDidReceiveResponse):
        (WebCore::ResourceHandle::continueShouldUseCredentialStorage):
        (WebCore::ResourceHandle::continueCanAuthenticateAgainstProtectionSpace):
        (WebCore::ResourceHandle::continueWillCacheResponse):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::ResourceHandleCFURLConnectionDelegate::releaseHandle):
        (WebCore::ResourceHandleCFURLConnectionDelegate::synthesizeRedirectResponseIfNecessary):
        (WebCore::ResourceHandleCFURLConnectionDelegate::createResourceRequest):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h:
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp:
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::setupConnectionScheduling):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueWillSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueDidReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueShouldUseCredentialStorage):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueWillCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::continueCanAuthenticateAgainstProtectionSpace):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h:

2013-12-11  David Kilzer  <ddkilzer@apple.com>

        Define m_hasBadParent in InlineBox if defined(ADDRESS_SANITIZER)
        <http://webkit.org/b/125329>

        Reviewed by Darin Adler.

        No tests since this is a build fix for:

            $ ./Tools/Scripts/build-webkit --release OTHER_CFLAGS="$inherited -DADDRESS_SANITIZER=1"

        * rendering/InlineBox.cpp:
        * rendering/InlineBox.h:
        - Replace ASSERT_DISABLED use with
          ASSERT_WITH_SECURITY_IMPLICATION_DISABLED for m_hasBadParent.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::~InlineFlowBox):
        - Use !ASSERT_WITH_SECURITY_IMPLICATION_DISABLED instead of
          #ifndef NDEBUG since this calls setHasBadParent().
        (WebCore::InlineFlowBox::checkConsistency):
        - Move ASSERT(!m_hasBadChildList) outside of
          #if CHECK_CONSISTENCY and change to
          ASSERT_WITH_SECURITY_IMPLICATION(!m_hasBadChildList).

        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::setHasBadChildList):
        - Change #ifndef NDEBUG to
          #if !ASSERT_WITH_SECURITY_IMPLICATION_DISABLED for code using
          m_hasBadChildList.

2013-12-11  Ralph Thomas  <ralpht@gmail.com>

        [WebGL] Fix build on GL ES 2.0 targets after r160119
        https://bugs.webkit.org/show_bug.cgi?id=125541

        Reviewed by Brent Fulgham.

        GL ES 2.0 doesn't define GL_HALF_FLOAT_ARB, so pass through HALF_FLOAT_OES (which is defined for GL ES 2.0).
        This change also reverts r160324 which incorrectly defined GL_HALF_FLOAT_ARB for the Windows ANGLE target.

        No new tests, no change in functionality.

        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D):

2013-12-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push More Inspector Required Classes Down into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125324

        Reviewed by Timothy Hatcher.

        Part 1: Push down core inspector classes.

          - Move InspectAgentBase, InspectorAgentRegistry, InspectorBackendDispatcher, InspectorValues
            down to JavaScriptCore and into the Inspector namespace.
          - Add forwarding headers for JavaScriptCore/inspector files.
          - Use the Inspector namespace where appropriate.
          - Rename InspectorBaseAgent to InspectorAgentBase for clarity.

        Part 2: Push Script wrapper classes down into JavaScriptCore/bindings.

          - Move ScriptObject and ScriptValue into JavaScriptCore but namespace Deprecated
          - Add forwarding headers
          - Use Deprecated::ScriptObject and Deprecated::ScriptValue everywhere.

        Part 3: Push Down ScriptFunctionCall

          - Move ScriptFunctionCall to JavaScriptCore/bindings into namespace Deprecated.
          - Give constructor a function to all for a different JSC::call, because
            WebCore ScriptFunctionCall's use JSMainThreadExecState when isMainThread.
          - Prefer Deprecated::ScriptFunctionCall everywhere it is used in WebCore.

        Part 4: Extract InspectorTypeBuilder helper functions

          - There is a chunk of InspectorTypeBuilder that never changes. Extract it into
            its own file, InspectorTypeBuilder.h in JSC/inspector, Inspector namespace.
          - This moves TypeBuilder from namespace WebCore to namespace Inspector
          - Rename the WebCore generated InspectorTypeBuilder to InspectorWebTypeBuilders,
            eventually the CodeGenerator script will do this for more then TypeBuilders
            and there will be "JS" TypeBuilders and "Web" TypeBuilders files.

        No new tests. No change in functionality, just moving things around.

        * CMakeLists.txt:
        * ForwardingHeaders/bindings/ScriptFunctionCall.h: Added.
        * ForwardingHeaders/bindings/ScriptObject.h: Added.
        * ForwardingHeaders/bindings/ScriptValue.h: Added.
        * ForwardingHeaders/inspector/InspectorAgentBase.h: Added.
        * ForwardingHeaders/inspector/InspectorAgentRegistry.h: Added.
        * ForwardingHeaders/inspector/InspectorBackendDispatcher.h: Added.
        * ForwardingHeaders/inspector/InspectorTypeBuilder.h: Added.
        * ForwardingHeaders/inspector/InspectorValues.h: Added.
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/indexeddb/IDBAny.cpp:
        (WebCore::IDBAny::scriptValue):
        (WebCore::IDBAny::IDBAny):
        * Modules/indexeddb/IDBAny.h:
        * Modules/indexeddb/IDBCursor.cpp:
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::primaryKey):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::setValueReady):
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::cmp):
        * Modules/indexeddb/IDBFactory.h:
        * Modules/indexeddb/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::count):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * Modules/indexeddb/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * Modules/indexeddb/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::lowerValue):
        (WebCore::IDBKeyRange::upperValue):
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBKeyRange.h:
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::generateIndexKeysForValue):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::openCursor):
        (WebCore::IDBObjectStore::count):
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::setResultCursor):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::onSuccessInternal):
        * Modules/indexeddb/IDBRequest.h:
        * Modules/mediastream/CapabilityRange.cpp:
        (WebCore::scriptValue):
        (WebCore::CapabilityRange::min):
        (WebCore::CapabilityRange::max):
        * Modules/mediastream/CapabilityRange.h:
        * Modules/mediastream/MediaTrackConstraint.h:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/plugins/QuickTimePluginReplacement.cpp:
        * Modules/plugins/QuickTimePluginReplacement.h:
        * UseJSC.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/Dictionary.h:
        (WebCore::Dictionary::getEventListener):
        * bindings/js/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromScriptValueAndKeyPath):
        (WebCore::injectIDBKeyIntoScriptValue):
        (WebCore::canInjectIDBKeyIntoScriptValue):
        (WebCore::deserializeIDBValue):
        (WebCore::deserializeIDBValueBuffer):
        (WebCore::idbKeyToScriptValue):
        (WebCore::scriptValueToIDBKey):
        * bindings/js/IDBBindingUtilities.h:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDictionary.cpp:
        (WebCore::JSDictionary::convertValue):
        * bindings/js/JSDictionary.h:
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::scriptValueAsNode):
        (WebCore::InjectedScriptHost::nodeAsScriptValue):
        (WebCore::JSInjectedScriptHost::inspectedObject):
        (WebCore::JSInjectedScriptHost::inspect):
        * bindings/js/JSInjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::createInjectedScript):
        * bindings/js/JSMainThreadExecState.cpp:
        (WebCore::functionCallHandlerFromAnyThread):
        * bindings/js/JSMainThreadExecState.h:
        (WebCore::JSMainThreadExecState::currentState):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::data):
        (WebCore::handleInitMessageEvent):
        * bindings/js/ScheduledAction.cpp:
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptArguments):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        (WebCore::ScriptController::evaluate):
        (WebCore::ScriptController::executeScriptInWorld):
        (WebCore::ScriptController::executeScript):
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setScriptSource):
        (WebCore::ScriptDebugServer::updateCallStack):
        (WebCore::ScriptDebugServer::dispatchDidPause):
        (WebCore::ScriptDebugServer::runScript):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptGlobalObject.cpp: Renamed from Source/WebCore/bindings/js/ScriptObject.cpp.
        (WebCore::handleException):
        (WebCore::ScriptGlobalObject::set):
        (WebCore::ScriptGlobalObject::get):
        (WebCore::ScriptGlobalObject::remove):
        * bindings/js/ScriptGlobalObject.h: Copied from Source/WebCore/inspector/ScriptCallStack.h.
        (WebCore::ScriptGlobalObject::ScriptGlobalObject):
        * bindings/js/ScriptObject.h: Removed.
        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        (WebCore::ScriptProfile::buildInspectorObjectForHead):
        (WebCore::ScriptProfile::buildInspectorObjectForBottomUpHead):
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::objectByHeapObjectId):
        (WebCore::ScriptProfiler::getHeapObjectId):
        * bindings/js/ScriptProfiler.h:
        * bindings/js/ScriptState.h:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeForInspector):
        (WebCore::SerializedScriptValue::serialize):
        (WebCore::SerializedScriptValue::deserialize):
        * bindings/js/SerializedScriptValue.h:
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        (WebCore::WorkerScriptController::setException):
        * bindings/js/WorkerScriptController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjAnyAttribute):
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::initCustomEvent):
        * dom/CustomEvent.h:
        (WebCore::CustomEvent::detail):
        * dom/MessageEvent.cpp:
        (WebCore::MessageEvent::MessageEvent):
        (WebCore::MessageEvent::initMessageEvent):
        * dom/MessageEvent.h:
        (WebCore::MessageEvent::create):
        (WebCore::MessageEvent::dataAsScriptValue):
        * dom/PopStateEvent.h:
        (WebCore::PopStateEvent::state):
        * dom/ScriptElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/parser/XSSAuditor.cpp:
        * html/parser/XSSAuditorDelegate.cpp:
        * inspector/CodeGeneratorInspector.py:
        (RawTypes.BaseType.get_raw_validator_call_text):
        (RawTypes.Object.get_array_item_raw_c_type_text):
        (RawTypes.Any.get_array_item_raw_c_type_text):
        (RawTypes.Array.get_array_item_raw_c_type_text):
        (CommandReturnPassModel.OptOutput.get_return_var_type):
        (CommandReturnPassModel.OptOutput.get_output_parameter_type):
        (TypeModel.ExactlyInt.get_input_param_type_text):
        (TypeModel.ExactlyInt.get_opt_output_type_):
        (TypeModel.init_class):
        (TypeBindings.create_named_type_declaration.Helper):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (TypeBindings.create_type_declaration_.EnumBinding.get_setter_value_expression_pattern):
        (TypeBindings.create_type_declaration_.ClassBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (Inspector):
        (ArrayBinding.get_array_item_c_type_text):
        (Generator.go):
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:
        (void):
        (InspectorFrontend_h):
        (InspectorBackendDispatchers_h):
        * inspector/ConsoleMessage.cpp:
        (WebCore::messageSourceValue):
        (WebCore::messageTypeValue):
        (WebCore::messageLevelValue):
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ConsoleMessage.h:
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::buildObjectForSearchMatch):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::InjectedScript):
        (WebCore::InjectedScript::evaluate):
        (WebCore::InjectedScript::callFunctionOn):
        (WebCore::InjectedScript::evaluateOnCallFrame):
        (WebCore::InjectedScript::getFunctionDetails):
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::getInternalProperties):
        (WebCore::InjectedScript::nodeForObjectId):
        (WebCore::InjectedScript::releaseObject):
        (WebCore::InjectedScript::wrapCallFrames):
        (WebCore::InjectedScript::wrapObject):
        (WebCore::InjectedScript::wrapTable):
        (WebCore::InjectedScript::wrapNode):
        (WebCore::InjectedScript::findObjectById):
        (WebCore::InjectedScript::inspectNode):
        (WebCore::InjectedScript::releaseObjectGroup):
        (WebCore::InjectedScript::nodeAsScriptValue):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptBase.cpp:
        (WebCore::InjectedScriptBase::InjectedScriptBase):
        (WebCore::InjectedScriptBase::initialize):
        (WebCore::InjectedScriptBase::injectedScriptObject):
        (WebCore::InjectedScriptBase::callFunctionWithEvalEnabled):
        (WebCore::InjectedScriptBase::makeCall):
        (WebCore::InjectedScriptBase::makeEvalCall):
        * inspector/InjectedScriptBase.h:
        * inspector/InjectedScriptCanvasModule.cpp:
        (WebCore::InjectedScriptCanvasModule::wrapCanvas2DContext):
        (WebCore::InjectedScriptCanvasModule::wrapWebGLContext):
        (WebCore::InjectedScriptCanvasModule::callWrapContextFunction):
        (WebCore::InjectedScriptCanvasModule::markFrameEnd):
        (WebCore::InjectedScriptCanvasModule::callStartCapturingFunction):
        (WebCore::InjectedScriptCanvasModule::callVoidFunctionWithTraceLogIdArgument):
        (WebCore::InjectedScriptCanvasModule::traceLog):
        (WebCore::InjectedScriptCanvasModule::replayTraceLog):
        (WebCore::InjectedScriptCanvasModule::resourceInfo):
        (WebCore::InjectedScriptCanvasModule::resourceState):
        * inspector/InjectedScriptCanvasModule.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectImpl):
        (WebCore::InjectedScriptHost::InspectableObject::get):
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptManager.cpp:
        (WebCore::InjectedScriptManager::injectedScriptFor):
        * inspector/InjectedScriptManager.h:
        * inspector/InjectedScriptModule.cpp:
        (WebCore::InjectedScriptModule::ensureInjected):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCacheForFrame):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getInlineStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getStyleSheet):
        (WebCore::InspectorCSSAgent::setStyleText):
        (WebCore::InspectorCSSAgent::setPropertyText):
        (WebCore::InspectorCSSAgent::toggleProperty):
        (WebCore::InspectorCSSAgent::setRuleSelector):
        (WebCore::InspectorCSSAgent::addRule):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::stopSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::collectStyleSheets):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildObjectForRule):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::wrapWebGLRenderingContextForInstrumentation):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::injectedScriptCanvasModule):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorCanvasInstrumentation.h:
        (WebCore::InspectorInstrumentation::wrapCanvas2DRenderingContextForInstrumentation):
        (WebCore::InspectorInstrumentation::wrapWebGLRenderingContextForInstrumentation):
        * inspector/InspectorClient.cpp:
        * inspector/InspectorClient.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectableHeapObject::get):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::querySelectorAll):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::resolveNode):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        (WebCore::InspectorDOMStorageAgent::storageId):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::breakpointActionTypeForString):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::scriptToInspectorObject):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getFunctionDetails):
        (WebCore::InspectorDebuggerAgent::evaluateOnCallFrame):
        (WebCore::InspectorDebuggerAgent::compileScript):
        (WebCore::InspectorDebuggerAgent::runScript):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorForwarding.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::evaluateAsBoolean):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::create):
        (WebCore::FrontendMenuProvider::disconnect):
        (WebCore::FrontendMenuProvider::FrontendMenuProvider):
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):
        (WebCore::InspectorFrontendHost::showContextMenu):
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        (WebCore::InspectorHeapProfilerAgent::getObjectByHeapObjectId):
        (WebCore::InspectorHeapProfilerAgent::getHeapObjectId):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        (WebCore::InspectorLayerTreeAgent::buildObjectForLayer):
        (WebCore::InspectorLayerTreeAgent::buildObjectForIntRect):
        (WebCore::InspectorLayerTreeAgent::reasonsForCompositingLayer):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::resourceTypeJson):
        (WebCore::InspectorPageAgent::cachedResourceTypeJson):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::buildObjectForCookie):
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::getResourceTree):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::buildObjectForSearchResult):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrame):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::createProfileHeader):
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getCPUProfile):
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::getObjectByHeapObjectId):
        (WebCore::InspectorProfilerAgent::getHeapObjectId):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForCachedResource):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        (WebCore::buildErrorRangeObject):
        (WebCore::InspectorRuntimeAgent::parse):
        (WebCore::InspectorRuntimeAgent::evaluate):
        (WebCore::InspectorRuntimeAgent::callFunctionOn):
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::buildSourceRangeObject):
        (WebCore::buildMediaObject):
        (WebCore::fillMediaListChain):
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheetInfo):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        (WebCore::InspectorStyleSheet::canBind):
        * inspector/InspectorStyleTextEditor.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::toProtocol):
        (WebCore::InspectorTimelineAgent::innerAddRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::sendEvent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/InspectorWebAgentBase.h: Renamed from Source/WebCore/inspector/InspectorAgentRegistry.h.
        (WebCore::InspectorAgentBase::InspectorAgentBase):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/InstrumentingAgents.cpp:
        * inspector/NetworkResourcesData.cpp:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::InspectableNode::get):
        * inspector/PageDebuggerAgent.cpp:
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::create):
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::argumentAt):
        (WebCore::ScriptArguments::getFirstArgumentAsString):
        * inspector/ScriptArguments.h:
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h:
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * inspector/ScriptDebugListener.h:
        * inspector/TimelineRecordFactory.cpp:
        * inspector/TimelineRecordFactory.h:
        (WebCore::TimelineRecordFactory::createWebSocketCreateData):
        (WebCore::TimelineRecordFactory::createGenericWebSocketData):
        * inspector/WorkerConsoleAgent.cpp:
        * inspector/WorkerDebuggerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * page/Console.cpp:
        * page/ContentSecurityPolicy.cpp:
        * page/Frame.cpp:
        * page/PageConsole.cpp:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::performRequest):
        * testing/Internals.cpp:
        (WebCore::Internals::parserMetaData):
        * testing/Internals.h:
        * workers/SharedWorkerGlobalScope.cpp:
        (WebCore::createConnectEvent):
        * workers/WorkerGlobalScope.cpp:
        (WebCore::WorkerGlobalScope::importScripts):
        * workers/WorkerThread.cpp:
        * xml/XMLTreeViewer.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-12-11  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Store SHA1 hash in std::array
        https://bugs.webkit.org/show_bug.cgi?id=125446

        Reviewed by Darin Adler.

        Change Vector to std::array and use typedef.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::createDigest):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-12-11  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto keys should support structured clone
        https://bugs.webkit.org/show_bug.cgi?id=125590

        Reviewed by Oliver Hunt.

        Tests: crypto/subtle/aes-postMessage.html
               crypto/subtle/hmac-postMessage.html
               crypto/subtle/postMessage-worker.html
               crypto/subtle/rsa-postMessage.html

        * crypto/CryptoAlgorithmIdentifier.h:
        (WebCore::CryptoAlgorithmIdentifier):
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        AES_KW was added to WebCrypto spec editor's draft yesterday night. Now that we're
        adding a matching enum for structired clone serialization, it's as good a time as
        any to update the order of values to match.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::countUsages):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::read):
        (WebCore::CloneDeserializer::readHMACKey):
        (WebCore::CloneDeserializer::readAESKey):
        (WebCore::CloneDeserializer::readRSAKey):
        (WebCore::CloneDeserializer::readCryptoKey):
        (WebCore::CloneDeserializer::readTerminal):
        Added serialization/deserialization for CryptoKey. This doesn't update version
        number, because we don't currently store structured clones in persistent storage -
        and even if we did, we wouldn't want to invalidate everything users already stored.

        * crypto/CryptoAlgorithmRegistry.cpp:
        (WebCore::CryptoAlgorithmRegistry::shared):
        (WebCore::registryMutex):
        (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        (WebCore::CryptoAlgorithmRegistry::nameForIdentifier):
        (WebCore::CryptoAlgorithmRegistry::create):
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/CryptoKey.idl:
        With structured clone, it is now possible to send a Key to a web worker. That's
        of no practical use because the crypto API is not exposed in workers, but we
        shouldn't crash anyway.

        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::CryptoKeyAES):
        (WebCore::CryptoKeyAES::isValidAESAlgorithm):
        * crypto/keys/CryptoKeyAES.h:
        Exposed isValidAESAlgorithm, so that a caller could know whether the constructor
        will assert.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCommon.props:
        Added crypto/keys to search paths to avoid build breakage.

2013-12-11  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Highlight margin-shape for shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=125175

        Reviewed by Darin Adler.

        In addition to highlighting the shape, also highlight the shape created
        by shape-margin with a slightly more transparent color. This patch modifies
        the shape info passed to the Inspector Overlay to include a path for both
        the raw shape and the shape with margin.

        Test: inspector-protocol/model/highlight-shape-outside-margin.html

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForShapeOutside): Call Shape::buildDisplayPaths rather than
        Shape::buildPath, and pass along any relevant paths to the Inspector overlay.
        * inspector/InspectorOverlayPage.js:
        (_drawShapeHighlight): Draw the margin shape in addition to the raw shape.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::addRoundedRect): Add a rounded rect to the path.
        (WebCore::BoxShape::buildDisplayPaths): Create the applicable [margin/padding/raw] shapes.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::addPolygon): Add a set of vertices as a polygon to the path.
        (WebCore::PolygonShape::buildDisplayPaths): Create the applicable [margin/padding/raw] shapes.
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShape::buildDisplayPaths): Ditto.
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::buildDisplayPaths): Ditto.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose accessibility objects WAI-ARIA landmark roles
        https://bugs.webkit.org/show_bug.cgi?id=125584

        Reviewed by Chris Fleizach.

        Exposed accessibility objects with landmark roles with the proper
        AtkRole, to be provided by the next stable release of ATK.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetAttributes):
        (atkRole):

2013-12-11  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Add a UPower-based BatteryProvider
        https://bugs.webkit.org/show_bug.cgi?id=115719

        Reviewed by Martin Robinson.

        Introduce the BatteryProviderUPower, a provider of the system's battery status that produces the information
        using the upower-glib library.

        The BatteryProviderUPower creates a new UPower client when the provider should start emitting updates and hooks
        up to device alteration signals. These only fire recalculation of the battery status when a battery device is altered.

        When recalculating, every battery device is taken into account, accumulating the energy capacities when both empty
        and full, the current rate of energy charging/discharging, and the battery status (whether the device is charging or
        discharging). This gives a set of data that covers the overall battery status of the system.

        This data is then used to calculate the battery status as perceived by the WebCore implementation. Charging is determined
        by examining the integral sign of the current combined energy rate. Charging and discharging times are calculated, when
        appropriate, by dividing the chargable/dischargable capacity with the current combined energy rate. The battery level is
        calculated by dividing the current energy capacity with the full energy capacity (i.e. the combined capacity of all
        the batteries that the system possesses). The status is (indirectly) passed onto BatteryManager by invoking the
        updateBatteryStatus method on the client, with the first parameter representing the battery charging/discharging state,
        the second parameter representing the time left until the battery is fully charged (when charging) or fully
        depleted (when discharging), and the third parameter representing the current battery level.

        Whenever the implementation cannot provide any information about the battery status of the system, the client's
        updateBatteryStatus method is invoked with the first parameter reporting the unavailability of any information
        about the battery status. The other two parameters can be omitted as they default to 0 when not given and are neither
        available nor useful in such circumstances. The client should handle such an update by reporting the 'default' battery
        status - charging, the battery level being at 1.0 and both the charging and discharging time having the value of
        the positive infinity (as per the Battery Status API specification).

        The implementation is heavily inspired by a similar approach to calculating battery status in GNOME Settings Daemon.

        No new tests - no new functionality. The feature is not yet enabled. When enabled, the relevant tests pass.

        * GNUmakefile.list.am: Add the BatteryProviderUPower(Client) build targets.
        * platform/glib/BatteryProviderUPower.cpp: Added.
        (powerDeviceAlterationCallback):
        (BatteryProviderUPower::BatteryProviderUPower):
        (BatteryProviderUPower::startUpdating):
        (BatteryProviderUPower::stopUpdating):
        (BatteryProviderUPower::updateBatteryStatus):
        * platform/glib/BatteryProviderUPower.h: Added.
        (WebCore):
        (BatteryProviderUPower):
        * platform/glib/BatteryProviderUPowerClient.h: Added.
        (WebCore):
        (BatteryProviderUPowerClient):

2013-12-11  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Improving createOffer and createAnswer LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=125568

        Reviewed by Philippe Normand.

        The constraints parameter should be optional in both. Also adding tests to check if we already have a local SDP
        when creating an answer.

        Existing tests were updated.

        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createOffer):

2013-12-11  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [EFL] Fix build with CONTEXT_MENUS flag set OFF
        https://bugs.webkit.org/show_bug.cgi?id=125572

        Reviewed by Gyuyoung Kim.

        dispatchEventAsContextMenuEvent is called regardless of CONTEXT_MENUS flag setting,
        thus its definition in InspectorFrontendHost should not be guarded by this flag.

        No new tests, no behaviour change.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):

2013-12-11  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        [CURL] Build fails after r160386.
        https://bugs.webkit.org/show_bug.cgi?id=125571

        Reviewed by Zoltan Herczeg.

        Need no new tests.

        Fix a typo in commit r160386 that prevents building with curl.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):

2013-12-11  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] Take into account fill-rule for polygon interpolation
        https://bugs.webkit.org/show_bug.cgi?id=125508

        Reviewed by Dirk Schulze.

        Implement the polygon fill-rule part of http://dev.w3.org/csswg/css-shapes/#basic-shape-interpolation.

        Adapt fast/shapes/shape-outside-floats/shape-outside-animation.html.

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):

2013-12-11  Mario Sanchez Prada  <mario.prada@samsung.com>

        Programmatically-inserted children lack accessibility events
        https://bugs.webkit.org/show_bug.cgi?id=100275

        Reviewed by Chris Fleizach.

        Test: accessibility/children-changed-sends-notification.html

        Emit children-changed::add and children-changed::remove whenever
        an object has been added/removed to the accessibility hierarchy,
        that is, when a new AtkObject is being attached/detached.

        * accessibility/AXObjectCache.h: Added new enumeration to know
        when we are detaching a wrapper because of the cache or the
        element is being destroyed, so we can use that information.
        (WebCore::AXObjectCache::detachWrapper): Added a new parameter and
        updated all the prototypes in different ports.
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache): Call detachWrapper()
        specifying that we do it because the cache is being destroyed.
        (WebCore::AXObjectCache::remove): Call detachWrapper() specifying
        that we do it because an accessible element is being destroyed.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::detachWrapper): Emit the children-changed
        signal when needed. We rely on the cached reference to the parent
        AtkObject (using the implementation of atk_object_get_parent from
        the AtkObject class) to find the right object to emit the signal
        from here, since the accessibility hierarchy from WebCore will no
        longer be accessible at this point.
        (WebCore::AXObjectCache::attachWrapper): Emit the children-change
        signal from here unless we are in the middle of a layout update,
        trying to provide as much information (e.g. the offset) as possible.
        (WebCore::AXObjectCache::postPlatformNotification): Make sure we
        update (touch) the subtree under an accessibility object whenever
        we receive AXChildrenChanded from WebCore, to ensure that those
        objects will also be visible rightaway to ATs, and that those get
        properly notified of the event at that very same moment.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::detachWrapper): Updated function signature.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::detachWrapper): Ditto.
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::detachWrapper): Ditto.

2013-12-11  Andreas Kling  <akling@apple.com>

        REGRESSION(r160389): SVG test assertion extravaganza.

        Unreviewed. Use getAttribute() instead of fastGetAttribute() for
        the "type" attribute since it's animatable on SVG elements.

2013-12-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Set m_nextBreakablePosition as private in InlineIterator, and use it.
        https://bugs.webkit.org/show_bug.cgi?id=125482

        Reviewed by Andreas Kling.

        InlineIterator has been exported m_nextBreakablePosition as public though it is member variable.
        This patch set it as private, and add getter/setter functions for it.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::InlineIterator):
        (WebCore::InlineIterator::nextBreakablePosition):
        (WebCore::InlineIterator::setNextBreakablePosition):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleText):

2013-12-10  Gurpreet Kaur  <k.gurpreet@samsung.com>

        top and bottom black background line not getting displayed
        https://bugs.webkit.org/show_bug.cgi?id=21664

        Reviewed by Simon Fraser.

        The table cell's background was not being displayed. Since the table
        cell had no child correct offsetWidth was not being set even if table
        width is being defined.

        Test: fast/dom/HTMLTableElement/empy-table-cell-with-background-color.html

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        cellHasContent should also be set to true incase background color is
        present.

2013-12-10  Beth Dakin  <bdakin@apple.com>

        Horizontal rubber-banding without a horizontal scrollbar is distracting
        https://bugs.webkit.org/show_bug.cgi?id=125550

        Reviewed by Simon Fraser.

        Setting the ScrollElasticity to ScrollElasticityAutomatic will make sure we only 
        rubber-band horizontally when there is a horizontal scrollbar.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        Correct a preprocessor guard from a mis-merged patch

        In r160367, I mismerged a patch from Gustavo Noronha. This commit
        fixes the merge and thus fixes the CMake build.

        * html/HTMLMediaElement.idl: Move the preprocessor guard to the correct property.

2013-12-10  Rob Buis  <rob.buis@samsung.com>

        Clean up SVGScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=125527

        Reviewed by Sam Weinig.

        Rewrite to not store type in m_type and also remove type getter/setter.

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::parseAttribute):
        (WebCore::SVGScriptElement::typeAttributeValue):
        * svg/SVGScriptElement.h:
        * svg/SVGScriptElement.idl:

2013-12-10  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Use std::array when computing MD5 checksum
        https://bugs.webkit.org/show_bug.cgi?id=125509

        Reviewed by Anders Carlsson.

        Use MD5::Digest type and MD5::hashSize when computing MD5 checksum.

        * platform/network/curl/CurlCacheEntry.cpp:
        (WebCore::CurlCacheEntry::generateBaseFilename):

2013-12-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Expose splitter elements with ATK_ROLE_SEPARATOR
        https://bugs.webkit.org/show_bug.cgi?id=125522

        Reviewed by Chris Fleizach.

        Expose objects with SplitterRole role as ATK_ROLE_SEPARATOR.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-10  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Elements with role 'alertdialog' should be ATK_ROLE_ALERT
        https://bugs.webkit.org/show_bug.cgi?id=125521

        Reviewed by Chris Fleizach.

        Stop exposing alert dialogs as ATK_ROLE_DIALOG and do it as
        ATK_ROLE_ALERT instead.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-12-10  Brendan Long  <b.long@cablelabs.com>

        [GTK][GStreamer] media/video-preload.html is flakily crashing on WK2
        https://bugs.webkit.org/show_bug.cgi?id=125411

        Reviewed by Philippe Normand.

        No new tests because this fixes flakeyness in existing tests (media/video-preload.html, and various tests in media/track/{audio,in-band,video}).

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkitTextCombinerPadGetProperty): Copy tag list to prevent concurrent modification problems.
        (webkitTextCombinerPadEvent): Add locking.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Call tagsChanged() because we need it to setup m_tags.
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Clear m_tags.
        (WebCore::TrackPrivateBaseGStreamer::tagsChanged): Lookup the tags while we're in this callback, because it's the only time we can guarantee that the input-selector won't unref them.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Use m_tags.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Add m_tags and a mutex.

2013-12-10  László Langó  <lango@inf.u-szeged.hu>

        PageConsole::addMessage should automatically determine column number alongside line number
        https://bugs.webkit.org/show_bug.cgi?id=114319

        Reviewed by Joseph Pecoraro.

        * dom/InlineStyleSheetOwner.cpp:
        (WebCore::InlineStyleSheetOwner::InlineStyleSheetOwner):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        * dom/ScriptableDocumentParser.h:
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::styleAttributeChanged):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::didReceiveParsedChunkFromBackgroundParser):
        (WebCore::HTMLDocumentParser::pumpPendingSpeculations):
        * html/parser/HTMLDocumentParser.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::buildInitiatorObject):
        * page/Console.cpp:
        (WebCore::internalAddMessage):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::printSourceURLAndPosition):
        (WebCore::PageConsole::addMessage):
        * page/PageConsole.h:
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::error):

2013-12-10  Andreas Kling  <akling@apple.com>

        Jettison all StyleResolver data on memory pressure.
        <https://webkit.org/b/125498>

        The StyleResolver can be rebuilt relatively quickly; we already
        have an optimization that discards it some time after last use.

        If we find ourseles under serious memory pressure, don't wait for
        the timer to kick in, throw everything overboard right away.

        ~5MB progression post-pressure on Membuster3.

        Reviewed by Anders Carlsson.

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        [GTK] [CMake] Add support for building the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=116375

        Reviewed by Gustavo Noronha Silva.

        The CMake build is more complete than the autotools counterpart, so autotools doesn't consider
        some supplemental IDL attributes when building the DOM bindings. To prevent API breaks we should
        protect these attributes from DOM binding generation.

        * Modules/battery/BatteryManager.idl: Protect non-GObject DOM bound methods by C preprocessor checks.
        * Modules/battery/NavigatorBattery.idl: Ditto.
        * Modules/mediastream/HTMLMediaElementMediaStream.idl: Ditto.
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl: Ditto.
        * Modules/networkinfo/NetworkInfoConnection.idl: Ditto.
        * PlatformGTK.cmake: Add build steps for building the bindings.
        * dom/Document.idl: Protect non-GObject DOM bound methods by C preprocessor checks.
        * html/HTMLMediaElement.idl: Ditto.

2013-12-10  Martin Robinson  <mrobinson@igalia.com>

        Various fixes for the CMake GTK+ build

        Reviewed by Gustavo Noronha.

        * PlatformGTK.cmake: Update source list.

2013-12-10  Robert Sipka  <sipka@inf.u-szeged.hu>

        [nix][curl] Buildfix after r160310
        https://bugs.webkit.org/show_bug.cgi?id=125489

        Reviewed by Gustavo Noronha Silva.

        Curl doesn't include soup files.

        * PlatformNix.cmake:

2013-12-10  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] REGRESSION: www.yahoo.com redirects to the mobile version after UA change
        https://bugs.webkit.org/show_bug.cgi?id=125444

        Reviewed by Martin Robinson.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::platformVersionForUAString): more correctly pretend we're Mac OS X.
        (WebCore::standardUserAgent): ditto.

2013-12-09  Gustavo Noronha Silva  <gns@gnome.org>

        [Soup] Send original encoded data size to didReceiveBuffer
        https://bugs.webkit.org/show_bug.cgi?id=125410

        Reviewed by Martin Robinson.

        No tests, the only way to test this seems to be through the inspector UI.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): data member to track stream
        position.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::currentStreamPosition): obtains the current stream position by querying
        the first seekable input stream we find.
        (WebCore::nextMultipartResponsePartCallback): store the position before we start reading a new part.
        (WebCore::sendRequestCallback): store the position before we start reading the response body.
        (WebCore::readCallback): pass the position delta to didReceiveData.

2013-12-09  Andreas Kling  <akling@apple.com>

        Clear out font width measurement caches on memory pressure.
        <https://webkit.org/b/125481>

        The data kept in WidthCaches can be regenerated on demand. Throwing
        it away when we're under memory pressure buys us ~4MB on Membuster3.

        Reviewed by Antti Koivisto.

2013-12-09  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove enabled() in InspectorRuntimeAgent.
        https://bugs.webkit.org/show_bug.cgi?id=125476

        Reviewed by Joseph Pecoraro.

        Dead code. It's never called anywhere.

        No new tests, no behavior change.

        * inspector/InspectorRuntimeAgent.h:

2013-12-09  Sam Weinig  <sam@webkit.org>

        Replace use of WTF::FixedArray with std::array
        https://bugs.webkit.org/show_bug.cgi?id=125475

        Reviewed by Anders Carlsson.

        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * platform/graphics/GlyphMetricsMap.h:

2013-12-09  Benjamin Poulain  <bpoulain@apple.com>

        Refactor the CFURLConnectionClient to be the synchronous implementation of an abstract network delegate
        https://bugs.webkit.org/show_bug.cgi?id=125379

        Reviewed by Alexey Proskuryakov.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.cpp: Added.
        (WebCore::ResourceHandleCFURLConnectionDelegate::ResourceHandleCFURLConnectionDelegate):
        (WebCore::ResourceHandleCFURLConnectionDelegate::~ResourceHandleCFURLConnectionDelegate):
        (WebCore::ResourceHandleCFURLConnectionDelegate::willSendRequestCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveResponseCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveDataCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didFinishLoadingCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didFailCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::willCacheResponseCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveChallengeCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didSendBodyDataCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::shouldUseCredentialStorageCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpaceCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::didReceiveDataArrayCallback):
        (WebCore::ResourceHandleCFURLConnectionDelegate::makeConnectionClient):
        * platform/network/cf/ResourceHandleCFURLConnectionDelegate.h: Added.
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.cpp: Added.
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::SynchronousResourceHandleCFURLConnectionDelegate):
        (WebCore::synthesizeRedirectResponseIfNecessary):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willSendRequest):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveData):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFinishLoading):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didFail):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::willCacheResponse):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveChallenge):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didSendBodyData):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::shouldUseCredentialStorageCallback):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::canRespondToProtectionSpace):
        (WebCore::SynchronousResourceHandleCFURLConnectionDelegate::didReceiveDataArray):
        * platform/network/cf/SynchronousResourceHandleCFURLConnectionDelegate.h: Added.

2013-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r136280): input[type=image] should assume coords of 0,0 when activated without physically clicking
        https://bugs.webkit.org/show_bug.cgi?id=125392

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/3c33d42207cd209bb171083ba66c225f694f2101

        Activating an image button with the keyboard or element.click() should result in selected coords of (0,0) per
        http://www.w3.org/TR/2013/CR-html5-20130806/forms.html#image-button-state-(type=image)
        "If the user activates the control without explicitly selecting a coordinate, then the coordinate (0,0) must be assumed."

        New behavior also matches that of Internet Explorer and Firefox.

        Tests: fast/forms/input-image-submit.html

        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::handleDOMActivateEvent): Set m_clickLocation to (0, 0) for simulated events.

2013-12-09  Jer Noble  <jer.noble@apple.com>

        [MSE] Add support for VideoPlaybackMetrics.
        https://bugs.webkit.org/show_bug.cgi?id=125380

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-video-playback-quality.html

        Add a new object type VideoPlaybackQuality to be returned by
        HTMLMediaElement.getVideoPlaybackQuality().

        HTMLMediaElements must separately track a droppedVideoFrame count, as
        certain operations on SourceBuffer will drop incoming frames, which must
        be accounted for. Reset this count when the media engine changes, which is
        indicitive of a new media load requset starting.

        Add the new VideoPlaybackQuality class:
        * Modules/mediasource/VideoPlaybackQuality.cpp: Added.
        (WebCore::VideoPlaybackQuality::create):
        (WebCore::VideoPlaybackQuality::VideoPlaybackQuality):
        * Modules/mediasource/VideoPlaybackQuality.h: Added.
        (WebCore::VideoPlaybackQuality::creationTime):
        (WebCore::VideoPlaybackQuality::totalVideoFrames):
        (WebCore::VideoPlaybackQuality::droppedVideoFrames):
        (WebCore::VideoPlaybackQuality::corruptedVideoFrames):
        (WebCore::VideoPlaybackQuality::totalFrameDelay):
        * Modules/mediasource/VideoPlaybackQuality.idl: Added.

        Add support for the new class to HTMLMediaElement:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::shouldUseVideoPluginProxy):
        (HTMLMediaElement::getVideoPlaybackQuality):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        Report the video quality metrics from the MediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::totalVideoFrames):
        (WebCore::MediaPlayer::droppedVideoFrames):
        (WebCore::MediaPlayer::corruptedVideoFrames):
        (WebCore::MediaPlayer::totalFrameDelay):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::totalVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateInterface::totalFrameDelay):

        Correctly report the dropped frame count:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer): needsRandomAccessFlag defaults to true.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Check the sync status of the incoming sample.
        (WebCore::SourceBuffer::didDropSample): Notify the media element of a dropped frame.
        * Modules/mediasource/SourceBuffer.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (HTMLMediaElement::mediaPlayerEngineUpdated): Reset m_droppedFrameCount.
        (HTMLMediaElement::getVideoPlaybackQuality): Return a new VideoPlaybackQuality object.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::incrementDroppedFrameCount): Simple incrementer.
        * platform/MediaSample.h:
        (WebCore::MediaSample::isSync): Convenience function.
        (WebCore::MediaSample::isNonDisplaying): Ditto.

        Add support in the AVFoundation MediaSource Engine:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::droppedVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::corruptedVideoFrames):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::totalFrameDelay):

        Add support in the Mock MediaSource Engine:
        * platform/mock/mediasource/MockBox.h:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::totalVideoFrames): Simple accessor.
        (WebCore::MockMediaPlayerMediaSource::droppedVideoFrames): Ditto.
        (WebCore::MockMediaPlayerMediaSource::corruptedVideoFrames): Ditto.
        (WebCore::MockMediaPlayerMediaSource::totalFrameDelay): Ditto.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate):
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::enqueueSample): Increment the frame counts based on
            the incoming sample.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

        Add the new files to the project:
        * bindings/gobject/GNUmakefile.am:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:
        * GNUMakefile.list.am:
        * CMakeLists.txt:

2013-12-09  Simon Fraser  <simon.fraser@apple.com>

        Avoid divide by zero in scrollbar code, and protect against Obj-C exceptions
        https://bugs.webkit.org/show_bug.cgi?id=125469
        <rdar://problem/15535772>

        Reviewed by Beth Dakin.
        
        In ScrollbarThemeMac::setPaintCharacteristicsForScrollbar(), proportion could
        end up as NaN if scrollbar->totalSize() were zero. Protect against that.
        
        Also wrap functions that call into Objective-C with BEGIN_BLOCK_OBJC_EXCEPTIONS/
        END_BLOCK_OBJC_EXCEPTIONS.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::scrollbarThickness):
        (WebCore::ScrollbarThemeMac::updateScrollbarOverlayStyle):
        (WebCore::ScrollbarThemeMac::minimumThumbLength):
        (WebCore::ScrollbarThemeMac::updateEnabledState):
        (WebCore::ScrollbarThemeMac::setPaintCharacteristicsForScrollbar):
        (WebCore::scrollbarPainterPaint):

2013-12-09  Ryosuke Niwa  <rniwa@webkit.org>

        Implement Document.cloneNode()
        https://bugs.webkit.org/show_bug.cgi?id=11646

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/dc7879025e01d63be9fcf6a84ca6c9b8b5768a80

        Implement the behavior specified in the current DOM4 working draft:
        http://www.w3.org/TR/2013/WD-dom-20131107/#dom-node-clonenode

        Tests: fast/dom/Document/clone-node.html
               fast/dom/HTMLDocument/clone-node-quirks-mode.html
               svg/custom/clone-node.html

        * dom/Document.cpp:
        (WebCore::Document::cloneNode):
        (WebCore::Document::cloneDocumentWithoutChildren):
        (WebCore::Document::cloneDataFromDocument):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::cloneDocumentWithoutChildren):
        * html/HTMLDocument.h:
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::cloneDocumentWithoutChildren):
        * svg/SVGDocument.h:

2013-12-09  Andreas Kling  <akling@apple.com>

        REGRESSION(r160260): Memory pressure signal causes web process to hang.
        <https://webkit.org/b/125465>

        Reviewed by Tim Horton.

        This command caused all of my web processes to hang:

            notifyutil -p org.WebKit.lowMemory

        This only happens when the cache pruning code encounters a resource
        using purgeable memory.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):

            Grab the next CachedResource pointer before continuing the loop.

2013-12-09  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] OpenGL compile error.
        https://bugs.webkit.org/show_bug.cgi?id=125383

        Reviewed by Darin Adler.

        * platform/graphics/opengl/Extensions3DOpenGLES.h: Define GL_HALF_FLOAT_ARB on Windows when OPENGL_ES_2 is used.

2013-12-09  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Fix handling of 'inherit' and 'initial' for grid lines.
        https://bugs.webkit.org/show_bug.cgi?id=125223

        Reviewed by Darin Adler.

        'initial' and 'inherit' are always allowed values for CSS properties.
        As the CSSParser handles them automatically, those 2 values were never
        taken care of in StyleResolver, leading to crashes.

        Added tests cases for 'inherit' and 'initial' to the following tests:

        fast/css-grid-layout/grid-item-column-row-get-set.html
        fast/css-grid-layout/grid-item-end-after-get-set.html
        fast/css-grid-layout/grid-item-start-before-get-set.html

        Patch backported from Blink: https://src.chromium.org/viewvc/blink?revision=149257&view=revision

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGridItemData.cpp:
        (WebCore::StyleGridItemData::StyleGridItemData):

2013-12-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Inspector.json and CodeGenerator tweaks
        https://bugs.webkit.org/show_bug.cgi?id=125321

        Reviewed by Timothy Hatcher.

        * inspector/protocol/Runtime.json:
        Runtime.js was depending on Network.FrameId. This is a layering
        violation, so ideally we can fix this later. For now, just copy
        the FrameId type into Runtime. They are strings so all is good.

        * inspector/CodeGeneratorInspector.py:
        (Generator.EventMethodStructTemplate.append_epilog):
        * inspector/CodeGeneratorInspectorStrings.py:
        Improve --help usage information.
        Make the script work with a single domain json file.
        Add ASCIILiteral's where appropriate.

2013-12-09  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [Nix] Fix file name typo in PlatformNix.cmake
        https://bugs.webkit.org/show_bug.cgi?id=125457

        Reviewed by Gustavo Noronha Silva.

        Wrong file name introduced in http://trac.webkit.org/changeset/160310.
        * PlatformNix.cmake:

2013-12-09  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Memory leak due to incorrect use of gst_tag_list_merge in TextCombinerGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=125452

        Reviewed by Philippe Normand.

        No new tests because this fixes a memory leak.

        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        (webkitTextCombinerPadEvent): Use gst_tag_list_insert instead of gst_tag_list_merge, since we don't want to create a new list.

2013-12-09  Chris Fleizach  <cfleizach@apple.com>

        AX: WebKit ignores @alt on IMG elements with role="text"
        https://bugs.webkit.org/show_bug.cgi?id=125363

        Reviewed by Mario Sanchez Prada.

        If an <img> element has a different role, the alt attribute should still be used in the 
        name calculation if present.

        Test: accessibility/alt-tag-on-image-with-nonimage-role.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::usesAltTagForTextComputation):
        (WebCore::AccessibilityNodeObject::alternativeText):
        (WebCore::AccessibilityNodeObject::accessibilityDescription):
        (WebCore::AccessibilityNodeObject::text):
        * accessibility/AccessibilityNodeObject.h:

2013-12-08  Martin Robinson  <mrobinson@igalia.com>

        [WK2][Soup] Use didReceiveBuffer instead of didReceiveData
        https://bugs.webkit.org/show_bug.cgi?id=118598

        Reviewed by Gustavo Noronha Silva.

        Original patch by Kwang Yul Seo  <skyul@company100.net> and Csaba OsztrogonÃ¡c  <ossy@webkit.org>.

        Switch from using didReceiveData to didReceiveBuffer for the Soup backend and
        let SharedBuffer wrap a SoupBuffer. This is necessary because the NetworkProcess
        only supports getting data via SharedBuffer.

        * GNUmakefile.list.am: Add the new SharedBufferSoup.cpp file to the list.
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformNix.cmake:
        * platform/SharedBuffer.cpp: We no longer used the no-op version of the platformFoo methods.
        * platform/SharedBuffer.h: Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:  Use didReceiveBuffer instead of didReceiveData.
        * platform/network/ResourceHandleInternal.h: Have only a m_soupBuffer member instead of three to manage the buffer.
        * platform/network/soup/GOwnPtrSoup.cpp: Add support for SoupBuffer.
        * platform/network/soup/GOwnPtrSoup.h: Ditto.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didReceiveData): ASSERT_NOT_REACHED here, since it should never be
        called now.
        (WebCore::WebCoreSynchronousLoader::didReceiveBuffer): Handle this call properly.
        (WebCore::ResourceHandle::ensureReadBuffer): Now we package up our buffer into a SoupBuffer.
        (WebCore::redirectSkipCallback): Use the new m_soupBuffer member.
        (WebCore::cleanupSoupRequestOperation): Ditto.
        (WebCore::nextMultipartResponsePartCallback): Ditto.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::readCallback):
        * platform/soup/SharedBufferSoup.cpp: Added.

2013-12-09  Michal Poteralski  <m.poteralski@samsung.com>

        DataCloneError exception is not thrown when postMessage's second parameter is the source
        port or the target port.

        https://bugs.webkit.org/show_bug.cgi?id=124708

        Reviewed by Alexey Proskuryakov.

        According to specification:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#dom-window-postmessage

        If the method was invoked with a second argument transfer then if any of the objects in the
        transfer are either the source port or the target port (if any), then a DataCloneError
        exception should be thrown. Currently an InvalidStateError exception is thrown what is an
        incorrect behaviour.

        The proposed solution is change to the correct the exception value.

        Tests: fast/dom/Window/postMessage-clone-port-error.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage): Improve exception value

2013-12-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build with NetworkProcess enabled.

        * GNUmakefile.list.am: Add missing file to compilation.

2013-12-08  Ryosuke Niwa  <rniwa@webkit.org>

        getComputedStyle border-radius shorthand omits vertical radius information
        https://bugs.webkit.org/show_bug.cgi?id=125394

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/4c2866855dddbb28bb7d978ad627acc368af23d0

        getComputedStyle of border-radius shows the vertical radius components if they differ from their horizontal counterpants.
        We were incorrectly detecting this case and over simplifying the results of getComputedStyle.
        This patch ensures we only hide the vertical values if they are identical to the horizontal values.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusShorthandValue):

2013-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not skip attributes with only custom setter
        https://bugs.webkit.org/show_bug.cgi?id=125417

        Reviewed by Gustavo Noronha Silva.

        For attributes with a custom setter, we now generate the code as a
        read-only attribute with a getter method, unless it also has a
        custom getter in which case the attribute is skipped.

        * bindings/gobject/GNUmakefile.am: Generate WebKitDOMMediaController
        that is now required by an attribute having a custom setter.
        * bindings/gobject/WebKitDOMCustom.cpp: Remove methods that are now generated.
        * bindings/gobject/WebKitDOMCustom.h: Ditto.
        * bindings/gobject/WebKitDOMCustom.symbols: Ditto.
        * bindings/gobject/webkitdom.symbols: Add new symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipAttribute): Do not skip attributes having a custom setter.
        (GetWriteableProperties): Do not include attributes having a
        custom setter.
        (GenerateProperty): Do not return early for attributes having
        custom setter.
        (GenerateFunctions): Do not generate setter for attributes having
        a custom setter.

2013-12-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not generate new dispatch_event methods marked as deprecated
        https://bugs.webkit.org/show_bug.cgi?id=125416

        Reviewed by Gustavo Noronha Silva.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip dispatch_event methods for objects
        implementing EventTarget interface unless they are already
        deprecated.
        (GenerateFunction): Pass also the parentNode to SkipFunction().

2013-12-05  Jer Noble  <jer.noble@apple.com>

        [MSE] Bring end-of-stream algorithm section up to current spec.
        https://bugs.webkit.org/show_bug.cgi?id=125270

        Reviewed by Darin Adler.

        Test: media/media-source/media-source-end-of-stream.html

        Separate the "endOfStream()" method from the "end of stream algorithm".

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::SourceBufferIsUpdating): Added predicate function.
        (WebCore::MediaSource::endOfStream): Call streamEndedWithError().
        (WebCore::MediaSource::streamEndedWithError): Added.
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferTimerFired): Call streamEndedWithError().
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        * Modules/mediasource/SourceBuffer.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::mediaLoadingFailedFatally): Renamed from mediaEngineError.
        (HTMLMediaElement::mediaLoadingFailed): Call renamed method.
        * html/HTMLMediaElement.h:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::markEndOfStream): Set load state to Loaded.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::setNetworkState): Simple setter.
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate): Set the intitial duration to NaN.
        (WebCore::MockMediaSourcePrivate::markEndOfStream): Set load state to Loaded.

2013-12-04  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Crash when removing MediaSource from HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=125269

        Reviewed by Sam Weinig.

        Fixes the media/media-source/media-source-fastseek.html test when run with MallocScribble enabled.

        It's possible for a SourceBufferPrivateAVFObjC to outlive its MediaSourcePrivateAVFObjC, so
        make sure to clear the pointer from the former to the latter when the latter is destroyed.
        That means we now have to check to see if the pointer to the latter is still valid at every
        call site.

        As a drive-by fix, rename m_parent to m_mediaSource to more accurately reflect what the pointer
        points to.

        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm:
        (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC): Clear the SourceBuffer's backpointer.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h:
        (WebCore::SourceBufferPrivateAVFObjC::clearMediaSource): 
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm:
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC): Rename m_parent -> m_mediaSource.
        (WebCore::SourceBufferPrivateAVFObjC::append): Check m_mediaSource before calling.
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::readyState): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample): Ditto.
        (WebCore::SourceBufferPrivateAVFObjC::setActive): Ditto.
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::~MockMediaSourcePrivate): Clear the SourceBuffer's backpointer.
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::MockSourceBufferPrivate): Rename m_parent -> m_mediaSource.
        (WebCore::MockSourceBufferPrivate::removedFromMediaSource): Check m_mediaSource before calling.
        (WebCore::MockSourceBufferPrivate::readyState): Ditto.
        (WebCore::MockSourceBufferPrivate::setReadyState): Ditto.
        (WebCore::MockSourceBufferPrivate::setActive): Ditto.
        * platform/mock/mediasource/MockSourceBufferPrivate.h:
        (WebCore::MockSourceBufferPrivate::clearMediaSource):

2013-12-07  Zoltan Horvath  <zoltan@webkit.org>

        Remove statusWithDirection static function from RenderBlockLineLayout
        https://bugs.webkit.org/show_bug.cgi?id=125372

        Reviewed by Andreas Kling.

        I run into a FIXME about using BidiStatus constructor rather than statusWithDirection,
        once it's implemented. BidiStatus has got the appropriate constructor now, so I removed
        statusWithDirection and updated the code to use the constructor of BidiStatus.

        No new tests, no behavior change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment):

2013-12-07  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed. Build fix for gtk port after r160260.

        * loader/cache/CachedImage.h: Add missing a header.

2013-12-07  Gustavo Noronha Silva  <gns@gnome.org>

        ubuntu software center hits _XReadEvents() error
        https://bugs.webkit.org/show_bug.cgi?id=123480

        Reviewed by Martin Robinson.

        * platform/gtk/WidgetBackingStoreGtkX11.cpp:
        (WebCore::WidgetBackingStoreGtkX11::~WidgetBackingStoreGtkX11): clear the surface
        before freeing the associated pixmap.

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        [mac] Keep around more decoded image data, since it's purgeable
        https://bugs.webkit.org/show_bug.cgi?id=125273
        <rdar://problem/13205438>

        Unreviewed patch to fix review comments...

        * platform/graphics/BitmapImage.h:
        Dan noticed that these return statements were improperly indented.

2013-12-05  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Disable AVFoundation when enabling the MockMediaPlayerMediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=125338

        Reviewed by Darin Adler.

        The MediaSource API has some assumptions which break if more than one installed
        media engine supports MediaSources at the same time. So when enabling the mock
        media source engine in DRT or WKTR, disable AVFoundation so that only the mock
        engine will support media source loading.

        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockMediaSource):

2013-12-06  Antti Koivisto  <antti@apple.com>

        Use NeverDestroyed instead of DEFINE_STATIC_LOCAL

        Reviewed by Anders Carlsson.

        * rendering/RenderText.cpp:
        (WebCore::originalTextMap):

2013-12-05  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a runtime-setting for the MediaSource constructor.
        https://bugs.webkit.org/show_bug.cgi?id=125336

        Reviewed by Eric Carlson.

        Add a Setting to enable the MediaSource constructor.

        * Modules/mediasource/MediaSource.idl:
        * page/Settings.in:

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        [mac] Keep around more decoded image data, since it's purgeable
        https://bugs.webkit.org/show_bug.cgi?id=125273
        <rdar://problem/13205438>

        Reviewed by Simon Fraser.

        No new tests, just an optimization.

        Instead of throwing away decoded image data eagerly, allow the operating
        system to manage the memory via the standard purgeability mechanism,
        where it can.

        This improves the performance on some pathological cases (extremely large
        animated GIFs) by up to 8x.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::pruneLiveResourcesToSize):
        Don't prune live resources' decoded data if it is purgeable.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedDataIfNecessary):
        Don't eagerly throw away decoded image data if it's purgeable.

        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::decodedDataIsPurgeable):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::decodedDataIsPurgeable):

2013-12-06  Antti Koivisto  <antti@apple.com>

        Save original text for RenderText to a map
        https://bugs.webkit.org/show_bug.cgi?id=125278

        Reviewed by Darin Adler.
        
        Currently the original text is fetched from the Text node. This is one of the few things 
        where we use the RenderText node pointer and is stopping Text nodes from being anonymous.
        
        It is very rare of original text to differ from the actual text so we can just squirrel the
        original to a map when it differs. This is also simplifies the code.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::styleDidChange):
        (WebCore::RenderQuote::updateDepth):
        * rendering/RenderText.cpp:
        (WebCore::originalTextMap):
        (WebCore::RenderText::RenderText):
        (WebCore::RenderText::~RenderText):
        (WebCore::RenderText::styleDidChange):
        (WebCore::RenderText::originalText):
        (WebCore::RenderText::setTextInternal):
        (WebCore::RenderText::setText):
        * rendering/RenderText.h:
        * rendering/RenderTextFragment.cpp:
        * rendering/RenderTextFragment.h:

2013-12-04  Jer Noble  <jer.noble@apple.com>

        [MSE] Refactor MediaSourceBase back into MediaSource
        https://bugs.webkit.org/show_bug.cgi?id=125245

        Reviewed by Eric Carlson.

        Now that the legacy WebKitMediaSource has been removed, there is no reason to have
        a separate MediaSource and MediaSourceBase. Re-integrate the two.

        Copy all the methods from MediaSource into MediaSourceBase, and rename the class MediaSource:
        * Modules/mediasource/MediaSource.cpp: Copied from MediaSourceBase.cpp.
        (WebCore::MediaSource::create): Copied from MediaSource.cpp.
        (WebCore::MediaSource::addSourceBuffer): Ditto.
        (WebCore::MediaSource::removeSourceBuffer): Ditto.
        (WebCore::MediaSource::isTypeSupported): Ditto.
        (WebCore::MediaSource::eventTargetInterface): Ditto.
        (WebCore::MediaSource::sourceBufferDidChangeAcitveState): Ditto.
        * Modules/mediasource/MediaSource.h: Copied from MediaSourceBase.h.
        (WebCore::MediaSource::sourceBuffers): Copied from MediaSource.h.
        (WebCore::MediaSource::activeSourceBuffers): Copied from MediaSource.h.
        * Modules/mediasource/MediaSourceBase.cpp: Removed.
        * Modules/mediasource/MediaSourceBase.h: Removed.

        Change all references to MediaSourceBase into MediaSource:
        * Modules/mediasource/DOMURLMediaSource.cpp:
        (WebCore::DOMURLMediaSource::createObjectURL):
        * Modules/mediasource/DOMURLMediaSource.h:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::registerURL):
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:

        Remove MediaSourceBase.cpp/h from the project file:
        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

2013-12-06  Eric Carlson  <eric.carlson@apple.com>

        r159827 broke plug-in snapshotting
        https://bugs.webkit.org/show_bug.cgi?id=125365

        Reviewed by Dean Jackson.

        No new tests, covered by existing tests.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Return early if there is NOT
            a page, not if there IS a page.

2013-12-06  Roger Fong <roger_fong@apple.com> and Brent Fulgham  <bfulgham@apple.com>

        [Win] Support compiling with VS2013
        https://bugs.webkit.org/show_bug.cgi?id=125353

        Reviewed by Anders Carlsson.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Use nullptr
        (WebCore::LegacyWebArchive::createFromSelection): Ditto

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [MSE][Mac] Add a new MSE-compatible MediaPlayerPrivate implementation, MediaPlayerPrivateMediaSourceAVFObjC
        https://bugs.webkit.org/show_bug.cgi?id=123378

        Reviewed by Eric Carlson.

        Add an AVFoundation implementation of MediaPlayerPrivate which creates and uses
        MediaSourcePrivate and SourceBufferPrivate subclasses.

        Add the new media engine to the list of installed engines:
        * platform/MediaSample.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):
        * platform/graphics/MediaPlayer.h:

        Add the new files to the project:
        * WebCore.xcodeproj/project.pbxproj:

        Drive by fix for ports who implement seekDouble():
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekWithTolerance):

        Add new Video and AudioTrackPrivate types which handle their own enable state:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.cpp: Added
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::AudioTrackPrivateMediaSourceAVFObjC):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::assetTrack):
        (WebCore::AudioTrackPrivateMediaSourceAVFObjC::setEnabled):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateMediaSourceAVFObjC.h: Added
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.cpp: Added.
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::VideoTrackPrivateMediaSourceAVFObjC):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::resetPropertiesFromTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setAssetTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::assetTrack):
        (WebCore::VideoTrackPrivateMediaSourceAVFObjC::setSelected):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateMediaSourceAVFObjC.h: Added.

        Add a new MediaPlayerPrivate which can handle MediaSource objects:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm: Added.
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::~MediaPlayerPrivateMediaSourceAVFObjC):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::registerMediaEngine):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::create):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::isAvailable):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::getSupportedTypes):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::load):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::cancelLoad):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareToPlay):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformMedia):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::platformLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::play):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::playInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pause):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::pauseInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paused):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsScanning):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::naturalSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasVideo):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAudio):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setVisible):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::durationDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::currentTimeDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::startTimeDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::initialTime):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekWithTolerance):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekInternal):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seeking):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setRateDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::networkState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::readyState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::seekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::maxTimeSeekableDouble):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::minTimeSeekable):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::buffered):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::didLoadingProgress):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setSize):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paint):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::movieLoadType):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::prepareForRendering):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::engineDescription):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::languageOfPrimaryAudioTrack):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::extraMemoryCost):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::ensureLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::destroyLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateDuration):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::updateStates):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setReadyState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::setNetworkState):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::addDisplayLayer):
        (WebCore::MediaPlayerPrivateMediaSourceAVFObjC::removeDisplayLayer):

        Add a new MediaSourcePrivate implementation:
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.h: Added.
        (WebCore::MediaSourcePrivateAVFObjC::player):
        (WebCore::MediaSourcePrivateAVFObjC::activeSourceBuffers):
        * platform/graphics/avfoundation/objc/MediaSourcePrivateAVFObjC.mm: Added.
        (WebCore::MediaSourcePrivateAVFObjC::create):
        (WebCore::MediaSourcePrivateAVFObjC::MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::~MediaSourcePrivateAVFObjC):
        (WebCore::MediaSourcePrivateAVFObjC::addSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::removeSourceBuffer):
        (WebCore::MediaSourcePrivateAVFObjC::duration):
        (WebCore::MediaSourcePrivateAVFObjC::setDuration):
        (WebCore::MediaSourcePrivateAVFObjC::markEndOfStream):
        (WebCore::MediaSourcePrivateAVFObjC::unmarkEndOfStream):
        (WebCore::MediaSourcePrivateAVFObjC::readyState):
        (WebCore::MediaSourcePrivateAVFObjC::setReadyState):
        (WebCore::MediaSourcePrivateAVFObjC::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MediaSourcePrivateAVFObjCHasAudio):
        (WebCore::MediaSourcePrivateAVFObjC::hasAudio):
        (WebCore::MediaSourcePrivateAVFObjCHasVideo):
        (WebCore::MediaSourcePrivateAVFObjC::hasVideo):
        (WebCore::MediaSourcePrivateAVFObjC::seekToTime):

        Add a new SourceBufferPrivate implementation:
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/SourceBufferPrivateAVFObjC.mm: Added.
        (-[WebAVStreamDataParserListener initWithParser:parent:WebCore::]):
        (-[WebAVStreamDataParserListener dealloc]):
        (-[WebAVStreamDataParserListener streamDataParser:didParseStreamDataAsAsset:]):
        (-[WebAVStreamDataParserListener streamDataParser:didFailToParseStreamDataWithError:]):
        (-[WebAVStreamDataParserListener streamDataParser:didProvideMediaData:forTrackID:mediaType:flags:]):
        (-[WebAVStreamDataParserListener streamDataParser:didReachEndOfTrackWithTrackID:mediaType:]):
        (WebCore::MediaSampleAVFObjC::create):
        (WebCore::MediaSampleAVFObjC::~MediaSampleAVFObjC):
        (WebCore::MediaSampleAVFObjC::MediaSampleAVFObjC):
        (WebCore::MediaSampleAVFObjC::platformSample):
        (WebCore::CMSampleBufferIsRandomAccess):
        (WebCore::MediaSampleAVFObjC::flags):
        (WebCore::MediaDescriptionAVFObjC::create):
        (WebCore::MediaDescriptionAVFObjC::~MediaDescriptionAVFObjC):
        (WebCore::MediaDescriptionAVFObjC::MediaDescriptionAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::create):
        (WebCore::SourceBufferPrivateAVFObjC::SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::~SourceBufferPrivateAVFObjC):
        (WebCore::SourceBufferPrivateAVFObjC::didParseStreamDataAsAsset):
        (WebCore::SourceBufferPrivateAVFObjC::didFailToParseStreamDataWithError):
        (WebCore::callProcessCodedFrameForEachSample):
        (WebCore::SourceBufferPrivateAVFObjC::didProvideMediaDataForTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::processCodedFrame):
        (WebCore::SourceBufferPrivateAVFObjC::didReachEndOfTrackWithTrackID):
        (WebCore::SourceBufferPrivateAVFObjC::setClient):
        (WebCore::SourceBufferPrivateAVFObjC::append):
        (WebCore::SourceBufferPrivateAVFObjC::abort):
        (WebCore::SourceBufferPrivateAVFObjC::removedFromMediaSource):
        (WebCore::SourceBufferPrivateAVFObjC::readyState):
        (WebCore::SourceBufferPrivateAVFObjC::setReadyState):
        (WebCore::SourceBufferPrivateAVFObjC::evictCodedFrames):
        (WebCore::SourceBufferPrivateAVFObjC::isFull):
        (WebCore::SourceBufferPrivateAVFObjC::hasVideo):
        (WebCore::SourceBufferPrivateAVFObjC::hasAudio):
        (WebCore::SourceBufferPrivateAVFObjC::trackDidChangeEnabled):
        (WebCore::createNonDisplayingCopy):
        (WebCore::SourceBufferPrivateAVFObjC::flushAndEnqueueNonDisplayingSamples):
        (WebCore::SourceBufferPrivateAVFObjC::enqueueSample):
        (WebCore::SourceBufferPrivateAVFObjC::isReadyForMoreSamples):
        (WebCore::SourceBufferPrivateAVFObjC::setActive):
        (WebCore::SourceBufferPrivateAVFObjC::fastSeekTimeForMediaTime):
        (WebCore::SourceBufferPrivateAVFObjC::seekToTime):
        * platform/mac/PlatformClockCM.h:

        Add a SOFT_LINK_CLASS_OPTIONAL macro:
        * platform/mac/SoftLinking.h:

2013-12-06  Alexey Proskuryakov  <ap@apple.com>

        Remove some duplicate checks from SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=125358

        Reviewed by Geoffrey Garen.

        There is no need to call inherits() before WebCore's toXXX(JSValue) functions.

        Also, the result of toArrayBuffer() is a raw pointer, not a RefPtr (it's confusing
        because toArrayBufferView returns a RefPtr).

        * bindings/js/SerializedScriptValue.cpp: (WebCore::CloneSerializer::dumpIfTerminal):

2013-12-06  Tim Horton  <timothy_horton@apple.com>

        Remove Image::decodedSize()
        https://bugs.webkit.org/show_bug.cgi?id=125327

        Reviewed by Simon Fraser.

        Missed a comment when removing this code.

        * svg/graphics/SVGImage.h:

2013-12-06  Rob Buis  <rob.buis@samsung.com>

        [CSS Shapes] ShapeOutsideInfo needs to use the parent's writing mode when calculating offsets
        https://bugs.webkit.org/show_bug.cgi?id=124680

        Reviewed by Dirk Schulze.

        Do not take the writing-mode property on the float into account for shape-outside.
        Add a virtual method writingMode() in order to do this for shape-outside but
        keep old behavior (element writingMode) for shape-inside.

        Change existing test floats/shape-outside-floats-different-writing-modes.html to test the
        new behavior.

        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::writingMode):
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::writingMode):
        * rendering/shapes/ShapeOutsideInfo.h:

2013-12-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Staging Workaround
        https://bugs.webkit.org/show_bug.cgi?id=125354

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspector.py:

2013-12-06  Joseph Pecoraro  <pecoraro@apple.com>

        Simplify ScriptFunctionCall by removing dead code.
        https://bugs.webkit.org/show_bug.cgi?id=125274

        Reviewed by Timothy Hatcher.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/js/ScriptFunctionCall.h:

2013-12-06  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebCore/rendering changes
        https://bugs.webkit.org/show_bug.cgi?id=125239

        Reviewed by Simon Fraser.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::previousOnLineExists): Added.
        * rendering/InlineBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintCompositionBackground): Modified to query RenderStyle
        on iOS for the composition fill color. Added FIXME to make this platform-independent.
        (WebCore::InlineTextBox::paintDecoration): Added iOS-specific decoration code.
        (WebCore::lineStyleForMarkerType):
        (WebCore::InlineTextBox::paintDocumentMarkers): Added iOS-specific code. Also, added
        FIXME to make this code platform-independent.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint): Ditto.
        (WebCore::positionForPointRespectingEditingBoundaries): Added iOS-specific code.
        * rendering/RenderBlock.h: Changed access control of logical{Left, Right}SelectionOffset()
        from private to protected so that these methods can be used from RenderImage::collectSelectionRects().
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderRadii): Added.
        (WebCore::RenderBox::paintBoxDecorations): Added iOS-specific workaround. See <rdar://problem/6209763>
        for more details.
        (WebCore::RenderBox::computeRectForRepaint): Added iOS-specific code. 
        (WebCore::customContainingBlockWidth): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockLogicalWidth): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockLogicalHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::customContainingBlockAvailableLogicalHeight): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderBox::availableLogicalHeightUsing): Added iOS-specific code; calls customContainingBlockAvailableLogicalHeight().
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned): Added iOS-specific code; calls customContainingBlockLogicalWidth().
        (WebCore::RenderBox::containingBlockLogicalHeightForPositioned): Added iOS-specific code; calls customContainingBlockLogicalHeight().
        (WebCore::RenderBox::layoutOverflowRectForPropagation): Added iOS-specific code.
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::stickyPositionOffset): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::layout): Added; iOS-specific. Includes FIXME comment.
        See <rdar://problem/7675493> for more details.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::styleWillChange): Added iOS-specific code.
        (WebCore::RenderElement::styleDidChange): Modified to only call areCursorsEqual() and
        EventHandler::scheduleCursorUpdate() on a non-iOS port.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing): Added iOS-specific code.
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReason): This method has an empty implementation for iOS.
        (WebCore::RenderEmbeddedObject::setPluginUnavailabilityReasonWithDescription): Ditto.
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::nodeHeight):
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Added iOS-specific code.
        (WebCore::RenderFileUploadControl::paintObject): Ditto.
        (WebCore::RenderFileUploadControl::fileTextValue): Ditto.
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::positionFrames): Ditto; Also added FIXME comment as this code may not
        be specific to iOS.
        * rendering/RenderIFrame.h: Added iOS-specific workaround to RenderObject::renderName(). Added
        FIXME comment to determine whether this workaround is still applicable.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderImage::paintAreaElementFocusRing): This method has an empty implementation for iOS.
        * rendering/RenderImage.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteQuadsForSelection): Added; guarded by PLATFORM(IOS).
        * rendering/RenderInline.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer): Added iOS-specific member initialization.
        (WebCore::RenderLayer::~RenderLayer): Added iOS-specific code.
        (WebCore::RenderLayer::willBeDestroyed): Added; iOS-specific.
        (WebCore::RenderLayer::hasAcceleratedTouchScrolling): Ditto.
        (WebCore::RenderLayer::handleTouchEvent): Ditto.
        (WebCore::RenderLayer::registerAsTouchEventListenerForScrolling): Ditto.
        (WebCore::RenderLayer::unregisterAsTouchEventListenerForScrolling): Ditto.
        (WebCore::RenderLayer::updateNeedsCompositedScrolling): Added iOS-specific code as we use UIKit
        to composite our scroll bars.
        (WebCore::RenderLayer::scrollTo): Added iOS-specific code.
        (WebCore::RenderLayer::scrollRectToVisible): Ditto.
        (WebCore::RenderLayer::styleChanged): Modified to make use of the passed StyleDifference on iOS.
        (WebCore::RenderLayer::visibleContentRect): Added; iOS-specific.
        (WebCore::RenderLayer::didStartScroll): Ditto.
        (WebCore::RenderLayer::didEndScroll): Ditto.
        (WebCore::RenderLayer::didUpdateScroll): Ditto.
        (WebCore::RenderLayer::invalidateScrollbarRect): Added iOS-specific code.
        (WebCore::RenderLayer::invalidateScrollCornerRect): Ditto.
        (WebCore::RenderLayer::verticalScrollbarWidth): Ditto.
        (WebCore::RenderLayer::horizontalScrollbarHeight): Ditto.
        (WebCore::RenderLayer::updateScrollableAreaSet): Ditto.
        (WebCore::RenderLayer::updateScrollInfoAfterLayout): Add iOS-specific workaround with FIXME. See
        <rdar://problem/15579797> for more details.
        (WebCore::RenderLayer::paintOverflowControls): Added iOS-specific code.
        (WebCore::RenderLayer::calculateClipRects): Ditto.
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::createPrimaryGraphicsLayer): Modified to not apply page scale on iOS
        as we apply a page scale at a different time in the code.
        (WebCore::RenderLayerBacking::layerWillBeDestroyed): Added; guarded by PLATFORM(IOS).
        (WebCore::layerOrAncestorIsTransformedOrScrolling): Added iOS-specific variant with FIXME comment.
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds): Added iOS-specific code.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Ditto.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Ditto.
        (WebCore::RenderLayerBacking::registerScrollingLayers): Ditto.
        (WebCore::RenderLayerBacking::updateScrollingLayers): Ditto.
        (WebCore::RenderLayerBacking::containsPaintedContent): Call RenderLayer::hasBoxDecorationsOrBackground()
        when building on iOS Simulator.
        (WebCore::RenderLayerBacking::parentForSublayers): Added iOS-specific code and FIXME comment.
        (WebCore::RenderLayerBacking::paintsIntoWindow): Opt-into coordinated graphics code path.
        (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Added iOS-specific code.
        (WebCore::RenderLayerBacking::paintIntoLayer): Compile-out ASSERT_NOT_REACHED for iOS and added FIXME comment.
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::scheduleLayerFlush): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::chromeClient): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges): Added iOS-specific code.
        (WebCore::scrollbarHasDisplayNone): Added; iOS-specific.
        (WebCore::updateScrollingLayerWithClient): Ditto.
        (WebCore::RenderLayerCompositor::updateCustomLayersAfterFlush): Ditto.
        (WebCore::RenderLayerCompositor::didFlushChangesForLayer): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::didChangeVisibleRect): Ditto.
        (WebCore::RenderLayerCompositor::addToOverlapMap): Don't apply page scale factor on iOS. We apply
        the page scale factor at a different time in the code. Also, added FIXME comment.
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Added iOS-specific workaround.
        See <rdar://problem/8348337> for more details.
        (WebCore::RenderLayerCompositor::setIsInWindow): Use non-Mac code path for iOS.
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedFrames): Added iOS-specific code.
        (WebCore::RenderLayerCompositor::requiresCompositingLayer): Ditto.
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): Ditto.
        (WebCore::RenderLayerCompositor::reasonsForCompositing): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation): Opt-into calling
        AnimationController::isRunningAnimationOnRenderer() on iOS.
        (WebCore::RenderLayerCompositor::requiresCompositingForScrolling): Added; guarded by PLATFORM(IOS).
        (WebCore::isStickyInAcceleratedScrollingLayerOrViewport): Added iOS-specific code.
        (WebCore::isViewportConstrainedFixedOrStickyLayer): Ditto.
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles): Ditto.
        (WebCore::RenderLayerCompositor::ensureRootLayer): Ditto.
        (WebCore::RenderLayerCompositor::computeFixedViewportConstraints): Use FrameView::customFixedPositionLayoutRect()
        instead of FrameView::viewportConstrainedVisibleContentRect().
        (WebCore::RenderLayerCompositor::computeStickyViewportConstraints): Ditto.
        (WebCore::RenderLayerCompositor::registerOrUpdateViewportConstrainedLayer): This method has an empty implementation for iOS
        as we batch update viewport-constrained layers in the iOS-specific method, RenderLayerCompositor::updateCustomLayersAfterFlush().
        (WebCore::RenderLayerCompositor::unregisterViewportConstrainedLayer): Ditto.
        (WebCore::RenderLayerCompositor::registerAllViewportConstrainedLayers): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderLayerCompositor::unregisterAllViewportConstrainedLayers): Ditto.
        (WebCore::RenderLayerCompositor::registerAllScrollingLayers): Ditto.
        (WebCore::RenderLayerCompositor::unregisterAllScrollingLayers): Ditto.
        (WebCore::RenderLayerCompositor::scrollingLayerAddedOrUpdated): Ditto.
        (WebCore::RenderLayerCompositor::scrollingLayerRemoved): Ditto.
        (WebCore::RenderLayerCompositor::startInitialLayerFlushTimerIfNeeded): Ditto.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerFilterInfo.h: Added iOS-specific Clang workaround to ignore
        an unused private field.
        * rendering/RenderMenuList.cpp:
        (WebCore::selectedOptionCount): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderMenuList::RenderMenuList): On iOS we don't make use of RenderMenuList::m_popupIsVisible.
        (WebCore::RenderMenuList::~RenderMenuList): On iOS we don't make use of RenderMenuList::m_popup.
        (WebCore::RenderMenuList::adjustInnerStyle): Add iOS-specific code.
        (RenderMenuList::updateFromElement): On iOS we don't make use of RenderMenuList::m_popup.
        (RenderMenuList::setTextFromOption): Add iOS-specific code.
        (RenderMenuList::showPopup): Define RenderMenuList::showPopup() to ASSERT_NOT_REACHED() on iOS as
        we don't make use of RenderMenuList::m_popup.
        (RenderMenuList::hidePopup): This method has an empty implementation for iOS as we don't make use
        of RenderMenuList::m_popup.
        (RenderMenuList::popupDidHide): This method has an empty implementation for iOS as we don't make use
        of RenderMenuList::m_popupIsVisible.
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::columnNumberForOffset): Added; guarded by PLATFORM(IOS). Also, added a FIXME comment to
        make this function return an unsigned integer instead of a signed integer.
        (WebCore::RenderObject::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderObject::destroy): Added iOS-specific code.
        (WebCore::RenderObject::innerLineHeight): Added.
        (WebCore::RenderObject::willRenderImage): Added iOS-specific code.
        * rendering/RenderObject.h: Change the access control of RenderObject::drawLineForBoxSide() from protected to
        public so that it can be used from RenderThemeIOS::adjustMenuListButtonStyle().
        (WebCore::RenderObject::absoluteQuadsForSelection):
        * rendering/RenderScrollbar.h: Change the access control of RenderScrollbar::getScrollbarPseudoStyle() from
        private to public so that it can be used from the iOS-specific static function, scrollbarHasDisplayNone,
        defined in RenderLayerCompositor.cpp.
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::itemText): Added iOS-specific code.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::collectSelectionRects): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderText::setTextInternal): Added iOS-specific code.
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::adjustInnerTextStyle): Ditto.
        (WebCore::RenderTextControl::canScroll): Added; guarded by PLATFORM(IOS).
        (WebCore::RenderTextControl::innerLineHeight): Ditto.
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::getAvgCharWidth): Compile-out code when building for iOS.
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle): Added iOS-specific code.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout): Ditto.
        (WebCore::RenderTextControlSingleLine::getAvgCharWidth): Compile-out code when building for iOS.
        (WebCore::RenderTextControlSingleLine::preferredContentLogicalWidth): Ditto.
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::lineDirectionPointFitsInBox): Ditto.
        (WebCore::RenderTextLineBoxes::positionForPoint): Added iOS-specific code.
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintBorderOnly): Ditto.
        (WebCore::RenderTheme::paintDecorations): Modified to call the control-specific paint*Decorations().
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintCheckboxDecorations): Added.
        (WebCore::RenderTheme::paintRadioDecorations): Added.
        (WebCore::RenderTheme::paintButtonDecorations): Added.
        (WebCore::RenderTheme::paintTextFieldDecorations): Added.
        (WebCore::RenderTheme::paintTextAreaDecorations): Added.
        (WebCore::RenderTheme::paintMenuListDecorations): Added.
        (WebCore::RenderTheme::paintPushButtonDecorations): Added.
        (WebCore::RenderTheme::paintSquareButtonDecorations): Added.
        (WebCore::RenderTheme::paintFileUploadIconDecorations): Added.
        (WebCore::RenderTheme::paintSliderThumbDecorations): Added.
        (WebCore::RenderTheme::paintSearchFieldDecorations): Added.
        * rendering/RenderThemeIOS.h: Added.
        * rendering/RenderThemeIOS.mm: Added.
        * rendering/RenderThemeMac.h: Don't compile the contents of this file when building for iOS.
        * rendering/RenderThemeMac.mm: Ditto.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize): Compile-out code when building for iOS.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::availableLogicalHeight): Add iOS-specific workaround. See <rdar://problem/7166808>.
        (WebCore::fixedPositionOffset): Added; used in iOS-specific code (e.g. RenderView::mapLocalToContainer()).
        (WebCore::RenderView::mapLocalToContainer): Use WebCore::fixedPositionOffset() instead of 
        FrameView::scrollOffsetForFixedPosition().
        (WebCore::RenderView::pushMappingToContainer): Ditto.
        (WebCore::RenderView::mapAbsoluteToLocalPoint): Ditto.
        (WebCore::RenderView::repaintViewRectangle): Ditto.
        (WebCore::RenderView::computeRectForRepaint): Ditto.
        (WebCore::isFixedPositionInViewport): Added; used in RenderView::hasCustomFixedPosition().
        (WebCore::RenderView::hasCustomFixedPosition): Added; guarded by PLATFORM(IOS).
        * rendering/RenderView.h:
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::willBeDestroyed): Added iOS-specific code.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ascentAndDescentForBox): Ditto.
        * rendering/break_lines.cpp: Only include header <CoreServices/CoreServices.h> when building for Mac.

2013-12-06  Zoltan Horvath  <zoltan@webkit.org>

        Clean up the includes of RenderBlock.h 
        https://bugs.webkit.org/show_bug.cgi?id=125351

        Reviewed by Darin Adler.

        I turned some header includes into forward declarations. I also removed / 
        moved out some includes, which don't belong to RenderBlock.h anymore.

        No new tests, no behavior change.

        * editing/VisibleUnits.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLTextAreaElement.cpp:
        * html/TextFieldInputType.cpp:
        * html/TextInputType.cpp:
        * rendering/InlineElementBox.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/line/LineBreaker.h:
        * rendering/line/LineWidth.cpp:

2013-12-06  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Define SHA1 hash size in SHA1.h and use it at various places.
        https://bugs.webkit.org/show_bug.cgi?id=125345

        Reviewed by Darin Adler.

        Use SHA1::hashSize instead of local variables.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-12-06  Dan Bernstein  <mitz@apple.com>

        [Cocoa] Add load delegate methods for responding to authentication challenges
        https://bugs.webkit.org/show_bug.cgi?id=125333

        Reviewed by Darin Adler.

        * WebCore.exp.in: Exported core(NSURLCredential *).

2013-12-06  Daniel Bates  <dabates@apple.com>

        Rename {adjust, paint}SearchFieldDecoration, {adjust, paint}SearchFieldResultsDecoration
        https://bugs.webkit.org/show_bug.cgi?id=125191

        Reviewed by Joseph Pecoraro.

        Towards upstreaming the iOS concept of render theme decorations, we should rename
        RenderTheme::{adjust, paint}SearchFieldDecorationStyle and RenderTheme::{adjust, paint}SearchFieldResultsDecoration
        to avoid ambiguity with the iOS concept.

        * platform/efl/RenderThemeEfl.cpp:
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        * platform/gtk/RenderThemeGtk.h:
        * rendering/RenderTheme.cpp:
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        * rendering/RenderThemeSafari.cpp:
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWinCE.cpp:
        * rendering/RenderThemeWinCE.h:

2013-12-06  Andreas Kling  <akling@apple.com>

        Make remaining CSSValue constructors return PassRef.
        <https://webkit.org/b/125337>

        Tweak the remaining CSSValue create() helpers to return PassRef
        instead of PassRefPtr in the cases where nullptr is never returned.

        Reviewed by Anders Carlsson.

2013-12-06  Roger Fong  <roger_fong@apple.com>

        Hook into some shader symbol logic following the ANGLE update in r159533.
        https://bugs.webkit.org/show_bug.cgi?id=125332.

        Reviewed by Brent Fulgham.

        No new functionality added.

        * html/canvas/WebGLRenderingContext.cpp: Add some error checking for errors related to 
            shader symbols that exist across both vertex and fragment shaders.
        (WebCore::WebGLRenderingContext::linkProgram):
        * platform/graphics/ANGLEWebKitBridge.cpp: Add logic for handling varyings 
            and add new fields to the ANGLEShaderSymbol struct.
        (WebCore::getSymbolInfo):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h: Add those same fields to the SymbolInfo struct 
            as well so that we can access them from our shader source map.
            Also add a map of varyings along side the uniforms and attributes.
        (WebCore::GraphicsContext3D::SymbolInfo::SymbolInfo):
        (WebCore::GraphicsContext3D::ShaderSourceEntry::symbolMap):
        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::areProgramSymbolsValid): Will be filled in later, this method 
            will use the shader source map to check for issues with unused varyings and precisions 
            mismatches of shader symbols that exist across both the vertex and fragment shaders.

2013-12-06  Lukasz Gajowy  <l.gajowy@samsung.com>

        [ATK] Missing aria roles mappings
        https://bugs.webkit.org/show_bug.cgi?id=117729

        Reviewed by Mario Sanchez Prada.

        Added a few mappings from ARIA roles to ATK roles.

        Test: accessibility/aria-mappings.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole):

2013-11-11  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] webkitwebaudiosrc element needs to emit stream-start, caps and segment events
        https://bugs.webkit.org/show_bug.cgi?id=123015

        Reviewed by Martin Robinson.

        When the source element starts emitting buffers send along various
        events to notify downstream elements.

        No new tests, change covered by existing webaudio tests.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webkit_web_audio_src_init): Initialize segment.
        (webKitWebAudioSrcConstructed): Give an explicit name to each
        queue added in front of the interleave element.
        (webKitWebAudioSrcLoop): Before sending the first buffers push
        stream-start, caps and segment events on each queue's sinkpad.

2013-12-05  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Audio/Video sink management is incoherent
        https://bugs.webkit.org/show_bug.cgi?id=125304

        Reviewed by Gustavo Noronha Silva.

        Allow subclasses of MediaPlayerPrivateGStreamerBase to create
        custom audio/video sinks in a coherent manner using
        create{Audio,Video}Sink methods. Convenience getters are also
        available. Also removed some un-needed member variables in the
        playbin-based player.

        No new tests, existing media tests cover this change.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::createAudioSink):
        (WebCore::MediaPlayerPrivateGStreamer::audioSink):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (WebCore::MediaPlayerPrivateGStreamerBase::createAudioSink):

2013-12-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce IMAGE_TYPE_CASTS, and use it
        https://bugs.webkit.org/show_bug.cgi?id=125330

        Reviewed by Ryosuke Niwa.

        As a step to use TYPE_CASTS_BASE, this cl introduce IMAGE_TYPE_CASTS.
        BitmapImage and SVGImage can use it to generate toFoo() type case helper functions.

        No new tests, no behavior changes.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        (WebCore::CachedImage::resumeAnimatingImagesForLoader):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * svg/graphics/SVGImage.h:

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        Clean up the forwarding headers of RenderBlock.h
        https://bugs.webkit.org/show_bug.cgi?id=125323

        Reviewed by Ryosuke Niwa.

        In this patch, I removed the unnecessary forwarding headers from RenderBlock.h, and moved some to RenderBlockFlow.h.

        No new tests, no behavior change.

        * rendering/RenderBlock.h: Remove unnecessary forwarding headers.
        * rendering/RenderBlockFlow.h: Moved some forwarding headers from RenderBlock.h

2013-12-04  Oliver Hunt  <oliver@apple.com>

        Refactor static getter function prototype to include thisValue in addition to the base object
        https://bugs.webkit.org/show_bug.cgi?id=124461

        Reviewed by Geoffrey Garen.

        Change bindings codegen to produce static getter functions
        with the correct types.  Also update the many custom implementations
        to the new type.

        No change in behaviour.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-05  Tim Horton  <timothy_horton@apple.com>

        Remove Image::decodedSize()
        https://bugs.webkit.org/show_bug.cgi?id=125327

        Reviewed by Sam Weinig.

        No new tests, just removing dead code.

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::resetAnimation):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Image.h:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        * platform/graphics/cg/PDFDocumentImage.h:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.h:

2013-12-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r160133.
        http://trac.webkit.org/changeset/160133
        https://bugs.webkit.org/show_bug.cgi?id=125325

        broke bindings tests on all the bots (Requested by thorton on
        #webkit).

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-05  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove 'cookiesString' output from Page.getCookies
        https://bugs.webkit.org/show_bug.cgi?id=125268

        Reviewed by Timothy Hatcher.

        Remove 'cookiesString' output from Page.getCookies protocol.
        It is no longer meaningful because it is an unused parameter.

        No new tests, no behavior change.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::getCookies):
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json:

2013-12-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: expose node and frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124326

        Reviewed by Joseph Pecoraro.

        This adds snapshotRect() and snapshotNode() to the Page domain.
        Both methods create snapshots using FrameSnapshotting APIs
        and send images to the inspector frontend as a data URL.

        Remove the unimplemented Page.captureScreenshot API.

        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::snapshotNode): Added.
        (WebCore::InspectorPageAgent::snapshotRect): Added.
        * inspector/InspectorPageAgent.h:
        * inspector/protocol/Page.json: Added new protocol APIs.

2013-12-04 Bear Travis <betravis@adobe.com>

    [CSS Shapes] Enable CSS Shapes on Windows
    https://bugs.webkit.org/show_bug.cgi?id=89957

    Reviewed by Brent Fulgham.

    * css/CSSPropertyNames.in: Tweak to ensure shapes properties are regenerated.

2013-12-05  Roger Fong  <roger_fong@apple.com>

        [WebGL] Make sure we satisfy uniform and varying packing restrictions.
        https://bugs.webkit.org/show_bug.cgi?id=125124.
        <rdar://problem/15203291>

        Reviewed by Brent Fulgham.

        Tests covered by WebGL Khronos conformance tests:
        webgl/1.0.2/conformance/glsl/misc/shader-uniform-packing-restrictions.html
        webgl/1.0.2/conformance/glsl/misc/shader-varying-packing-restrictions.html

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

2013-12-05  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        32bit buildfix after r160151
        https://bugs.webkit.org/show_bug.cgi?id=125298

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleDataReceived):

2013-12-05  Myles C. Maxfield  <mmaxfield@apple.com>

        Cropping and drawing ImageBuffers results in uninitialized data being shown
        https://bugs.webkit.org/show_bug.cgi?id=125271

        Reviewed by Simon Fraser.

        createCroppedImageIfNecessary() crops to the bottom left of the ImageBuffer
        backing store instead of the top left. In addition, ImageBuffer::draw()
        draws the entire ImageBuffer's backing store instead of just the relevant
        portion of it.

        No new tests are necessary because the existing tests already test this
        functionality

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createCroppedImageIfNecessary): Crop to the top left of the
        backing store 
        (WebCore::ImageBuffer::draw): Draw only the logical portion of the
        backing store 

2013-12-05  Joseph Pecoraro  <pecoraro@apple.com>

        Remove stale ScriptGlobalObject methods
        https://bugs.webkit.org/show_bug.cgi?id=125276

        Reviewed by Sam Weinig.

        * bindings/js/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/js/ScriptObject.h:

2013-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        Change how the form element pointer affects parsing template elements, to reduce weirdness in templates
        https://bugs.webkit.org/show_bug.cgi?id=125279

        Reviewed by Antti Koivisto.

        Faithfully update the HTML5 parser after http://html5.org/tools/web-apps-tracker?from=8330&to=8331.

        Test: fast/dom/HTMLTemplateElement/no-form-association-2.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLFormElement): Don't the form element pointer if the context
        element or its ancestor is a template element.
        (WebCore::HTMLConstructionSite::insideTemplateElement): Added.
        (WebCore::HTMLConstructionSite::createHTMLElement): Renamed openElementsContainTemplateElement to
        insideTemplateElement to reflect the true semantics of the boolean.

        * html/parser/HTMLConstructionSite.h:

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody): Ignore the form element pointer if there
        is a template element on the stack of open elements. This faithfully reflects what's being said in the
        specification. We should probably make isParsingTemplateContents more efficient by storing a boolean
        and then wrap from() in some helper function but that should probbaly happen in a separate patch.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInBody): Don't unset or rely on the form element pointer
        when there is a template element on the stack of open elements.

        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::isParsingTemplateContents): Added a trivial implementation for when
        TEMPLATE_ELEMENT is disabled.
        (WebCore::HTMLTreeBuilder::isParsingFragmentOrTemplateContents): Merged two implementations.

2013-12-05  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [MediaStream] Firing negotiationneeded event upon track add/remove on MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=125243

        Reviewed by Eric Carlson.

        Spec states that: In particular, if an RTCPeerConnection object is consuming a MediaStream on which a track is
        added, by, e.g., the addTrack() method being invoked, the RTCPeerConnection object must fire the
        "negotiationneeded" event. Removal of media components must also trigger "negotiationneeded".

        Existing tests updated.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::addObserver):
        (WebCore::MediaStream::removeObserver):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::~RTCPeerConnection):
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::didAddOrRemoveTrack):
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::addStream):

2013-12-05  Beth Dakin  <bdakin@apple.com>

        Bad repaints on twitter when the tile cache has a margin
        https://bugs.webkit.org/show_bug.cgi?id=125263
        -and corresponding-
        <rdar://problem/15576884>

        Reviewed by Tim Horton.

        When tiles that used to be margin tiles become real-content tiles, they need to be 
        invalidated.

        Two new helper functions will make it so that we don’t have to manually factor out 
        the margin from the bounds in more than one place in the code.
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::boundsWithoutMargin):
        (WebCore::TileController::boundsAtLastRevalidateWithoutMargin):

         Here is one existing place where we used to factor out the margin, but now we can 
        call boundsWithoutMargin().
        (WebCore::TileController::adjustRectAtTileIndexForMargin):

        And here is where we invalidate the formerly-margin tiles.
        (WebCore::TileController::revalidateTiles):

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        Remove the forward declaration of BidiContext class from RenderBlock.h
        https://bugs.webkit.org/show_bug.cgi?id=125265

        Reviewed by Csaba Osztrogonác.

        No new tests, no behavior change.

        * rendering/RenderBlock.h: BidiContext is not used in RenderBlock.h

2013-12-05  Aloisio Almeida Jr  <aloisio.almeida@openbossa.org>

        [Cairo] Avoid extra copy when drawing images
        https://bugs.webkit.org/show_bug.cgi?id=124209

        Reviewed by Carlos Garcia Campos.

        This commit applies some changes proposed after the original patch has
        been landed. It fixes the logic to create the subsurface (as it was
        inverted). It also remove an unnecessary RefPtr variable to hold the
        subsurface.

        No new tests. It's an enhancement. Already covered by existing tests.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-12-05  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Fix inset when only a subset of the arguments are defined
        https://bugs.webkit.org/show_bug.cgi?id=125277

        Reviewed by David Hyatt.

       I thought Length's default value is fixed-0, but actually it's auto-0. For the optional arguments
       of inset shape, we need to use fixed-0, so I updated the code and the tests to use that explicitly.

        No new tests, I updated the old ones.

        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not use deprecated gtk-doc 'Rename to' tag
        https://bugs.webkit.org/show_bug.cgi?id=125303

        Reviewed by Philippe Normand.

        GObject introspection rename-to annotation is available in
        since version 0.6.3 so we should use that instead.

        * bindings/gobject/WebKitDOMEventTarget.h:

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing symbols to WebKitDOMDeprecated.symbols
        https://bugs.webkit.org/show_bug.cgi?id=125300

        Reviewed by Philippe Normand.

        Add webkit_dom_html_element_get_id and
        webkit_dom_html_element_set_id to the symbols files.

        * bindings/gobject/WebKitDOMDeprecated.symbols:
        * bindings/gobject/webkitdom.symbols:

2013-12-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM bindings symbols file after r159711.

        * bindings/gobject/webkitdom.symbols:

2013-12-05  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move platform sources free of layering violations under libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=117509

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.list.am: Move additional source files located in the platform layer under libPlatform.
        All moved sources are free of layering violations and thus ready for the migration.

2013-12-05  László Langó  <lango@inf.u-szeged.hu>

        Remove bridge/testqtbindings.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=125287

        Reviewed by Alexey Proskuryakov.

        * bridge/testqtbindings.cpp: Removed. There is no QT anymore.
        We don't need this file.

2013-12-04  Gurpreet Kaur  <k.gurpreet@samsung.com>

        % unit heights don't work if parent block height is set in vh
        https://bugs.webkit.org/show_bug.cgi?id=118516

        Reviewed by Simon Fraser.

        From Blink r156449 by <srinivasa.ragavan.venkateswaran@intel.com>

        An element having height as percentage needs to have the
        containingblock's height or availableheight to calculate its
        own height. The containing block having a height set in vh
        unit was not being considered for calculating the child's
        height.

        Tests: fast/css/viewport-percentage-compute-box-height.html
               fast/css/viewport-percentage-compute-box-width.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computePercentageLogicalHeight):
        Correct child's height(in pecentage) was not being calculated
        incase of parent having height set in vh unit. Added condition
        to calculate the containing block height in terms of viewport size.

2013-12-04  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix. Copy headers from rendering/line to build directory.

        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2013-12-04  Ryosuke Niwa  <rniwa@webkit.org>

        bgColor, setBgColor, alinkColor, setAlinkColor, and etc... on HTMLBodyElement are useless
        https://bugs.webkit.org/show_bug.cgi?id=125208

        Rubber-stamped by Anders Carlsson.

        Address Darin's comment to use fastGetAttribute instead of getAttribute.

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::vlinkColor):

2013-12-04  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Darin Adler.

        Various snapshot creation methods had duplicated code and were split
        between Frame, DragImage, and platform-specific implementationss.
        This patch puts WebCore snapshot methods into FrameSnapshotting
        and removes platform implementations where possible.

        DragImage methods reuse snapshot methods where possible. Inspector
        will be able to take snapshots without using drag images.

        No new tests, this is a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Added.
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::snapshotFrameRect): Move most buffer logic to here.
        (WebCore::snapshotSelection): Moved from Frame.
        (WebCore::snapshotNode): Moved from Frame.
        * page/FrameSnapshotting.h: Added.
        * page/mac/FrameMac.mm: Removed.
        * page/mac/FrameSnapshottingMac.h: Removed.
        * page/mac/FrameSnapshottingMac.mm: Removed.
        * page/win/FrameWin.cpp: remove duplicate implementation.
        * page/win/FrameWin.h: Fix an incorrect parameter name.
        * platform/DragImage.cpp:
        (WebCore::ScopedNodeDragState::ScopedNodeDragState):
        (WebCore::ScopedNodeDragState::~ScopedNodeDragState):
        (WebCore::createDragImageFromSnapshot): Boilerplate buffer conversion.
        (WebCore::createDragImageForNode):
        (WebCore::createDragImageForSelection):
        (WebCore::ScopedFrameSelectionState::ScopedFrameSelectionState):
        (WebCore::ScopedFrameSelectionState::~ScopedFrameSelectionState):
        (WebCore::createDragImageForRange): Moved from Frame.
        (WebCore::createDragImageForImage): Moved from FrameSnapshottingMac.
        (WebCore::createDragImageForLink): use nullptr.

2013-12-04  Benjamin Poulain  <bpoulain@apple.com>

        Remove spaces on a blank line to have ResourceHandleCFNet.cpp identical to iOS

        Unreviewed.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):

2013-12-04  Antti Koivisto  <antti@apple.com>

        Move pseudo element construction out from Element
        https://bugs.webkit.org/show_bug.cgi?id=125257

        Reviewed by Anders Carlsson.

        This is logically part of the style resolve/render tree construction. This will make future
        refactoring easier.

        * dom/Element.cpp:
        * dom/Element.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::beforeOrAfterPseudoElement):
        (WebCore::Style::setBeforeOrAfterPseudoElement):
        (WebCore::Style::clearBeforeOrAfterPseudoElement):
        (WebCore::Style::needsPseudeElement):
        (WebCore::Style::attachBeforeOrAfterPseudoElementIfNeeded):
        (WebCore::Style::attachRenderTree):
        (WebCore::Style::updateBeforeOrAfterPseudoElement):
        (WebCore::Style::resolveTree):

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Move TrailingObjects class into its own h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=124956

        Reviewed by David Hyatt.

        Since I moved space-ignoring inline functions into MidpointState in r160074,
        I can nicely separate TrailingObjects class from BreakingContextInlineHeader.h.
        This change improves the readability, and it's part of the RenderBlockLineLayout
        refactoring campaign, which is tracked under bug #121261.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        * rendering/line/TrailingObjects.cpp: Added.
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        * rendering/line/TrailingObjects.h: Added.
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):

2013-12-04  Oliver Hunt  <oliver@apple.com>

        Refactor static getter function prototype to include thisValue in addition to the base object
        https://bugs.webkit.org/show_bug.cgi?id=124461

        Reviewed by Geoffrey Garen.

        Change bindings codegen to produce static getter functions
        with the correct types.  Also update the many custom implementations
        to the new type.

        No change in behaviour.

        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::cssPropertyGetterPixelOrPosPrefixCallback):
        (WebCore::cssPropertyGetterCallback):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::objectToStringFunctionGetter):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp:
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSDOMStringMapCustom.cpp:
        (WebCore::JSDOMStringMap::nameGetter):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::nonCachingStaticFunctionGetter):
        (WebCore::childFrameGetter):
        (WebCore::indexGetter):
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::JSHTMLAllCollection::nameGetter):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::JSHTMLCollection::nameGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * bindings/js/JSHTMLFormControlsCollectionCustom.cpp:
        (WebCore::JSHTMLFormControlsCollection::nameGetter):
        * bindings/js/JSHTMLFormElementCustom.cpp:
        (WebCore::JSHTMLFormElement::nameGetter):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::nonCachingStaticBackFunctionGetter):
        (WebCore::nonCachingStaticForwardFunctionGetter):
        (WebCore::nonCachingStaticGoFunctionGetter):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::nonCachingStaticReplaceFunctionGetter):
        (WebCore::nonCachingStaticReloadFunctionGetter):
        (WebCore::nonCachingStaticAssignFunctionGetter):
        * bindings/js/JSNamedNodeMapCustom.cpp:
        (WebCore::JSNamedNodeMap::nameGetter):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeList::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginElementPropertyGetter):
        * bindings/js/JSPluginElementFunctions.h:
        * bindings/js/JSRTCStatsResponseCustom.cpp:
        (WebCore::JSRTCStatsResponse::nameGetter):
        * bindings/js/JSStorageCustom.cpp:
        (WebCore::JSStorage::nameGetter):
        * bindings/js/JSStyleSheetListCustom.cpp:
        (WebCore::JSStyleSheetList::nameGetter):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (GenerateParametersCheck):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        (JSC::RuntimeArray::indexGetter):
        * bridge/runtime_array.h:
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):
        * bridge/runtime_method.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::fallbackObjectGetter):
        (JSC::Bindings::RuntimeObject::fieldGetter):
        (JSC::Bindings::RuntimeObject::methodGetter):
        * bridge/runtime_object.h:

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Support inset for shape-outside
        <https://webkit.org/b/125112>

        Reviewed by David Hyatt.

        This patch adds inset support for shape-outside. Parsing has previously landed in r159968.
        Specification: http://dev.w3.org/csswg/css-shapes/#supported-basic-shapes

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-left.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-bottom-right.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-left.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset-rounded-top-right.html
               fast/shapes/shape-outside-floats/shape-outside-floats-inset.html

        * platform/LengthSize.h:
        (WebCore::LengthSize::floatSize): Add conversion to FloatSize.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Handle inset case.

2013-12-04  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Support raster shape visualizations
        https://bugs.webkit.org/show_bug.cgi?id=124080

        Reviewed by Joseph Pecoraro.

        Create an inspector visualization for a shape created from an image.
        The visualization takes each line of the image, combining where possible.

        Test added to inspector-protocol/model/highlight-shape-outside.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::buildBoundsPath): Create a path representing the
        RasterShapeIntervals.
        * rendering/shapes/RasterShape.h:

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Remove explicit numbering from BasicShape::Type and CSSBasicShape::Type enums
        https://bugs.webkit.org/show_bug.cgi?id=125163

        Reviewed by Rob Buis.

        I don't see any reason to have explicit numbering for the Type enum in our [CSS]BasicShape classes.
        I removed numbering, which will decrease for instance the merge conflicts on Type changes.

        No new tests, no behavior change.

        * css/CSSBasicShapes.h:
        * rendering/style/BasicShapes.h:

2013-12-04  Myles C. Maxfield  <mmaxfield@apple.com>

        Allow ImageBuffer to use an IOSurface that is larger than necessary
        https://bugs.webkit.org/show_bug.cgi?id=124626

        Reviewed by Simon Fraser.

        Because creating ImageBuffer's backing store can be so expensive, it
        would be beneficial to have a pool of pre-created backing stores
        available. However, this means that ImageBuffer might have to use a
        backing store that is larger than the exact dimensions that it needs.
        This patch adds a field, m_backingStoreSize, to CG's ImageBufferData
        class, and uses this new field when performing ImageBuffer operations
        to allow for larger-than-necessary backing stores. Content is always
        drawn in the top left corner of the backing store.

        No new tests are necessary because there is no behavior change.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::baseTransform): The base transform has to put
        content at the top left corner instead of bottom left
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createCroppedImageIfNecessary): Convenience function to figure out
        the dimensions of the backing texture in user space
        (WebCore::ImageBuffer::ImageBuffer): Set up new m_backingStoreSize member
        (WebCore::maybeCropToBounds): Some ImageBuffer API functions require
        outputting an image with logical size. This function performs the cropping
        (WebCore::ImageBuffer::copyImage): Updated for larger-than-necessary
        backing stores
        (WebCore::ImageBuffer::copyNativeImage): Ditto
        (WebCore::ImageBuffer::draw): Ditto
        (WebCore::ImageBuffer::clip): Ditto
        (WebCore::ImageBuffer::putByteArray): Ditto
        (WebCore::ImageBuffer::toDataURL): Ditto
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData): Ditto
        (WebCore::ImageBufferData::putData): Ditto
        * platform/graphics/cg/ImageBufferDataCG.h: New m_backingStoreSize field

2013-12-03  Dean Jackson  <dino@apple.com>

        [WebGL] Support for texImage2D of type HALF_FLOAT_OES
        https://bugs.webkit.org/show_bug.cgi?id=110936

        Reviewed by Brent Fulgham.

        Add support for the HALF_FLOAT_OES texture format from texImage2D
        and texSubImage2D.

        A lot of this patch comes from the original patch on the bug
        by Nayan Kumar, and the Blink commit:
        https://codereview.chromium.org/13842017

        Tests: fast/canvas/webgl/oes-texture-half-float-with-canvas.html
               fast/canvas/webgl/oes-texture-half-float-with-image.html
               fast/canvas/webgl/oes-texture-half-float-with-video.html

        * html/canvas/OESTextureHalfFloat.idl: New HALF_FLOAT_OES constant value.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFunc): Remove the code that
        would bail if half-float values were used.
        * platform/graphics/GraphicsContext3D.cpp:
        - Return appropriate DataFormats for half floating point types.
        - Copy the float -> half-float code from Blink
        - New pack functions for half floats
        * platform/graphics/GraphicsContext3D.h: New format types.
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::texSubImage2D): Use GL_HALF_FLOAT_ARB if we're passed
        a HALF_FLOAT_OES.

2013-12-04  Daniel Bates  <dabates@apple.com>

        Fix the Apple Windows build after <http://trac.webkit.org/changeset/160113>
        (https://bugs.webkit.org/show_bug.cgi?id=125193)

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Substitute paintInfo for i.

2013-12-04  Daniel Bates  <dabates@apple.com>

        Rename RenderTheme::paintMenuListButton()
        https://bugs.webkit.org/show_bug.cgi?id=125193

        Reviewed by Simon Fraser.

        Towards upstreaming the iOS concept of render theme decorations we should rename
        RenderTheme::paintMenuListButton() to RenderTheme::paintMenuListButtonDecorations()
        to better describe its purpose.

        Also, fix code style issues.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintMenuListButtonDecorations):
        * platform/blackberry/RenderThemeBlackBerry.h:
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintMenuListButtonDecorations):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMenuListButtonDecorations):
        * platform/gtk/RenderThemeGtk.h:
        * platform/nix/RenderThemeNix.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintDecorations): Rename argument o, r to renderer and rect, respectively.
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintMenuListButtonDecorations):
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMenuListButtonDecorations): Rename argument o, r to renderer and rect,
        respectively; also remove extraneous white space and substitute 1 for 1.0f.
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButtonDecorations): Ditto.
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintMenuList): Rename argument o, i, r to renderer, paintInfo, and rect,
        respectively.
        (WebCore::RenderThemeWin::paintMenuListButtonDecorations): Ditto.
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintMenuList): Ditto.
        (WebCore::RenderThemeWinCE::paintMenuListButtonDecorations): Ditto. 
        * rendering/RenderThemeWinCE.h:

2013-12-04  Andy Estes  <aestes@apple.com>

        [iOS] Build projects with $(ARCHS_STANDARD_32_64_BIT)
        https://bugs.webkit.org/show_bug.cgi?id=125236

        Reviewed by Sam Weinig.

        $(ARCHS_STANDARD_32_64_BIT) is what we want for both device and simulator builds.

        * Configurations/DebugRelease.xcconfig:

2013-12-04  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows build fix attempt after r160099.

        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:

2013-12-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Push Remote Inspector debugging connection management into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=124613

        Reviewed by Timothy Hatcher.

        Make a WebCore::Page a "Web" Remote Debuggable.

        * bindings/js/JSDOMGlobalObject.cpp:
        Disable JavaScript context inspection on JSGlobalObjects inside WebCore::Page's.

        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::remoteInspectionAllowed):
        (WebCore::Page::setRemoteInspectionAllowed):
        (WebCore::Page::remoteInspectorInformationDidChange):
        * page/Page.h:
        * page/PageDebuggable.h:
        * page/PageDebuggable.cpp: Added.
        (WebCore::PageDebuggable::PageDebuggable):
        (WebCore::PageDebuggable::name):
        (WebCore::PageDebuggable::url):
        (WebCore::PageDebuggable::hasLocalDebugger):
        (WebCore::PageDebuggable::connect):
        (WebCore::PageDebuggable::disconnect):
        (WebCore::PageDebuggable::dispatchMessageFromRemoteFrontend):
        (WebCore::PageDebuggable::setIndicating):
        Make a page a "Web" debuggable.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        Misc.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::indicate):
        (WebCore::InspectorClient::hideIndicate):
        Forward indicate methods to WebKit clients.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didChangeTitle):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        Push updates when remote debuggable information like the Page's
        URL or title change.

        * ForwardingHeaders/inspector/InspectorFrontendChannel.h:
        * inspector/InspectorForwarding.h:
        Re-export Inspector::InspectorFrontendChannel as WebCore::InspectorFrontendChannel
        to avoid needlessly updating code all over the place.

        * inspector/CodeGeneratorInspectorStrings.py:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/WorkerInspectorController.cpp:
        * testing/Internals.cpp:
        Update include names.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::populate):
        Make the "Inspect Element" context menu work correctly when there is a
        remote inspector instead of a local inspector.

2013-12-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add missing folders and files to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=124802

        Reviewed by Timothy Hatcher.

        * WebCore.xcodeproj/project.pbxproj:

2013-12-04  José Dapena Paz  <jdapena@igalia.com>

        [texmap] Borders on rotating images are hidden/wrongly rendered with edge distance antialiasing
        https://bugs.webkit.org/show_bug.cgi?id=124653

        Reviewed by Noam Rosenthal.

        Texture mapper edge distance antialiasing texture sampling was causing
        borders to be shaded (and made them almost disappear in some cases).
        This was because calculation of sampling happened on vertex shader, so
        the border of the texture would go to the border of the inflation area.

        What algorithm should do is sampling the border pixel for all the
        inflation area (it is the closest pixel to all the samples in
        inflation area), and then use the standard sampling for the other
        parts of the texture.

        No new test because this is already covered by test
        transforms/3d/point-mapping/3d-point-mapping.html

        * platform/graphics/texmap/TextureMapperShaderProgram.cpp: fix edge
        distance antialiasing texture sampling.

2013-12-04  László Langó  <lango@inf.u-szeged.hu>

        Typo fix after r160074 to fix debug builds.

        Reviewed by Csaba Osztrogonác.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::stopIgnoringSpaces):

2013-12-04  Zoltan Horvath  <zoltan@webkit.org>

        Move space-ignoring inline functions into MidpointState
        <https://webkit.org/b/124957>

        Reviewed by David Hyatt.

        Since:
         - The following inline functions were used only with a mandatory LineMidpointState argument:
           startIgnoringSpaces, stopIgnoringSpaces, ensureLineBoxInsideIgnoredSpaces, deprecatedAddMidpoint.
         - TrailingObjects class uses these functions. Since they're inline in BreakingContextInlineHeaders.h,
           it's hard to separate TrailingObjects into it's own file. (blocks bug #124956)
         I made these functions as a member of LineMidpointState, and I also updated the call sites.

        No new tests, no behavior change.

        * platform/text/BidiResolver.h:
        (WebCore::MidpointState::startIgnoringSpaces):
        (WebCore::MidpointState::stopIgnoringSpaces):
        (WebCore::MidpointState::ensureLineBoxInsideIgnoredSpaces):
        (WebCore::MidpointState::deprecatedAddMidpoint):
        * rendering/RenderBlock.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):

2013-12-03  Zoltan Horvath  <zoltan@webkit.org>

        Remove BreakingContext's friendship from RenderBlockFlow
        <https://webkit.org/b/124958>

        Reviewed by David Hyatt.

        BreakingContext uses only 2 functions from RenderBlockFlow: insertFloatingObject/positionNewFloatOnLine. I added helper
        functions to LineBreaker, what is already a friend of RenderBlockFlow, so BreakingContext doesn't need to be anymore.
 
        No new tests, no behavior change.

        * rendering/RenderBlockFlow.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::BreakingContext::handleFloat):
        * rendering/line/LineBreaker.h:
        (WebCore::LineBreaker::insertFloatingObject):
        (WebCore::LineBreaker::positionNewFloatOnLine):

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        bgColor, setBgColor, alinkColor, setAlinkColor, and etc... on HTMLBodyElement are useless
        https://bugs.webkit.org/show_bug.cgi?id=125208

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/49b1eeabbbf573d5271288c66d2b566cf33a09cf

        These member functions of HTMLBodyElement were only used by corresponding functions in HTMLDocument
        since they had the Reflect option specified in HTMLBodyElement.idl.

        Removed the functions and directly called getAttribute and setAttribute in relevant functions in
        HTMLDocument. The optimization to avoid assignment is no longer needed here since we've added that
        optimization to setAttributeInternal a while ago.

        * html/HTMLBodyElement.cpp:
        * html/HTMLBodyElement.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        * html/HTMLDocument.h:

2013-12-03  Andreas Kling  <akling@apple.com>

        Add a CSSProperty::isDirectionAwareProperty() helper.
        <https://webkit.org/b/125202>

        Move the block of case labels for checking whether a CSS property ID
        is a directional property into a separate function. Also removed an
        outdated comment about CSS variables.

        Reviewed by Antti Koivisto.

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Revert the inadvertently committed change.

        * html/HTMLElement.idl:

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Remove nodeIsDetachedFromDocument and visualWordMovementEnabled in FrameSelection
        https://bugs.webkit.org/show_bug.cgi?id=125210

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/92409870f0ff8fafe31217830db0838a9e1ffb98

        Removed some unused code.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWasReplaced):
        * editing/FrameSelection.h:
        * page/Settings.in:

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Potential crash in RenderView::selectionBounds and RenderView::repaintSelection
        https://bugs.webkit.org/show_bug.cgi?id=125207

        Reviewed by Simon Fraser.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/f9e6e288a5aa959f05c374806121aaf0fc52d440

        Update style in FrameSelection instead of RenderView's member functions. These are the last two
        member functions of RenderView that updates the style.

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::focusedOrActiveStateChanged):
        (WebCore::FrameSelection::bounds):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::repaintSelection):

2013-12-03  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/125143> Improve the formatting in the generated Objective-C headers.

        Add a space between @property and any parenthesized attributes.
        Prefer strong over retain when specifying memory management semantics.

        Reviewed by Darin Adler.

        * bindings/objc/PublicDOMInterfaces.h:
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GetPropertyAttributes): Generate strong instead of retain. Include a
        space before the parenthesis.
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObject.h:
        * bindings/scripts/test/ObjC/DOMTestEventConstructor.h:
        * bindings/scripts/test/ObjC/DOMTestException.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMattribute.h:

2013-12-03  Alexey Proskuryakov  <ap@apple.com>

        Update WebCrypto JWK mapping to newer proposal
        https://bugs.webkit.org/show_bug.cgi?id=124218

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/jwk-export-use-values.html
               crypto/subtle/jwk-import-use-values.html

        1. "extractable" renamed to "ext" in JWK.
        2. New values for "use" mapping, which can now be combined into comma separated lists,
        and cover all possible WebCrypto usages.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages):
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        (WebCore::processUseValue):
        (WebCore::JSCryptoKeySerializationJWK::addJWKUseToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):

2013-12-03  Simon Fraser  <simon.fraser@apple.com>

        Remove some iOS-related documentScale code
        https://bugs.webkit.org/show_bug.cgi?id=125194

        Reviewed by Enrica Casucci.

        Remove exports of nonexistent documentScale-related functions on Frame.

        * WebCore.exp.in:

2013-12-03  Eric Carlson  <eric.carlson@apple.com>

        Fix regression caused by r158599
        https://bugs.webkit.org/show_bug.cgi?id=125188

        Reviewed by Jer Noble.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::clearMediaPlayer): Do not clear m_player when PLUGIN_PROXY_FOR_VIDEO
            is enabled.

2013-12-03  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Updating WebCore files
        https://bugs.webkit.org/show_bug.cgi?id=124981

        Reviewed by Benjamin Poulain.

        Just to sync our github repo files and the trunk, as part of the upstream process

        No new tests needed.

        * PlatformNix.cmake:
        * css/mediaControlsNix.css:
        (audio):
        (video::-webkit-media-controls):
        (audio::-webkit-media-controls-enclosure, video::-webkit-media-controls-enclosure):
        (video::-webkit-media-controls-enclosure):
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):
        (video:-webkit-full-page-media):
        (audio:-webkit-full-page-media, video:-webkit-full-page-media):
        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button):
        (audio::-webkit-media-controls-overlay-play-button, video::-webkit-media-controls-overlay-play-button):
        (audio::-webkit-media-controls-play-button, video::-webkit-media-controls-play-button):
        (audio::-webkit-media-controls-timeline-container, video::-webkit-media-controls-timeline-container):
        (audio::-webkit-media-controls-time-remaining-display, video::-webkit-media-controls-time-remaining-display):
        (audio::-webkit-media-controls-timeline, video::-webkit-media-controls-timeline):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (input[type="range"]::-webkit-media-slider-container):
        (input[type="range"]::-webkit-media-slider-container > div):
        (input[type="range"]::-webkit-media-slider-thumb):
        (audio::-webkit-media-controls-seek-back-button, video::-webkit-media-controls-seek-back-button):
        (audio::-webkit-media-controls-seek-forward-button, video::-webkit-media-controls-seek-forward-button):
        (audio::-webkit-media-controls-fullscreen-button, video::-webkit-media-controls-fullscreen-button):
        (audio::-webkit-media-controls-toggle-closed-captions-button, video::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-fullscreen-volume-slider, video::-webkit-media-controls-fullscreen-volume-slider):
        (audio::-webkit-media-controls-fullscreen-volume-min-button, video::-webkit-media-controls-fullscreen-volume-min-button):
        (audio::-webkit-media-controls-fullscreen-volume-max-button, video::-webkit-media-controls-fullscreen-volume-max-button):
        (video::-webkit-media-text-track-container):
        (video::cue):
        (video::-webkit-media-text-track-region):
        (video::-webkit-media-text-track-region-container):
        (video::-webkit-media-text-track-region-container.scrolling):
        (video::-webkit-media-text-track-display):
        (video::cue(:future)):
        (video::-webkit-media-text-track-container b):
        (video::-webkit-media-text-track-container u):
        (video::-webkit-media-text-track-container i):
        * editing/Editor.cpp:
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::copyImage):
        * editing/Editor.h:
        * html/HTMLCanvasElement.h:
        * platform/Cursor.h:
        * platform/audio/FFTFrame.h:
        * platform/audio/nix/AudioBusNix.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/graphics/GLContext.h:
        * platform/nix/CursorNix.cpp:
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/nix/GamepadsNix.cpp:
        (WebCore::sampleGamepads):
        * platform/nix/RenderThemeNix.cpp:
        (WebCore::toIntSize):
        (WebCore::toNixRect):
        (WebCore::RenderThemeNix::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeNix::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeNix::platformActiveTextSearchHighlightColor):
        (WebCore::RenderThemeNix::platformInactiveTextSearchHighlightColor):
        (WebCore::RenderThemeNix::platformFocusRingColor):
        (WebCore::RenderThemeNix::platformTapHighlightColor):
        (WebCore::RenderThemeNix::paintButton):
        (WebCore::RenderThemeNix::paintTextField):
        (WebCore::RenderThemeNix::paintCheckbox):
        (WebCore::RenderThemeNix::setCheckboxSize):
        (WebCore::RenderThemeNix::paintRadio):
        (WebCore::RenderThemeNix::setRadioSize):
        (WebCore::RenderThemeNix::paintMenuList):
        (WebCore::RenderThemeNix::paintProgressBar):
        (WebCore::RenderThemeNix::paintSliderTrack):
        (WebCore::RenderThemeNix::paintSliderThumb):
        (WebCore::RenderThemeNix::paintInnerSpinButton):
        (WebCore::RenderThemeNix::paintMeter):
        (WebCore::RenderThemeNix::extraMediaControlsStyleSheet):
        (WebCore::RenderThemeNix::paintMediaPlayButton):
        (WebCore::RenderThemeNix::paintMediaMuteButton):
        (WebCore::RenderThemeNix::paintMediaSeekBackButton):
        (WebCore::RenderThemeNix::paintMediaSeekForwardButton):
        (WebCore::RenderThemeNix::paintMediaSliderTrack):
        (WebCore::RenderThemeNix::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeNix::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeNix::paintMediaRewindButton):
        * platform/nix/RenderThemeNix.h:
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-12-03  Ralph Thomas  <ralpht@gmail.com>

        Typo: FixedPositionConstaint -> FixedPositionConstraint
        https://bugs.webkit.org/show_bug.cgi?id=125171

        Reviewed by Simon Fraser.

        No new tests, no change in behavior.

        * page/scrolling/ScrollingConstraints.h:
        * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
        (WebCore::ScrollingCoordinatorCoordinatedGraphics::updateViewportConstrainedNode):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::updateViewportConstrainedNode):

2013-12-03  Samuel White  <samuel_white@apple.com>

        AXPress event coordinates are always sent as (0, 0)
        https://bugs.webkit.org/show_bug.cgi?id=76677

        Reviewed by Simon Fraser.

        Set the coordinates of a simulated press equal to the center of the target
        element when the simulated press does not have a related mouse event.

        Test: accessibility/press-targets-center-point.html

        * dom/Element.cpp:
        (WebCore::Element::clientRect):
        (WebCore::Element::screenRect):
        * dom/Element.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchSimulatedClick):
        * dom/MouseEvent.cpp:
        (WebCore::SimulatedMouseEvent::create):
        (WebCore::SimulatedMouseEvent::SimulatedMouseEvent):
        * dom/MouseEvent.h:

2013-12-03  Dean Jackson  <dino@apple.com>

        [WebGL] Implement OES texture float linear
        https://bugs.webkit.org/show_bug.cgi?id=124871

        Reviewed by Brent Fulgham.

        Implement the OES_texture_float_linear extension. Generally
        we'd also enable OES_texture_half_float_linear at the same
        time, but that's blocked on webkit.org/b/110936.

        Test: fast/canvas/webgl/oes-texture-float-linear.html

        * CMakeLists.txt: Add new files.
        * DerivedSources.cpp: Ditto.
        * DerivedSources.make: Generate new file from IDL.
        * GNUmakefile.list.am: Add new files.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: New files for OESTextureFloatLinear.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS): Map the new name into the appropriate type.

        * html/canvas/OESTextureFloatLinear.cpp: Added. This is a very simple class
        that's mostly empty.
        (WebCore::OESTextureFloatLinear::OESTextureFloatLinear):
        (WebCore::OESTextureFloatLinear::~OESTextureFloatLinear):
        (WebCore::OESTextureFloatLinear::getName):
        (WebCore::OESTextureFloatLinear::create):
        * html/canvas/OESTextureFloatLinear.h: Added.
        * html/canvas/OESTextureFloatLinear.idl: Added.

        * html/canvas/WebGLExtension.h: Declare the new name in the enum of extensions.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawArrays): Call new name.
        (WebCore::WebGLRenderingContext::drawElements): Call new name.
        (WebCore::WebGLRenderingContext::getExtension): Create the new extension if asked.
        (WebCore::WebGLRenderingContext::checkTextureCompleteness): Renamed from handleNPOTTextures. Now
        checks for the type of the texture too.
        * html/canvas/WebGLRenderingContext.h: Member variable for new extension.

        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::needToUseBlackTexture): Takes an extra parameter which indicates
        if it has an extension enabled.
        (WebCore::WebGLTexture::update): Note it is a float type when updating.
        * html/canvas/WebGLTexture.h: New flag to indicate float type.

        * platform/graphics/Extensions3D.h: New flag type.
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supportsExtension): Add a comment about the extension.

2013-12-03  Alexey Proskuryakov  <ap@apple.com>

        Support exporting private WebCrypto RSA keys
        https://bugs.webkit.org/show_bug.cgi?id=124483

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/rsa-export-private-key.html

        It might be better to have our own bignum implementation in WTF, but we currently
        don't, and the need for this computation is Common Crypto specific anyway.

        * crypto/CommonCryptoUtilities.h:
        * crypto/CommonCryptoUtilities.cpp:
        (WebCore::CCBigNum::CCBigNum):
        (WebCore::CCBigNum::~CCBigNum):
        (WebCore::CCBigNum::operator=):
        (WebCore::CCBigNum::data):
        (WebCore::CCBigNum::operator-):
        (WebCore::CCBigNum::operator%):
        (WebCore::CCBigNum::inverse):
        Added a minimal wrapper around CommonCrypto BigNum.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPrivateKeyComponents): Compute missing parts using CCBigNum.
        (WebCore::CryptoKeyRSA::exportData): Implemented private key case.

2013-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        XML fragment parsing algorithm doesn't use the context element's default namespace URI
        https://bugs.webkit.org/show_bug.cgi?id=125132

        Reviewed by Darin Adler.

        Always use the context element's namespace as the default namespace URI when one is not specified by xmlns.

        The new behavior matches that of Internet Explorer and the specified behavior in HTML5:
        http://www.w3.org/TR/2013/CR-html5-20130806/the-xhtml-syntax.html#parsing-xhtml-fragments

        "The default namespace is the namespace for which the DOM isDefaultNamespace() method on the element would
        return true."

        Test: fast/parser/fragment-parsing-in-document-without-xmlns.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-12-03  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove some CSS Variables leftovers
        https://bugs.webkit.org/show_bug.cgi?id=125167

        Reviewed by Darin Adler.

        No new tests needed. Only removing leftover code.

        * css/CSSBasicShapes.cpp:
        * css/CSSBasicShapes.h:

2013-12-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Checking second-to-last bit in address is a typo
        https://bugs.webkit.org/show_bug.cgi?id=125162

        Reviewed by Darin Adler.

        After talking with the original author of this line,
        is was a typo to make sure that the second-to-last bit
        in an address is 0. Instead, we want to make sure that
        the address is aligned to a 4-byte boundary

        No behavior change, so no test is necessary

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2013-12-03  Radu Stavila  <stavila@adobe.com>

        The overflow border of a relatively positioned element inside a region is not painted
        https://bugs.webkit.org/show_bug.cgi?id=124919

        Relative positioned elements have self-painting layers that don't propagate the visual overflow
        so the layer's position should be used when determining the clipping rectangle for box decorations.

        Reviewed by Mihnea Ovidenie.

        Test: fast/regions/relative-borders-overflow.html

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):

2013-12-03  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of 'hasFrontend()' in InspectorController and WorkerInspectorController
        https://bugs.webkit.org/show_bug.cgi?id=125135

        Reviewed by Darin Adler.

        Remove 'hasFrontend()' from InspectorController and WorkerInspectorController
        as it's never called.

        No new tests, no behavior changes.

        * inspector/InspectorController.h:
        * inspector/WorkerInspectorController.h:

2013-12-03  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: webViewResized() is not used anywhere in WebInspectorUI
        https://bugs.webkit.org/show_bug.cgi?id=125137

        Reviewed by Darin Adler.

        Remove leftover code.

        No new tests, no behavior changes.

        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorOverlay.cpp:
        * inspector/InspectorOverlay.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:

2013-12-03  László Langó  <lango@inf.u-szeged.hu>

        ASSERTION FAILED: !value || (value->isPrimitiveValue()) in WebCore::StyleProperties::getLayeredShorthandValue.
        https://bugs.webkit.org/show_bug.cgi?id=125146

        Reviewed by Darin Adler.

        Do not presume that |yValue| is primitive if |value| is implicit in StylePropertySerializer.
        An implicit y-value can become explicit if specified as a separate longhand.
        At the same time, its new value can be non-primitive.

        Backported from Blink:
        http://src.chromium.org/viewvc/blink?view=rev&rev=153678

        Test: fast/css/webkit-mask-crash-implicit.html

        * css/StyleProperties.cpp:
        (WebCore::StyleProperties::getLayeredShorthandValue):

2013-12-03  Rob Buis  <rob.buis@samsung.com>

        Fix build break after r160007.

        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend):

2013-12-03  Rob Buis  <rob.buis@samsung.com>

        [css shapes] layout for new ellipse syntax
        https://bugs.webkit.org/show_bug.cgi?id=124621

        Reviewed by Dirk Schulze.

        Implement support for doing layout with the new ellipse shape syntax,
        including basic animation support.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-000.html

        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Convert new ellipse to a layout shape.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Ignore ellipses with values that
            cannot be interpolated.
        (WebCore::BasicShapeEllipse::floatValueForRadiusInBox): Helper function to calculate
            either radiusX or radiusY, shared by clip-path and shape code paths.
        (WebCore::BasicShapeEllipse::path):
        * rendering/style/BasicShapes.h:

2013-12-03  Frédéric Wang  <fred.wang@free.fr>

        Add an MathMLSelectElement class to implement <maction> and <semantics>.
        <https://webkit.org/b/120058>

        Reviewed by Chris Fleizach.

        Tests: mathml/presentation/maction-dynamic.html
               mathml/presentation/maction.html
               mathml/presentation/semantics.html

        This adds a new MathMLSelectElement class to prepare the implementation
        of the <maction> and <semantics> elements, for which only one "selected"
        child is visible. We now simply display the first child of the
        <semantics> element instead of hiding the annotations and this allows to
        handle the use case of SVG-in-MathML as generated by Instiki when
        bug 124128 is fixed ; Gecko's selection algorithm will be implemented
        later (bug 100626). We now also rely on the @actiontype and @selection
        attributes to select the visible <maction> child ; It remains to deal
        with the user interaction (bug 85734).

        * CMakeLists.txt: add the new files.
        * GNUmakefile.list.am: ditto
        * Target.pri: ditto
        * WebCore.vcxproj/WebCore.vcxproj: ditto
        * WebCore.vcxproj/WebCore.vcxproj.filters: ditto
        * WebCore.xcodeproj/project.pbxproj: ditto
        * css/mathml.css: remove the CSS rule for annotation/annotation-xml.
        * mathml/MathMLAllInOne.cpp: add the new cpp file.
        * mathml/MathMLSelectElement.cpp: Added.
        (WebCore::MathMLSelectElement::MathMLSelectElement):
        (WebCore::MathMLSelectElement::create):
        (WebCore::MathMLSelectElement::createRenderer):
        (WebCore::MathMLSelectElement::childShouldCreateRenderer):
        (WebCore::MathMLSelectElement::finishParsingChildren):
        (WebCore::MathMLSelectElement::childrenChanged):
        (WebCore::MathMLSelectElement::attributeChanged):
        (WebCore::MathMLSelectElement::updateSelectedChild): basic implementation for maction, semantics, maction@actiontype and maction@selection.
        * mathml/MathMLSelectElement.h: Added.
        * mathml/mathattrs.in: add actiontype and selection attributes.
        * mathml/mathtags.in: set element classes for maction, semantics, annotation and annotation-xml.

2013-12-03  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Adding missing nix new files to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124987

        Reviewed by Benjamin Poulain.

        No new tests needed.

        * PlatformNix.cmake:
        * platform/nix/ErrorsNix.cpp: Added.
        * platform/nix/ErrorsNix.h: Added.
        * platform/nix/FileSystemNix.cpp: Added.
        * platform/nix/MIMETypeRegistryNix.cpp: Added.
        * platform/nix/SharedTimerNix.cpp: Added.
        * platform/nix/TemporaryLinkStubs.cpp: Added.

2013-12-03  Tamas Gergely  <gertom@inf.u-szeged.hu>

        Correct broken build on efl port with --no-netscape-plugin-api
        configuration.
        https://bugs.webkit.org/show_bug.cgi?id=123997

        Reviewed by Zoltan Herczeg.

        Build failed on efl port with --no-netscape-plugin-api configuration
        as ld did not found some methods. The configuration uses a minimal
        empty implementation of the class, which is now extended with empty
        method implementations.

        * plugins/PluginPackageNone.cpp:
        (WebCore::PluginPackage::createPackage):
          Returns NULL pointer.
        (WebCore::PluginPackage::hash):
          Returns 0.
        (WebCore::PluginPackage::equal):
          Returns true (equals).
        (WebCore::PluginPackage::compare):
          Returns 0 (equals).
        (WebCore::PluginPackage::~PluginPackage):
          Do nothing.

2013-12-02  Andreas Kling  <akling@apple.com>

        Avoid setting style twice for generated image content.
        <https://webkit.org/b/125128>

        Take care of a FIXME I added in r158097 and avoid redundant work in
        ImageContentData::createRenderer().

        I changed the inheritance helper RenderImage::setPseudoStyle() into
        a new createStyleInheritingFromPseudoStyle() function instead so it
        can be used from both PseudoElement and ImageContentData.

        Reviewed by Antti Koivisto.

2013-12-02  Samuel White  <samuel_white@apple.com>

        AX: Add AXUIElementCountForSearchPredicate parameterized attribute.
        https://bugs.webkit.org/show_bug.cgi?id=124561

        Reviewed by Chris Fleizach.

        Added ability to fetch the number of elements that match a specific criteria. This will enable VoiceOver
        to interface with WebKit much more dynamically. We can now get an idea of how many interesting elements
        exist on a page, and then fetch them in chunks as needed.

        Test: platform/mac/accessibility/search-predicate-element-count.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::isAccessibilityTextSearchMatch):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilitySearchCriteria::AccessibilitySearchCriteria):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (accessibilitySearchCriteriaForSearchPredicateParameterizedAttribute):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-12-02  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Layout support for new circle shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124619

        Reviewed by Dirk Schulze.

        Implement support for doing layout with the new circle shape syntax,
        inclduing basic animation support.

        Tests: fast/shapes/shape-outside-floats/shape-outside-floats-circle-000.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-001.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-002.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-003.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-004.html
               fast/shapes/shape-outside-floats/shape-outside-floats-circle-005.html

        * css/BasicShapeFunctions.cpp:
        (WebCore::floatValueForCenterCoordinate): Used by both the CSS Shapes
            layout code and the clip path code.
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Update to use appendLiteral, and remove
            call to reserveCapacity - if we find that it's actually slow when
            doing performance tests, we can hopefully do something smarter and
            less ugly than that.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeRadius): Fix a logic error that caused
            the radius keywords not to work properly.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Convert new circle to a layout shape.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShape::canBlend): Ignore circles with values that
            cannot be interpolated.
        (WebCore::BasicShapeCircle::floatValueForRadiusInBox): Convert circle
            radius keywords to a float value.
        (WebCore::BasicShapeCircle::path):
        (WebCore::BasicShapeCircle::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::canBlend):
        (WebCore::BasicShapeRadius::canBlend):

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto HMAC doesn't check key algorithm's hash
        https://bugs.webkit.org/show_bug.cgi?id=125114

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/hmac-check-algorithm.html

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches): Check it.

2013-12-02  Brady Eidson  <beidson@apple.com>

        Possible crash in ProgressTracker::progressHeartbeatTimerFired(Timer<ProgressTracker>*)
        https://bugs.webkit.org/show_bug.cgi?id=125110

        Reviewed by Darin Adler.

        FrameLoader::loadProgressingStatusChanged() might be called while the Frame has a null FrameView.

        It’s unclear how to reproduce, but there’s no harm in a null check.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadProgressingStatusChanged):

2013-12-02  Brady Eidson  <beidson@apple.com>

        Possible crash in ProgressTracker::progressHeartbeatTimerFired(Timer<ProgressTracker>*)
        https://bugs.webkit.org/show_bug.cgi?id=125110

        Reviewed by Darin Adler.

        It’s possible to have a null m_originatingProgressFrame when the heartbeat timer fires.

        On the surface this seems impossible because the only time m_originatingProgressFrame is cleared
        out the heartbeat timer is also stopped.

        But there’s likely still a race condition in multi-threaded environments.

        There’s no harm in null-checking m_originatingProgressFrame before accessing its loader.

        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressHeartbeatTimerFired):

2013-12-02  Brady Eidson  <beidson@apple.com>

        Add more CachedPage null checks
        https://bugs.webkit.org/show_bug.cgi?id=125106

        Reviewed by Sam Weinig.

        Only some functions in PageCache.cpp null-check the CachedPages in HistoryItems.

        Every part that manipulates the CachedPage should.

        * history/PageCache.cpp:
        (WebCore::PageCache::markPagesForVistedLinkStyleRecalc):
        (WebCore::PageCache::markPagesForFullStyleRecalc):
        (WebCore::PageCache::markPagesForDeviceScaleChanged):
        (WebCore::PageCache::markPagesForCaptionPreferencesChanged):

2013-12-02  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Support inset parsing
        https://bugs.webkit.org/show_bug.cgi?id=124903

        Reviewed by David Hyatt.

        In this patch I added support for inset shape parsing for CSS Shapes. Inset is defined
        by CSS Shapes Level 1 (http://dev.w3.org/csswg/css-shapes-1/#supported-basic-shapes).
        Inset is going to be used by shape-outside (bug #124905), and eventually by shape-inside.

        No new tests, I updated existing tests to cover the changes.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBasicShape): Add support for inset.
        (WebCore::basicShapeForValue): Add support for inset.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildInsetString): Create inset css string.
        (WebCore::CSSBasicShapeInset::cssText): Convert inset shape to a CSS string.
        (WebCore::CSSBasicShapeInset::equals): Compare two inset rectangles.
        (WebCore::CSSBasicShapeInset::serializeResolvingVariables): Create an inset string, with CSS variables resolved.
        (WebCore::CSSBasicShapeInset::hasVariableReference): Determine if this inset has any CSS Variable references.
        * css/CSSBasicShapes.h: Add inset class.
        (WebCore::CSSBasicShapeInset::create):
        (WebCore::CSSBasicShapeInset::top):
        (WebCore::CSSBasicShapeInset::right):
        (WebCore::CSSBasicShapeInset::bottom):
        (WebCore::CSSBasicShapeInset::left):
        (WebCore::CSSBasicShapeInset::topLeftRadius):
        (WebCore::CSSBasicShapeInset::topRightRadius):
        (WebCore::CSSBasicShapeInset::bottomRightRadius):
        (WebCore::CSSBasicShapeInset::bottomLeftRadius):
        (WebCore::CSSBasicShapeInset::setTop):
        (WebCore::CSSBasicShapeInset::setRight):
        (WebCore::CSSBasicShapeInset::setBottom):
        (WebCore::CSSBasicShapeInset::setLeft):
        (WebCore::CSSBasicShapeInset::setTopLeftRadius):
        (WebCore::CSSBasicShapeInset::setTopRightRadius):
        (WebCore::CSSBasicShapeInset::setBottomRightRadius):
        (WebCore::CSSBasicShapeInset::setBottomLeftRadius):
        (WebCore::CSSBasicShapeInset::CSSBasicShapeInset):
        * css/CSSParser.cpp:
        (WebCore::completeBorderRadii): Move static function before parseInsetBorderRadius.
        (WebCore::CSSParser::parseInsetRoundedCorners): I added this helper function for parsing the rounded corners
        (WebCore::CSSParser::parseBasicShapeInset): Parse inset.
        (WebCore::CSSParser::parseBasicShape): Add call to parse inset.
        * css/CSSParser.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Add constructor for LengthSize.
        (WebCore::CSSPrimitiveValue::init): Initialize LengthSize.
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::create): Add support for creating PrimitiveValue from LengthSize.
        * css/CSSValuePool.h:
        (WebCore::CSSValuePool::createValue): Add support for LengthSize.
        * platform/LengthSize.h:
        (WebCore::LengthSize::blend): Add blend for LengthSize.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Keep inset disabled for shape-inside now.
        * rendering/style/BasicShapes.cpp:
        (WebCore::BasicShapeInset::path): Calculate path for an inset.
        (WebCore::BasicShapeInset::blend): Blend two insets.
        * rendering/style/BasicShapes.h: Add higher level inset.
        (WebCore::BasicShapeInset::create):
        (WebCore::BasicShapeInset::top):
        (WebCore::BasicShapeInset::right):
        (WebCore::BasicShapeInset::bottom):
        (WebCore::BasicShapeInset::left):
        (WebCore::BasicShapeInset::topLeftRadius):
        (WebCore::BasicShapeInset::topRightRadius):
        (WebCore::BasicShapeInset::bottomRightRadius):
        (WebCore::BasicShapeInset::bottomLeftRadius):
        (WebCore::BasicShapeInset::setTop):
        (WebCore::BasicShapeInset::setRight):
        (WebCore::BasicShapeInset::setBottom):
        (WebCore::BasicShapeInset::setLeft):
        (WebCore::BasicShapeInset::setTopLeftRadius):
        (WebCore::BasicShapeInset::setTopRightRadius):
        (WebCore::BasicShapeInset::setBottomRightRadius):
        (WebCore::BasicShapeInset::setBottomLeftRadius):
        (WebCore::BasicShapeInset::BasicShapeInset):

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Support WebCrypto AES-KW
        https://bugs.webkit.org/show_bug.cgi?id=125105

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/aes-kw-key-manipulation.html
               crypto/subtle/aes-kw-wrap-unwrap-aes.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithmIdentifier.h: (WebCore::CryptoAlgorithmIdentifier): Added AES-KW.
        It's not standardized yet, but there appears to be a consensus that it will be specified.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        Added AES-KW cases everywhere.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        Support importing/exporting AES-KW keys in JWK.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey):
        Added some accidentally forgotten std::moves.

        * crypto/algorithms/CryptoAlgorithmAES_KW.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmAES_KW.h: Added.
        * crypto/mac/CryptoAlgorithmAES_KWMac.cpp: Added.

        * crypto/keys/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::CryptoKeyAES): Allow AES-KW
        as valid algorithm for AES keys.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register AES-KW.

2013-12-02  Beth Dakin  <bdakin@apple.com>

        Add a setting to opt into a mode where the background extends and fixed elements 
        don't move on rubber-band
        https://bugs.webkit.org/show_bug.cgi?id=124745

        Reviewed by Tim Horton.

        New setting backgroundShouldExtendBeyondPage() will cause the tile cache to have a 
        margin, and it will also cause fixed elements and backgrounds to stick to the 
        viewport on scroll instead of sticking to the document. 

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollBehaviorForFixedElements):
        * page/Settings.in:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::RenderLayerBacking):

2013-12-02  Roger Zanoni  <rogerzanoni@gmail.com>

        [MediaStream] Use iterator-based loops instead of index-based loops
        https://bugs.webkit.org/show_bug.cgi?id=125021

        Reviewed by Eric Carlson.

        Also, changing iterator variable names from iter to it and
        initializing an 'end' variable in each loop instead of evaluating
        'collection.end()' multiple times.

        No new tests, covered by existing ones.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::cloneMediaStreamTrackVector):
        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::trackDidEnd):
        (WebCore::MediaStream::scheduledEventTimerFired):

2013-12-02  Rob Buis  <rob.buis@samsung.com>

        [css shapes] Parse new ellipse shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124620

        Reviewed by Dirk Schulze.

        Implement parsing of the new ellipse shape syntax. This closely follows the patch
        for the new circle syntax (https://bugs.webkit.org/show_bug.cgi?id=124618), with
        some refactoring of functionality shared by both.

        Updated existing parsing tests to cover this.

        * css/BasicShapeFunctions.cpp:
        (WebCore::BasicShapeRadiusToCSSValue):
        (WebCore::valueForBasicShape):
        (WebCore::CSSValueToBasicShapeRadius):
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.cpp:
        (WebCore::buildEllipseString):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::buildDeprecatedEllipseString):
        (WebCore::CSSDeprecatedBasicShapeEllipse::cssText):
        (WebCore::CSSDeprecatedBasicShapeEllipse::equals):
        * css/CSSBasicShapes.h:
        (WebCore::CSSDeprecatedBasicShapeEllipse::create):
        (WebCore::CSSDeprecatedBasicShapeEllipse::centerX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::centerY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::radiusX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::radiusY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setCenterX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setCenterY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setRadiusX):
        (WebCore::CSSDeprecatedBasicShapeEllipse::setRadiusY):
        (WebCore::CSSDeprecatedBasicShapeEllipse::CSSDeprecatedBasicShapeEllipse):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseBasicShapeEllipse):
        (WebCore::CSSParser::parseDeprecatedBasicShapeEllipse):
        (WebCore::CSSParser::parseBasicShape):
        * css/CSSParser.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/style/BasicShapes.cpp:
        (WebCore::DeprecatedBasicShapeEllipse::path):
        (WebCore::DeprecatedBasicShapeEllipse::blend):
        (WebCore::BasicShapeEllipse::path):
        (WebCore::BasicShapeEllipse::blend):
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeEllipse::centerX):
        (WebCore::BasicShapeEllipse::centerY):
        (WebCore::BasicShapeEllipse::radiusX):
        (WebCore::BasicShapeEllipse::radiusY):
        (WebCore::BasicShapeEllipse::setCenterX):
        (WebCore::BasicShapeEllipse::setCenterY):
        (WebCore::BasicShapeEllipse::setRadiusX):
        (WebCore::BasicShapeEllipse::setRadiusY):
        (WebCore::BasicShapeEllipse::BasicShapeEllipse):
        (WebCore::DeprecatedBasicShapeEllipse::create):
        (WebCore::DeprecatedBasicShapeEllipse::DeprecatedBasicShapeEllipse):

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Build fix.

        * crypto/CommonCryptoUtilities.h:
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoKeyRSAMac.cpp:

2013-12-02  Brendan Long  <b.long@cablelabs.com>

        Use GenericEventQueue in TrackListBase and reduce code duplication with scheduleTrackEvent()
        https://bugs.webkit.org/show_bug.cgi?id=124811

        Reviewed by Eric Carlson.

        No new tests because this is just refactoring.

        * html/track/TrackListBase.cpp:
        (TrackListBase::TrackListBase): Replace event code with a GenericEventQueue.
        (TrackListBase::scheduleTrackEvent): Factor out duplicate code in schedule{Add,Remove}TrackEvent functions.
        (TrackListBase::scheduleAddTrackEvent): Same.
        (TrackListBase::scheduleRemoveTrackEvent): Same.
        (TrackListBase::scheduleChangeEvent): Use GenericEventQueue.
        * html/track/TrackListBase.h: Replace event code with GenericEventQueue.

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Build fix.

        * WebCore.xcodeproj/project.pbxproj: Fix an automatic merge failure by re-adding
        CryptoAlgorithmRsaOaepParams.h.

2013-12-02  Victor Jaquez  <vjaquez@igalia.com>

        [Gstreamer] update webkitvideosink metadata
        https://bugs.webkit.org/show_bug.cgi?id=125082

        Reviewed by Philippe Normand.

        No new tests, no behavior changes.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkit_video_sink_class_init):

2013-12-02  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        Simplify MediaPlayerPrivateGStreamerBase::createVideoSink()
        https://bugs.webkit.org/show_bug.cgi?id=125077

        Remove the method's unused parameter.
        Remove the GStreamer 0.10.22 run-time validation, since we are using
        GStreamer 1.0 officially.
        Remove the creation of a spurious Bin for the video sink, since
        either the fpssink or the webkitsink are valid sink elements.
        Change fpsink to a GRefPtr.

        Now, createVideoSink() returns a simple pointer to the created sink
        element.

        Reviewed by Philippe Normand.

        No new tests, no behavior changes.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        (WebCore::MediaPlayerPrivateGStreamerBase::decodedFrameCount):
        (WebCore::MediaPlayerPrivateGStreamerBase::droppedFrameCount):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:

2013-12-02  Alexey Proskuryakov  <ap@apple.com>

        Add support for WebCrypto RSA-OAEP
        https://bugs.webkit.org/show_bug.cgi?id=125084

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsa-oaep-key-manipulation.html
               crypto/subtle/rsa-oaep-plaintext-length.html
               crypto/subtle/rsa-oaep-wrap-unwrap-aes.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaOaepParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        Added RSA-OAEP parameters.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        Support RSA-OAEP in JWK. It is more limited than general WebCrypto, as JWK only
        allows SHA-1 as hash.

        * crypto/CommonCryptoUtilities.cpp: Added. (WebCore::getCommonCryptoDigestAlgorithm):
        * crypto/CommonCryptoUtilities.h: Added.
        Extracted some shared code and forward declarations for CommonCrypto.

        * crypto/CryptoAlgorithmParameters.h: (WebCore::CryptoAlgorithmParameters::Class):
        * crypto/parameters/CryptoAlgorithmRsaOaepParams.h: Added.
        Added RsaOaepParams.

        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSA_OAEP.h: Added.
        * crypto/mac/CryptoAlgorithmRSA_OAEPMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::getCommonCryptoHMACAlgorithm):
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        * crypto/mac/CryptoKeyMac.cpp:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        Use CommonCryptoUtilities.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register RSA-OAEP.

2013-12-02  Andres Gomez  <agomez@igalia.com>

        [GTK] Fails to build with freetype 2.5.1
        https://bugs.webkit.org/show_bug.cgi?id=125074

        Reviewed by Carlos Garcia Campos.

        FreeType specifies a canonical way of including their own
        headers. Now, we are following this recommendation so the
        compilation won't be broken again due to an upgrade in FeeType's
        including paths.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:

2013-12-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Crash at WebCore::commonTreeScope
        https://bugs.webkit.org/show_bug.cgi?id=125042

        Reviewed by Mario Sanchez Prada.

        When an AX text marker that references a node in a detached document is used to create a text marker range, a crash occurs
        because the method to determine commonTreeScopes does not account for when there are no common tree scopes.

        Test: platform/mac/accessibility/ordered-textmarker-crash.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForUnorderedPositions):
        * dom/TreeScope.cpp:
        (WebCore::commonTreeScope):

2013-12-02  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Fix a crash in the webaudio source provider when the audio track is going away.
        https://bugs.webkit.org/show_bug.cgi?id=124975

        Reviewed by Philippe Normand.

        Merged https://chromium.googlesource.com/chromium/blink/+/b21838b32bf11b1a972dfc449ddde71115490c23

        Before this patch, it was hitting a use-after-free crash  when the audio
        track in the media stream is going away and the webaudio mediastreamsourcenode
        is still running.

        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource): Passing audio track
        pointer to MediaStreamAudioSourceNode constructor.
        * Modules/webaudio/MediaStreamAudioSourceNode.cpp:
        (WebCore::MediaStreamAudioSourceNode::create):
        (WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode):
        * Modules/webaudio/MediaStreamAudioSourceNode.h: Added
        MediaStreamTrack class variable and change the constructor to receive
        it as parameter.

2013-12-02  Andrzej Badowski  <a.badowski@samsung.com>

        [ATK] Support active state for listbox elements.
        https://bugs.webkit.org/show_bug.cgi?id=125009

        Reviewed by Chris Fleizach.

        Added support for ATK_STATE_ACTIVE for listbox elements.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):

2013-12-02  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove unused functions from InspectorAgent
        https://bugs.webkit.org/show_bug.cgi?id=125061

        Reviewed by Antoine Quint.

        Get rid of unused functions, redundant inclusion and forward declaration.

        No new tests, no behavior changes.

        * inspector/InspectorAgent.cpp:
        * inspector/InspectorAgent.h:

2013-12-02  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Fix build warning in EventHandler.cpp
        https://bugs.webkit.org/show_bug.cgi?id=125010

        Reviewed by Csaba Osztrogonác.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::eventInvertsTabsToLinksClientCallResult):

2013-12-02  Attila Dusnoki  <adusnoki@inf.u-szeged.hu>

        HTML5 required attribute validation messages implemented.
        https://bugs.webkit.org/show_bug.cgi?id=125003

        Reviewed by Gyuyoung Kim.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::validationMessagePatternMismatchText):
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        (WebCore::validationMessageBadInputForNumberText):

2013-12-01  Andreas Kling  <akling@apple.com>

        SVG: Intersection/enclosure checks should use RenderElement.
        <https://webkit.org/b/125058>

        Make RenderSVGModelObject's checkIntersection() and checkEnclosure()
        take RenderElement* instead of RenderObject*. They are only ever
        called with SVGElement's renderers.

        Reviewed by Sam Weinig.

2013-12-01  Andreas Kling  <akling@apple.com>

        Remove unreachable labels for -webkit-margin-*-collapse properties.
        <https://webkit.org/b/125057>

        The following properties are implemented in DeprecatedStyleBuilder
        and should not have case labels in the applyProperty() switch:

            -webkit-margin-before-collapse
            -webkit-margin-top-collapse
            -webkit-margin-after-collapse
            -webkit-margin-bottom-collapse

        This seems counter-intuitive, but they are actually *not* like other
        directional properties. In this case, before/after are only aliases
        for top/bottom, and do not depend on writing-mode or text-direction.
        See also r68561, where the aliases were originally added.

        Reviewed by Anders Carlsson.

2013-12-01  Andreas Kling  <akling@apple.com>

        CSSFunctionValue constructors should return PassRef.
        <https://webkit.org/b/125054>

        Make CSSFunctionValue::create() helpers return PassRef instead of
        PassRefPtr since they will never return null.

        Reviewed by Anders Carlsson.

2013-12-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159764.
        http://trac.webkit.org/changeset/159764
        https://bugs.webkit.org/show_bug.cgi?id=125055

        appears to hurt html5-full-render times (Requested by kling on
        #webkit).

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/parser/HTMLConstructionSite.h:

2013-12-01  Andreas Kling  <akling@apple.com>

        Make more computed style helpers return PassRef.
        <https://webkit.org/b/125043>

        Reduce branchiness in computed style code by making more of the
        file-local helpers return PassRef instead of PassRefPtr.

        Reviewed by Anders Carlsson.

2013-11-30  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Implement scrollbarThickness for opaque scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=125034

        Reviewed by Gyuyoung Kim.

        Implemented scrollbarThickness to support opaque scrollbar.
        Now, edj can decide whether to support opaque scrollbar by adding scrollbar.thickness.
        In addition, added OVERRIDE/FINAL keyword and removed unnecessary destructor
        in ScrollbarThemeEfl.cpp.

        No new tests, no behavior changes with default theme.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::loadTheme):
        Update thickness of scrollbar when theme was loaded.
        * platform/efl/ScrollbarThemeEfl.cpp:
        * platform/efl/ScrollbarThemeEfl.h:
        (WebCore::ScrollbarThemeEfl::setScrollbarThickness):
        (WebCore::ScrollbarThemeEfl::scrollbarThickness):
        (WebCore::ScrollbarThemeEfl::registerScrollbar):
        (WebCore::ScrollbarThemeEfl::unregisterScrollbar):

2013-11-29  Tamas Gergely  <tgergely.u-szeged@partner.samsung.com>

        Remove Symbian specific code.
        https://bugs.webkit.org/show_bug.cgi?id=124939

        Reviewed by Zoltan Herczeg.

        Symbian is not supported, remove leftover code.

        * plugins/npapi.h:

2013-11-28  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Rename InlineIterator::m_obj and make it private
        https://bugs.webkit.org/show_bug.cgi?id=124837

        Reviewed by Antti Koivisto.

        InlineIterator has been exported m_obj as public though there is a getter function.
        Besides *object* name isn't ambigious. So, changed it with m_renderer and renderer().
        Additionally, setRenderer() is added as well.

        No new tests, no behavior changes.

        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::setObject):
        (WebCore::operator==):
        (WebCore::operator!=):
        (WebCore::InlineBidiResolver::appendRun):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::appendRunsForObject):
        (WebCore::constructBidiRunsForLine):
        (WebCore::RenderBlockFlow::createLineBoxesFromBidiRuns):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::matchedEndLine):
        * rendering/line/BreakingContextInlineHeaders.h:
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::BreakingContext::handleText):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineInlineHeaders.h:
        (WebCore::skipNonBreakingSpace):
        (WebCore::requiresLineBox):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Rename StylePropertySet to StyleProperties
        https://bugs.webkit.org/show_bug.cgi?id=124990
        
        Reviewed by Andreas Kling.

        "Set" does not add useful information here. Use less clunky plural name.

2013-11-28  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Nix Upstream: Adding EditorNix to WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124984

        Reviewed by Csaba Osztrogonác.

        No new tests needed.

        * PlatformNix.cmake:
        * editing/nix/EditorNix.cpp: Added.

2013-11-28  Zoltan Horvath  <zoltan@webkit.org>

        [Win] Update vcxproj.filters, since LineInfo.h and LineLayoutState.h have been moved to rendering/line
        https://bugs.webkit.org/show_bug.cgi?id=124959

        Reviewed by Brent Fulgham.

        Update WebCore.vcxproj.filters, since LineInfo.h (r155628) and LineLayoutState.h (158121) have been moved to rendering/line.

        No new tests, no behavior change.

        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-11-28  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        RenderTableSection Blink merge asserting
        https://bugs.webkit.org/show_bug.cgi?id=124857

        Reviewed by Csaba Osztrogonác.

        Use border spacing at the end of all sections.

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-11-28  Antti Koivisto  <antti@apple.com>

        Remove feature: CSS variables
        https://bugs.webkit.org/show_bug.cgi?id=114119

        Reviewed by Andreas Kling.
        
        The feature is unmaintained and it is getting in the way of refactoring. Code quality is not up to
        WebKit standards either.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSBasicShapes.cpp:
        * css/CSSBasicShapes.h:
        * css/CSSCalculationValue.cpp:
        (WebCore::unitCategory):
        (WebCore::hasDoubleValue):
        (WebCore::CSSCalcPrimitiveValue::toCalcValue):
        (WebCore::CSSCalcPrimitiveValue::computeLengthPx):
        (WebCore::determineCategory):
        (WebCore::CSSCalcBinaryOperation::primitiveType):
        * css/CSSCalculationValue.h:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParserContext::CSSParserContext):
        (WebCore::operator==):
        (WebCore::filterProperties):
        (WebCore::CSSParser::createStylePropertySet):
        (WebCore::CSSParser::addProperty):
        (WebCore::CSSParser::validCalculationUnit):
        (WebCore::CSSParser::validUnit):
        (WebCore::CSSParser::createPrimitiveNumericValue):
        (WebCore::CSSParser::parseValidPrimitive):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseReflect):
        (WebCore::CSSParser::detectDashToken):
        (WebCore::CSSParser::realLex):
        * css/CSSParser.h:
        * css/CSSParserMode.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        * css/CSSPrimitiveValue.cpp:
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::primitiveType):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::convertToLength):
        * css/CSSProperty.cpp:
        * css/CSSProperty.h:
        (WebCore::CSSProperty::CSSProperty):
        * css/CSSReflectValue.cpp:
        * css/CSSReflectValue.h:
        * css/CSSValue.cpp:
        (WebCore::CSSValue::equals):
        (WebCore::CSSValue::cssText):
        (WebCore::CSSValue::destroy):
        * css/CSSValue.h:
        (WebCore::CSSValue::setCssText):
        * css/CSSValueList.cpp:
        * css/CSSValueList.h:
        * css/CSSVariableValue.h: Removed.
        * css/Pair.h:
        * css/Rect.h:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::asText):
        (WebCore::StylePropertySet::PropertyReference::cssName):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleForPage):
        (WebCore::StyleResolver::applyProperties):
        (WebCore::StyleResolver::applyMatchedProperties):
        (WebCore::StyleResolver::applyProperty):
        * css/StyleResolver.h:
        * css/WebKitCSSTransformValue.cpp:
        * css/WebKitCSSTransformValue.h:
        (WebCore::WebKitCSSTransformValue::equals):
        * css/makeprop.pl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleVariableData.h: Removed.
        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup):
        (WebCore::InternalSettings::Backup::restoreTo):
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2013-11-28  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Updating RTCPeerConnectionHandlerMock after r159769
        https://bugs.webkit.org/show_bug.cgi?id=124947

        Reviewed by Philippe Normand.

        Adding its create function back, in order to run RTCPeerConnection LayoutTests.

        No new tests needed.

        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::create):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Support custom types for drag and drop data
        https://bugs.webkit.org/show_bug.cgi?id=124659

        Reviewed by Martin Robinson.

        Covered by fast/events/drag-customData.html.

        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::unknownTypes): returns a hash map with all custom types set.
        (WebCore::DataObjectGtk::clearAllExceptFilenames): clear custom types.
        * platform/gtk/DataObjectGtk.h:
        (WebCore::DataObjectGtk::hasUnknownTypeData): returns whether custom types are set.
        (WebCore::DataObjectGtk::unknownTypeData): returns the data for a custom type.
        (WebCore::DataObjectGtk::setUnknownTypeData): sets the data for a custom type.
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeString): handle unknown types as custom.
        (WebCore::Pasteboard::writePasteboard): ditto.
        (WebCore::Pasteboard::hasData): also check for custom types.
        (WebCore::Pasteboard::types): also obtain the list of custom types.
        (WebCore::Pasteboard::readString): handle unknown types as custom.
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::initGdkAtoms): new unknown atom.
        (WebCore::PasteboardHelper::PasteboardHelper): add custom type to the list of targets.
        (WebCore::PasteboardHelper::fillSelectionData): turns any custom types' data into a GVariant, which
        is in turn serialized to a single string for GtkSelectionData to hold.
        (WebCore::PasteboardHelper::targetListForDataObject): add custom data to the target list if any is
        set.
        (WebCore::PasteboardHelper::fillDataObjectFromDropData): retrieve the custom types and their data
        from the serialized GVariant string held by GtkSelectionData.
        (WebCore::PasteboardHelper::dropAtomsForContext): handle custom types.

2013-11-27  Eric Carlson  <eric.carlson@apple.com>

        Allow the QuickTime plug-in to be replaced by script in an isolated word
        https://bugs.webkit.org/show_bug.cgi?id=124900

        Reviewed by Dean Jackson.

        Test: plugins/quicktime-plugin-replacement.html

        * CMakeLists.txt: Add new Modules path.
        * DerivedSources.make: Add new files.
        * GNUmakefile.am: Add new Modules path.
        * GNUmakefile.list.am: Add new header.
        * WebCore.vcxproj/WebCore.vcxproj: Add new header.
        * WebCore.vcxproj/WebCoreCommon.props: Add new Modules path.
        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * Modules/plugins: Added.
        * Modules/plugins/PluginReplacement.h: Added. Defines the interface for a plug-in replacement.

        Create a replacement for the QuickTime plug-in.
        * Modules/plugins/QuickTimePluginReplacement.cpp: Added.
        * Modules/plugins/QuickTimePluginReplacement.css: Added.
        * Modules/plugins/QuickTimePluginReplacement.h: Added.
        * Modules/plugins/QuickTimePluginReplacement.idl: Added.
        * Modules/plugins/QuickTimePluginReplacement.js: Added.

        Allow plug-in replacement to be enabled at runtime.
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setPluginReplacementEnabled):
        (WebCore::RuntimeEnabledFeatures::pluginReplacementEnabled):

        * bindings/js/JSDOMBinding.h:
        (WebCore::toJS): Add toJS(... const String& ...).

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObject): Give a plug-in replacement a first shot at defining the
            script interface.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget): Call base class requestObject.

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fileSize): New, passthrough to media engine.
        * html/HTMLMediaElement.h:

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget): Call base class requestObject.

        Moved some logic that was previously used only for creating a plug-in snapshot to the base
        class so it can be shared by a plug-in replacement.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): Initialize timer used to swap renderers.
        (WebCore::HTMLPlugInElement::createRenderer): Allow plug-in replacement to create the renderer.
        (WebCore::HTMLPlugInElement::swapRendererTimerFired): Create a shadow root.
        (WebCore::HTMLPlugInElement::setDisplayState): Set the new state, prime the swap renderer 
            timer if necessary.
        (WebCore::HTMLPlugInElement::didAddUserAgentShadowRoot): Tell the plug-in replacement to
            install itself in the new shadow DOM.
        (WebCore::registeredPluginReplacements): Return vector of all registered plug-in replacements.
        (WebCore::registerPluginReplacement): Add a plug-in replacement.
        (WebCore::pluginReplacementForType): Find a plug-in replacement for a MIME type.
        (WebCore::HTMLPlugInElement::requestObject): If there is a plug-in replacement for the MIME type,
            create it and set the display state.
        (WebCore::HTMLPlugInElement::scriptObjectForPluginReplacement): Return the script object for 
            the current plug-in replacement, if any.
        * html/HTMLPlugInElement.h:

        Move some plug-in snapshot code into the base class.
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement): No need to initialize timer.
        (WebCore::HTMLPlugInImageElement::setDisplayState): Call base class.
        (WebCore::HTMLPlugInImageElement::createRenderer): Ditto.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot): Ditto.
        (WebCore::HTMLPlugInImageElement::userDidClickSnapshot): Remove unnecessary class name.
        (WebCore::HTMLPlugInImageElement::requestObject): New.
        * html/HTMLPlugInImageElement.h:

        * html/HTMLVideoElement.h: Make createRenderer public so the QuickTime plug-in replacement can
            call it.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::fileSize): New.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::extraMemoryCost): totalBytes returns an unsigned long long.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::fileSize):

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::totalBytes): Return an unsigned long long.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes): Ditto.

        * testing/InternalSettings.cpp:
        (WebCore::InternalSettings::Backup::Backup): Backup the plug-in replacement runtime setting.
        (WebCore::InternalSettings::Backup::restoreTo): Restore it.
        (WebCore::InternalSettings::setPluginReplacementEnabled): Set it.
        * testing/InternalSettings.h:
        * testing/InternalSettings.idl:

2013-11-27  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding MediaConstraintsMock class
        https://bugs.webkit.org/show_bug.cgi?id=124902

        Reviewed by Eric Carlson.

        Validate constraints used in RTCPeerConnection LayoutTests

        Existing test was updated.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * platform/mock/MediaConstraintsMock.cpp: Added.
        * platform/mock/MediaConstraintsMock.h: Added.
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::validateRequestConstraints): Now using MediaConstraintsMock
        (WebCore::MockMediaStreamCenter::createMediaStream): Ditto.
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::initialize): Ditto.

2013-11-27  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Shape-Inside Should Default to 'auto'
        https://bugs.webkit.org/show_bug.cgi?id=124851

        Reviewed by Alexandru Chiculita.

        The current shape-inside specification has the property default to the 'auto'
        value, not 'outside-shape'.

        Updated tests are under fast/shapes.

        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:

2013-11-27  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] shape-inside rectangle layout can fail
        https://bugs.webkit.org/show_bug.cgi?id=124784

        Reviewed by Andreas Kling.

        Apply LayoutUnit::fromFloatCeil() consistently in RectangleShape::firstIncludedIntervalLogicalTop().

        Test: fast/shapes/shape-inside/shape-inside-subpixel-rectangle-top.html

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):

2013-11-27  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove Qt-specific .qrc files
        https://bugs.webkit.org/show_bug.cgi?id=124944

        Reviewed by Andreas Kling.

        No new tests needed.

        * WebCore.qrc: Removed.

2013-11-27  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Invalid command line error when visiting www.chessbase.com
        https://bugs.webkit.org/show_bug.cgi?id=124715

        Reviewed by Philippe Normand.

        We were not handling the HTTP errors in the WebKit GStreamer
        source and therefore the 404 error page was being 'decoded'. As no
        decoder could be found (for obvious reasons), playback failed, but
        it should be failing for the source not being found instead of the
        decoding problem.

        Test: http/tests/media/video-error-does-not-exist.html

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Handle HTTP errors in
        the source and raise a GStreamer error to the pipeline.

2013-11-14  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix positioning of grid items with margins
        https://bugs.webkit.org/show_bug.cgi?id=124345

        Reviewed by David Hyatt.

        From Blink r157925 and r158041 by <jchaffraix@chromium.org>

        Test: fast/css-grid-layout/grid-item-margin-resolution.html

        Adds margin start/before to the positions of grid items (removing
        several FIXME's in the current code). This means calling
        findChildLogicalPosition() after the layout in order to have the
        right values for the margins.

        In order to match flexbox and author's intents we're also
        including the margins of grid items in the intrinsic size of the
        grid. That's why flexbox's marginLogicalPositionForChild() is
        moved up to RenderBlock in order to share it with RenderGrid.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::marginIntrinsicLogicalWidthForChild): Moved
        from RenderFlexibleBox::marginLogicalWidthForChild().
        * rendering/RenderBlock.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computeIntrinsicLogicalWidths):
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computePreferredTrackWidth):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::findChildLogicalPosition):

2013-11-26  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Support grid-definition-{rows|columns} repeat() syntax
        https://bugs.webkit.org/show_bug.cgi?id=103312

        Reviewed by Andreas Kling.

        Added support for the repeat() syntax inside
        grid-definition-{rows|columns} by just adding the repeated values
        to our list of column|row definitions.

        The parsing of <track-name> was refactored in a new function as
        it's used now in three different places. The <track-size> parsing
        was also refactored to share it with the repeat() parsing.

        Test: fast/css-grid-layout/grid-element-repeat-get-set.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridTrackNames):
        (WebCore::CSSParser::parseGridTrackList):
        (WebCore::CSSParser::parseGridTrackRepeatFunction):
        (WebCore::CSSParser::parseGridTrackSize):
        * css/CSSParser.h:

2013-11-26  Marcelo Lira  <marcelo.lira@openbossa.org>

        Nix upstreaming - Adding build files and supporting scripts
        https://bugs.webkit.org/show_bug.cgi?id=118367

        Reviewed by Ryosuke Niwa.

        No new tests needed.

        * CMakeLists.txt:
        * PlatformNix.cmake: Added.

2013-11-26  Tim Horton  <timothy_horton@apple.com>

        Don't parent the TileController root layer in two places
        https://bugs.webkit.org/show_bug.cgi?id=124873

        Reviewed by Brent Fulgham.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        The TileController's layer is already parented by callers of
        TileController::create, and in a special way. TileController
        shouldn't parent itself, anyway...

2013-11-26  Nick Diego Yamane  <nick.yamane@openbossa.org>

        [MediaStream API] HTMLMediaElement should be able to use MediaStream as source
        https://bugs.webkit.org/show_bug.cgi?id=121943

        Reviewed by Eric Carlson.

        Implement MediaStream direct assignment to Media Elements using the new 'srcObject'
        attribute: http://www.w3.org/TR/mediacapture-streams/#direct-assignment-to-media-elements

        Test: fast/mediastream/MediaStream-MediaElement-srcObject.html

        * CMakeLists.txt: Added new HTMLMediaElementMediaStream.h and .cpp to cmake build.
        * DerivedSources.make: Added HTMLMediaElementMediaStream.idl.
        * GNUmakefile.list.am: Added new HTMLMediaElementMediaStream* to autotools build.
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * Modules/mediastream/HTMLMediaElementMediaStream.cpp: Added.
        (WebCore::HTMLMediaElementMediaStream::srcObject): implements srcObject getter.
        (WebCore::HTMLMediaElementMediaStream::setSrcObject): implements srcObject setter.
        * Modules/mediastream/HTMLMediaElementMediaStream.h: Added.
        * Modules/mediastream/HTMLMediaElementMediaStream.idl: Added.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setSrcObject): This is an initial implementation, and
        is still incomplete, that will be addressed in a separate bug: https://webkit.org/b/124896
        * html/HTMLMediaElement.h: Added m_mediaStreamSrcObject class variable
        and its corresponding getter.

2013-11-26  Andreas Kling  <akling@apple.com>

        Use child iterator to find operators in RenderMathMLRow::layout().
        <https://webkit.org/b/124108>

        Replace manual children walk with childrenOfType<RenderMathMLBlock>.
        Minor update to fix build.

        Reviewed by Martin Robinson.

2013-11-26  Andreas Kling  <akling@apple.com>

        RenderObject: Inline isBody() and isHR().
        <https://webkit.org/b/124901>

        Together these account for ~0.3% of samples on HTML5-8266.
        Almost all of it is call overhead.

        Reviewed by Anders Carlsson.

2013-11-26  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Layout using [<box> || <shape>] value
        https://bugs.webkit.org/show_bug.cgi?id=124428

        Reviewed by David Hyatt.

        When a box value is supplied, use it to size and position the shape. Otherwise,
        use a default value (content-box for shape-inside, margin-box for shape-outside).
        This patch extends the sizing and positioning code used for the box patch (Bug 124227)
        to also apply to shapes. With this patch, we also no longer use the box-sizing
        property to size and position shapes.

        Tests: fast/shapes/shape-outside-floats/shape-outside-shape-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-shape-boxes-002.html
               fast/shapes/shape-outside-floats/shape-outside-shape-boxes-003.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Adjust for ShapeValues storing
        BasicShape::ReferenceBox as their box value, rather than a CSSValueID.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Ditto.
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize): Adjust for BasicShapes with reference boxes
        as well as plain box values. Also, remove old box-sizing code.
        (WebCore::ShapeInfo::logicalTopOffset): Ditto.
        (WebCore::ShapeInfo::logicalLeftOffset): Ditto.
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.h:
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createBoxValue): Adjust for boxes being stored as
        BasicShape::ReferenceBoxes.
        (WebCore::ShapeValue::box): Ditto.
        (WebCore::ShapeValue::ShapeValue): Ditto.

2013-11-26  Brian J. Burg  <burg@cs.washington.edu>

        ImageBuffer::create should return a std::unique_ptr instead of OwnPtr.
        https://bugs.webkit.org/show_bug.cgi?id=124822

        Reviewed by Andreas Kling.

        Replace all uses of OwnPtr<ImageBuffer> and PassOwnPtr<ImageBuffer> with
        std::unique_ptr<ImageBuffer>. Replace calls to OwnPtr::clear() and
        OwnPtr::release() with reset() and std::move(). Remove unnecessary includes.

        No new tests. This is a mechanical refactoring.

        * css/CSSFilterImageValue.cpp:
        (WebCore::CSSFilterImageValue::image):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::setSurfaceSize):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createCompositingBuffer):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedDrawImage):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedFill):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache):
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::imageBuffer):
        * html/canvas/WebGLRenderingContext.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::createTextTrackRepresentationImage):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::drawPattern):
        * platform/graphics/GradientImage.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::createCompatibleBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::createCompatibleBuffer):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        * platform/graphics/ShadowBlur.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::putByteArray):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::platformApplySoftware):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::setSourceImage):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::clearResult):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/texmap/TextureMapper.cpp:
        (WebCore::BitmapTexture::updateContents):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape):
        * rendering/svg/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::invalidateBufferedForeground):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceGradient.cpp: Remove method parameter wrapping/indentation.
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/svg/RenderSVGResourceMasker.h:
        * rendering/svg/RenderSVGResourcePattern.cpp: Remove method parameter wrapping/indentation.
        (WebCore::RenderSVGResourcePattern::buildPattern):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/svg/RenderSVGResourcePattern.h: Remove method parameter wrapping/indentation.
        * rendering/svg/SVGRenderingContext.cpp:
        (WebCore::SVGRenderingContext::createImageBuffer):
        (WebCore::SVGRenderingContext::createImageBufferForPattern):
        (WebCore::SVGRenderingContext::clipToImageBuffer):
        (WebCore::SVGRenderingContext::bufferForeground):
        * rendering/svg/SVGRenderingContext.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::drawPatternForContainer):

2013-11-26  Eric Carlson  <eric.carlson@apple.com>

        video.currentSrc should return empty when no resource is loaded
        https://bugs.webkit.org/show_bug.cgi?id=124898

        Reviewed by Dan Bernstein.

        Test: media/video-currentsrc-cleared.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Set m_currentSrc to empty in 
            preparation for attempting to load a new url.

2013-11-26  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Support for shape-margin in BoxShape
        https://bugs.webkit.org/show_bug.cgi?id=124788

        Reviewed by Andreas Kling.

        Corrected BoxShape's internal shape-margin/padding bounds FloatRoundedRect
        initialization. Tests for the padding bounds will be added when the rest of
        shape-padding for box shapes implementation is ready.

        Tests: fast/shapes/shape-outside-floats/shape-outside-margin-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-margin-boxes-002.html

        * rendering/shapes/BoxShape.cpp: Use constructor shape-margin,shape-padding parameters.
        (WebCore::BoxShape::BoxShape):
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape): Pass the shape-margin and shape-padding values along to the BoxShape constructor.
        (WebCore::Shape::createShape): Ditto.

2013-11-26  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove unnecessary webaudio include from MediaStreamSource header
        https://bugs.webkit.org/show_bug.cgi?id=124897

        Reviewed by Eric Carlson.

        AudioDestinationConsumer.h is included but not used anywhere in
        MediaStreamSource implementation.

        * platform/mediastream/MediaStreamSource.h:

2013-11-26  Andreas Kling  <akling@apple.com>

        Avoid unnecessary copy-on-write in FillLayer style application.
        <https://webkit.org/b/124878>

        We ended up with a lot of cloned StyleBackgroundData objects on
        HTML5-8266. This happened because we always forced a copy-on-write
        when applying background-image:inherit / background-image:initial.

        This patch adds early returns to both functions. In the "inherit"
        case, we bail early if the target style already has the same fill
        layer data as its parent style.

        In the "initial" case, we optimize for the single-FillLayer case
        and add an early return if the relevant value is either unset or
        equal to the templatized initial value.

        2.46 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Allow showing a context menu on all mouse events.
        https://bugs.webkit.org/show_bug.cgi?id=124747

        Reviewed by Joseph Pecoraro.

        Add a new InspectorFrontendHost::dispatchEventAsContextMenuEvent(Event*) method
        to let the inspector front-end dispatch a native contextmenu event that will allow
        for a context menu to be shown from within a non-contextmenu event handler.

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::dispatchEventAsContextMenuEvent):
        Check that we're dealing with a mouse event, get the frame for the event target
        and the event's location to call ContextMenuController::showContextMenuAt()
        which will handle the new contextmenu event dispatch to the original event target.

        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2013-11-25  Sam Weinig  <sam@webkit.org>

        Convert some Shape code to use references
        https://bugs.webkit.org/show_bug.cgi?id=124876

        Reviewed by Andreas Kling.

        * inspector/InspectorOverlay.cpp:
        * rendering/FloatingObjects.cpp:
        * rendering/LayoutState.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/line/BreakingContextInlineHeaders.h:
        * rendering/line/LineWidth.cpp:
        * rendering/shapes/ShapeInfo.cpp:
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        * rendering/shapes/ShapeInsideInfo.h:
        * rendering/shapes/ShapeOutsideInfo.cpp:
        * rendering/shapes/ShapeOutsideInfo.h:
        Replace yet more pointers with references.

2013-11-25  Simon Pena  <simon.pena@samsung.com>

        [EFL] X11Helper::createPixmap doesn't initialise out value handleId
        https://bugs.webkit.org/show_bug.cgi?id=124722

        Reviewed by Gyuyoung Kim.

        The overloaded functions X11Helper::createPixmap don't initialise out
        value handleId, and they do early returns on error situations. Since
        the functions are void and they don't communicate their failure in any
        way, returning an out value without initialising it could make the
        error go farther unnoticed. With the variable being initialised, it can
        be reliably checked for errors when the function returns.

        * platform/graphics/surfaces/glx/X11Helper.cpp:
        (WebCore::X11Helper::createPixmap): Initialise handleId to 0.

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Mark URLRegistry's lookup() as const and its child classes as final
        https://bugs.webkit.org/show_bug.cgi?id=124865

        Reviewed by Eric Carlson.

        No new tests needed. No behavior changes.

        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::lookup): marked as const.
        * Modules/mediasource/MediaSourceRegistry.h: MediaSourceRegistry
        marked as final.
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::lookup): marked as const.
        * Modules/mediastream/MediaStreamRegistry.h: MediaStreamRegistry
        marked as final.
        * fileapi/Blob.cpp:
        * html/URLRegistry.h: lookup() marked as const.
        (WebCore::URLRegistry::lookup): marked as const.

2013-11-25  Sergio Correia  <sergio.correia@openbossa.org>

        [MediaStream] Use std::unique_ptr instead of OwnPtr/PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=124858

        Reviewed by Eric Carlson.

        Another step of the OwnPtr/PassOwnPtr => std::unique_ptr conversion,
        now targeting mediastream-related code.

        No new tests, covered by existing ones.

        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCPeerConnection.h:
        * platform/mediastream/MediaStreamSource.cpp:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mock/RTCNotifiersMock.cpp:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        MediaStreamRegistry should store MediaStreams instead of MediaStreamPrivates
        https://bugs.webkit.org/show_bug.cgi?id=124860

        Reviewed by Eric Carlson.

        MediaStreamRegistry::lookup() should return a MediaStream instead of MediaStreamPrivate.

        No new tests needed. No behavior changes.

        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registerURL): m_privateStreams -> m_mediaStreams
        (WebCore::MediaStreamRegistry::unregisterURL): Ditto.
        (WebCore::MediaStreamRegistry::lookup): Override URLRegistry::lookup() instead of add a
        new method MediaStream::lookupMediaStreamPrivate().
        * Modules/mediastream/MediaStreamRegistry.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::loadResource): call lookup() instead of lookupMediaStreamPrivate()

2013-11-25  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fails when GSTREAMER is not used.
        https://bugs.webkit.org/show_bug.cgi?id=124853

        Reviewed by Philippe Normand.

        * platform/graphics/gstreamer/GStreamerUtilities.cpp: Don't include GStreamerUtilities.h when GSTREAMER is not used.

2013-11-25  Andreas Kling  <akling@apple.com>

        Deduplicate shortish Text node strings during tree construction.
        <https://webkit.org/b/124855>

        Let HTMLConstructionSite keep a hash set of already seen strings over
        its lifetime. Use this to deduplicate the strings inside Text nodes
        for any string up to 64 characters of length.

        This optimization already sort-of existed for whitespace-only Texts,
        but those are laundered in the AtomicString table which we definitely
        don't want to pollute with every single Text. It might be a good idea
        to stop using the AtomicString table for all-whitespace Text too.

        3.82 MB progression on HTML5-8266 locally.

        Reviewed by Anders Carlsson.

2013-11-25  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove unnecessary MediaStreamTrackDescriptor forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=124854

        Reviewed by Eric Carlson.

        No new tests needed. No behavior changed.

        * Modules/mediastream/VideoStreamTrack.h:

2013-11-25  Robert Hogan  <robert@webkit.org>

        Remove code now unnecessary after r159575
        https://bugs.webkit.org/show_bug.cgi?id=124809

        Reviewed by Antti Koivisto.

        Covered by existing tests fast/block/margin-collapse/self-collapsing-block-with-float*

        * rendering/line/LineBreaker.cpp:
        (WebCore::LineBreaker::skipLeadingWhitespace):

2013-11-25  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Vertical border spacing is doubled between table row groups
        https://bugs.webkit.org/show_bug.cgi?id=20040

        Reviewed by Csaba Osztrogonác.

        Based on Chromium fix https://chromium.googlesource.com/chromium/blink/+/eb615069267f895c59bc576f9d65b3fa5add41e9

        Rebaseline needed for table related tests (100+).

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-11-25  Andres Gomez  <agomez@igalia.com>

        [GStreamer] Seeking fails on media content provided by servers not supporting Range requests
        https://bugs.webkit.org/show_bug.cgi?id=85994

        Reviewed by Philippe Normand.

        Based on the patch written by Andre Moreira Magalhaes.

        When the GStreamer web source was doing a "Range" request we were
        expecting to receive a 206 status reply with the "Content-Range"
        header and just the requested data. Supporting "Range" requests is
        not mandatory so, for the servers not supporting it they will be
        replying with a 200 status and the whole content of the media
        element. Now, we are properly handling these replies too.

        Test: http/tests/media/media-seeking-no-ranges-server.html

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::handleResponseReceived): Do not fail when
        receiving 200 as response for HTTP range requests.
        (StreamingClient::handleDataReceived): Manually seek on stream
        when receiving the full data after a seek.

2013-11-25  Radu Stavila  <stavila@adobe.com>

        Removed obsolete FIXME after the landing of visual overflow patch (https://bugs.webkit.org/show_bug.cgi?id=118665).
        https://bugs.webkit.org/show_bug.cgi?id=124833

        Reviewed by Mihnea Ovidenie.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::layoutBlock):

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Cache several vectors to avoid malloc/free churn
        https://bugs.webkit.org/show_bug.cgi?id=123995

        Reviewed by Dean Jackson.

        From Blink r158228 by <jchaffraix@chromium.org>

        Laying-out the grid items means a lot of calls to
        distributeSpaceToTracks() and
        resolveContentBasedTrackSizingFunctionsForItems() as they're
        called in a loop. This means that there is a lot of malloc/free
        going on there. By moving the vectors used by these methods to a
        new class which is kept during the whole layout process we save a
        lot of those calls.

        This obviously mean that the price we pay for a significant
        perfomance improvement is that we keep the maximum allocation till
        the end of each layout, but it's an amount of memory that we have
        to allocate anyway. The improvement in the
        auto-grid-lots-of-data.html perf test is ~24% (165 runs/s vs 207
        runs/s).

        No new tests required as we're just refactoring code to a new
        helper class. Nevertheless the performance improvement is backed
        by the perf test mentioned above.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridSizingData::GridSizingData):
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        (WebCore::RenderGrid::distributeSpaceToTracks):
        (WebCore::RenderGrid::layoutGridItems):
        (WebCore::RenderGrid::findChildLogicalPosition):
        * rendering/RenderGrid.h:

2013-11-24  Brady Eidson  <beidson@apple.com>

        DatabaseProcess: Add "UniqueIDBDatabase" that multiple WebProcesses can connect to
        https://bugs.webkit.org/show_bug.cgi?id=124819

        Reviewed by Dan Bernstein.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::~IDBDatabaseBackend): Unregister from the IDBFactory.

2013-11-24  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLMarquee|OListElement() to cleanup static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124707

        Reviewed by Darin Adler.

        As a step to use toFoo(), we need to generate toHTMLMarquee|OListElement().
        Besides this patch cleans up remaining static_cast<> usage.

        No new tests, no behavior changes.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::State::initElement):
        (WebCore::StyleResolver::locateCousinList):
        (WebCore::StyleResolver::findSiblingForStyleSharing):
        * dom/Attr.cpp:
        (WebCore::Attr::style):
        * dom/Element.cpp:
        (WebCore::Element::removeAttribute):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock):
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::wrappingStyleForSerialization):
        * editing/Editor.cpp:
        (WebCore::Editor::applyEditingStyleToElement):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::removeRedundantStylesAndKeepStyleSpanInline):
        * html/HTMLMarqueeElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLTagNames.in:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForAttributesStyle):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * page/PageSerializer.cpp:
        (WebCore::PageSerializer::serializeFrame):
        * rendering/RenderCounter.cpp:
        (WebCore::planCounter):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::resize):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::calcValue):
        (WebCore::RenderListItem::updateListMarkerNumbers):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):

2013-11-24  Tim Horton  <timothy_horton@apple.com>

        REGRESSION (r156291): TileController tiles don't always repaint when they resize
        https://bugs.webkit.org/show_bug.cgi?id=124796

        Reviewed by Simon Fraser.

        In removing platformCALayerDidCreateTiles, r156291 also removed
        the call to setNeedsDisplay when tiles are resized, without
        putting it somewhere else.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setNeedsDisplay):
        Use hasStaleContent when invalidating a whole tile, just
        like we do for partial tile repaints.

        (WebCore::TileController::setTileNeedsDisplayInRect):
        Mark hasStaleContent for any unparented layers, so they'll be painted
        when they are reparented.

        (WebCore::TileController::ensureTilesForRect):
        Invalidate the whole tile when it changes size.

2013-11-23  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Remove 0.10 codepath
        https://bugs.webkit.org/show_bug.cgi?id=124534

        Reviewed by Philippe Normand.

        All GStreamer ports are using 1.0 now so we remove the 0.10
        codepath.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters: Removed
        GStreamerVersioning.
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (onGStreamerWavparsePadAddedCallback): Removed.
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        Replaced webkitGstPipelineGetBus and removed 0.10 codepath.
        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
        Replaced webkitGstPipelineGetBus.
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::copyGstreamerBuffersToAudioChannel):
        (WebCore::onAppsinkPullRequiredCallback): Removed 0.10 codepath.
        (WebCore::AudioFileReader::~AudioFileReader): Replaced
        webkitGstPipelineGetBus and removed 0.10 codepath.
        (WebCore::AudioFileReader::handleSample): Left as only codepath.
        (WebCore::AudioFileReader::handleBuffer): Removed.
        (WebCore::AudioFileReader::handleNewDeinterleavePad): Removed 0.10
        codepath.
        (WebCore::AudioFileReader::plugDeinterleave): Replaced
        getGstAudioCaps.
        (WebCore::AudioFileReader::decodeAudioForBusCreation): Replaced
        webkitGstPipelineGetBus.
        (WebCore::AudioFileReader::createBus): Removed 0.10 codepath.
        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (getGStreamerMonoAudioCaps):
        (webKitWebAudioGStreamerChannelPosition): Removed 0.10 codepath.
        (webkit_web_audio_src_class_init): Replaced
        setGstElementClassMetadata.
        (webkit_web_audio_src_init):
        (webKitWebAudioSrcConstructed):
        (webKitWebAudioSrcFinalize):
        (webKitWebAudioSrcLoop): Removed 0.10 codepath.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp:
        (WTF::GstElement):
        (WTF::GstPad):
        (WTF::GstPadTemplate):
        (WTF::GstTask):
        (WTF::GstBus):
        (WTF::GstElementFactory):
        (WTF::adoptGRef): Replaced gstObjectIsFloating.
        (WTF::refGRef): Replaced webkitGstObjectRefSink.
        (WTF::GstTagList):
        (WTF::GstSample): Removed checks for 1.0 as it is the only
        codepath now.
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Removed checks
        for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/GStreamerUtilities.cpp:
        (WebCore::webkitGstGhostPadFromStaticTemplate):
        (WebCore::getVideoSizeAndFormatFromCaps):
        (WebCore::createGstBuffer):
        (WebCore::createGstBufferForData):
        (WebCore::getGstBufferDataPointer):
        (WebCore::mapGstBuffer):
        (WebCore::unmapGstBuffer): Moved here from GstVersioning and added
        to WebCore namespace.
        * platform/graphics/gstreamer/GStreamerUtilities.h:
        (WebCore::webkitGstCheckVersion): Moved here from GstVersioning
        and added to WebCore namespace.
        * platform/graphics/gstreamer/GStreamerVersioning.cpp: Removed.
        * platform/graphics/gstreamer/GStreamerVersioning.h: Removed.
        * platform/graphics/gstreamer/ImageGStreamer.h: Removed checks for
        1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer): Removed 0.10 codepath.
        (ImageGStreamer::~ImageGStreamer): Removed checks for 1.0 as it is
        the only codepath now.
        * platform/graphics/gstreamer/InbandMetadataTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::setAudioStreamPropertiesCallback): Removed 0.10 codepath.
        (WebCore::mediaPlayerPrivateTextChangedCallback): Removed checks
        for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::isAvailable): Replaced
        gPlaybinName.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        Removed checks for 1.0 and replaced webkitGstPipelineGetBus.
        (WebCore::MediaPlayerPrivateGStreamer::duration): Removed 0.10
        codepath.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio):
        (WebCore::MediaPlayerPrivateGStreamer::textChanged):
        Removed checks for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::buffered): Replaced
        gPercentMax.
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Removed
        0.10 codepath.
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents):
        Removed checks for 1.0 as it is the only codepath now.
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes): Removed 0.10
        codepath.
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Replaced
        gPlaybinName and webkitGstPipelineGetBus and removed checks for
        1.0.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint): Removed 0.10
        codepath.
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp:
        * platform/graphics/gstreamer/TextCombinerGStreamer.h:
        * platform/graphics/gstreamer/TextSinkGStreamer.cpp:
        * platform/graphics/gstreamer/TextSinkGStreamer.h:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Removed
        checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender): Removed 0.10 codepath and added WebCore
        as createGstBuffer namespace.
        (webkitVideoSinkSetCaps): Removed 0.10 codepath.
        (webkitVideoSinkProposeAllocation): Removed checks for 1.0 as it
        is the only codepath now.
        (webkitVideoSinkMarshalVoidAndMiniObject): Removed as it was 0.10.
        (webkit_video_sink_class_init): Removed 0.10 codepath and replaced
        setGstElementClassMetadata.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h:
        Removed checks for 1.0 as it is the only codepath now.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp:
        (webkit_media_src_class_init): Replaced
        setGstElementClassMetadata.
        (webKitMediaSrcAddSrc): Added WebCore namespace to
        webkitGstGhostPadFromStaticTemplate.
        (MediaSourceClientGstreamer::didReceiveData): Added WebCore
        namespace to createGstBufferForData.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        Removed 0.10 codepath.
        (webKitWebSrcQuery): Removed as it was 0.10 only.
        (void webkit_web_src_class_init): Replaced setGstElementClassMetadata.
        (webkit_web_src_init): Removed haveAppSrc27 private attribute and
        0.10 codepath.
        (webKitWebSrcStop): Removed checks for 1.0 as it is the only
        codepath now.
        (webKitWebSrcSetProperty):
        (webKitWebSrcUriGetType):
        (webKitWebSrcGetProtocols):
        (webKitWebSrcGetUri):
        (webKitWebSrcSetUri): Removed 0.10 codepath.
        (StreamingClient::createReadBuffer): Removed checks for 1.0 and
        replaced getGstBufferSize.
        (StreamingClient::handleResponseReceived): Removed 0.10 codepath
        and replaced notifyGstTagsOnPad.
        (StreamingClient::handleDataReceived): Removed 0.10 codepath and
        replaced setGstBufferSize and gst_buffer_get_size.

2013-11-22  Jer Noble  <jer.noble@apple.com>

        [Mac] Can't drag full-screen video to another monitor
        https://bugs.webkit.org/show_bug.cgi?id=124798

        Reviewed by Geoffrey Garen.

        Make full screen windows movable by default. Previously, we wanted non-movable full screen
        windows since they were in the same space and were just placed atop non-full screen windows.
        Now that all our supported Mac platforms have explicit full screen support, we can remove this
        non-movable restriction.

        * platform/mac/WebCoreFullScreenWindow.mm:
        (-[WebCoreFullScreenWindow initWithContentRect:styleMask:backing:defer:]):

2013-11-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Clean up ColorSpace handling in Windows code
        https://bugs.webkit.org/show_bug.cgi?id=124795

        Reviewed by Tim Horton.

        Functionality covered by existing fast/css/color test suite.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::safeRGBColorSpaceRef): Handle case of Windows CG implementation not
        handling sRGB correctly.
        (WebCore::sRGBColorSpaceRef): Use new helper function.
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs): Pass correct color space to fill functions.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::platformInit): Initialize color space to value passed
        via the style to the constructor.

2013-11-22  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto algorithms should check that key algorithm matches
        https://bugs.webkit.org/show_bug.cgi?id=123628

        Reviewed by Anders Carlsson.

        No change in behavior yet, because we have one algorithm per key class.
        Will be tested once more algorithms are added.

        * WebCore.xcodeproj/project.pbxproj: Updated for file renames.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createRsaKeyParamsWithHash):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::createRSAKeyParametersWithHash):
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * crypto/CryptoAlgorithmParameters.h:
        (WebCore::CryptoAlgorithmParameters::ENUM_CLASS):
        * crypto/parameters/CryptoAlgorithmRsaKeyParamsWithHash.h: Copied from Source/WebCore/crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Removed.
        Renamed RsaSsaKeyParams to RsaKeyParamsWithHash, because other algorithms (like RSA-OAEP)
        are in the same boat. Depending on where the spec goes, we might need to introduce
        algorithm specific RSA parameter classes later, but let's reduce copy/pasted code at
        least for now.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Moved to the correct directory.
        * crypto/mac/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Copied from Source/WebCore/crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformSign): Factored out Mac specific
        code, leaving type casting to cross-platform files.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::platformVerify): Ditto.

        * crypto/CryptoAlgorithmRegistry.h:
        (WebCore::CryptoAlgorithmRegistry::registerAlgorithm):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Reduce copy/pasting in registration code.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::keyAlgorithmMatches): Check key type and algorithm.
        (WebCore::CryptoAlgorithmAES_CBC::encrypt): Cross platform type casting code.
        Maybe we'll find a way to autogenerate or eliminate it one day.
        (WebCore::CryptoAlgorithmAES_CBC::decrypt): Ditto.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::keyAlgorithmMatches):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::platformEncrypt):
        (WebCore::CryptoAlgorithmAES_CBC::platformDecrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::platformSign):
        (WebCore::CryptoAlgorithmHMAC::platformVerify):
        Same changes for all algorithms that have keys.

2013-11-22  Brendan Long  <b.long@cablelabs.com>

        Fire "change" event on TextTrackList when a TextTrack's mode changes
        https://bugs.webkit.org/show_bug.cgi?id=124789

        Reviewed by Eric Carlson.

        Since AudioTrackList and VideoTrackList already have this event, the
        interesting bits are in TrackListBase::scheduleChangeEvent(), and we
        just need to call it for TextTrackList changes.

        Test: media/track/track-change-event.html

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::textTrackModeChanged): Call TrackListBase::scheduleChangeEvent().
        * html/track/TextTrackList.idl: Add onchange event listener.

2013-11-22  Brendan Long  <b.long@cablelabs.com>

        Add TextTrackList::getTrackById().
        https://bugs.webkit.org/show_bug.cgi?id=124785

        Reviewed by Eric Carlson.

        Test: media/track/track-id.html

        * html/track/TextTrackList.cpp: Add getTrackById()
        (TextTrackList::getTrackById):
        * html/track/TextTrackList.h: Same.
        * html/track/TextTrackList.idl: Same.

2013-11-22  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] When the <box> value is set, derive radii from border-radius
        https://bugs.webkit.org/show_bug.cgi?id=124228

        Reviewed by Dean Jackson.

        Add support for BoxShape elliptical corners.

        Tests: fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-rounded-boxes-002.html

        * platform/graphics/FloatRoundedRect.h:
        (WebCore::FloatRoundedRect::bottomLeftCorner): Corrected a copy-and-pasteO.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::getExcludedIntervals): Returned interval now depends on the top and bottom of the line.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): Rounded rect parameters are now specified with a RoundedRect parameter.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Pass style's rounded border to createShape().

2013-11-22  Andres Gomez  <agomez@igalia.com>

        Several missing/incorrect guards for LOG_DISABLED=0 against Release build (Mac)
        https://bugs.webkit.org/show_bug.cgi?id=78735

        Reviewed by Mario Sanchez Prada.

        In a "Debug" build the CString.h header comes from another
        indirect dependency. Now, we explicitly add this missing include.

        * page/CaptionUserPreferencesMediaAF.cpp: Explicitly adding
        missing include.

2013-11-22  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Fix of SSL certificate chain storage
        https://bugs.webkit.org/show_bug.cgi?id=124768

        Reviewed by Brent Fulgham.

        Change the certificates storage type into ListHashSet
        from HashSet to keep the chain order in each case.
        This ensures that there is no difference between the stored
        and the recieved certificate chain.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):

2013-11-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Avoid deadlock when interacting with some AVFoundationCF content
        <rdar://problem/15482977> and https://bugs.webkit.org/show_bug.cgi?id=124752

        Prevent deadlock caused by conflict over the "mapLock" mutex. Notification handling in the file,
        which modify assets and make other changes, are required to happen on the main thread. This
        patch enforces this requirement.

        Reviewed by Eric Carlson.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::NotificationCallbackData::NotificationCallbackData): Added
        (WebCore::AVFWrapper::processNotification): Moved logic from 'notificationCallback', which was
        sometimes happening on a background thread.
        (WebCore::AVFWrapper::notificationCallback): Dispatch calls to main thread.

2013-11-22  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error when ACCELERATED_COMPOSITING is not used.
        https://bugs.webkit.org/show_bug.cgi?id=124773

        Reviewed by Brent Fulgham.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations): Added USE(ACCELERATED_COMPOSITING) guard.

2013-11-18  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Improve content-sized track layout
        https://bugs.webkit.org/show_bug.cgi?id=124408

        Reviewed by Dean Jackson.

        Test: fast/css-grid-layout/grid-item-with-percent-min-max-height-dynamic.html

        From Blink r156122 & r157633 by <jchaffraix@chromium.org>

        Added a couple of optimizations to speed up the layout of content
        based tracks. The idea is to narrow down the conditions for
        relayouting when the height of a grid area changes. We basically
        just need to layout tracks with percentage heights as they're the
        only ones that change.

        A new performance test is attached to demonstrate the effect of
        these optimizations. We get a ~1000% improvement on a i7 M620
        going from 14.5 runs/s to 165 runs/s.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::logicalContentHeightForChild):
        (WebCore::RenderGrid::layoutGridItems):

2013-11-08  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Run the content-sized tracks sizing algorithm only when required
        https://bugs.webkit.org/show_bug.cgi?id=124039

        Reviewed by Dean Jackson.

        The current code runs the content sized track sizing algorithm all
        the time, which forces a layout even when the track is not
        content-sized. This change improves the situation by applying two
        optimizations. In the first one, we bail out the algorithm if we
        detect that we don't need to run it. And by the second one we
        reduce the amount of recomputations by only iterating over the
        content sized tracks instead of all of them. Both changes follow
        the ideas introduced in Blink r156028 and r156168 by
        <jchaffraix@chromium.org>.

        As we changed the way we iterate over children (we use the
        GridIterator now) the way they're stored in the RenderGrid changes
        too. If a item spans through several "cells" inside the grid, we
        will have a reference to it on each of them.

        These two changes account for a ~3200% improvement on a i7 M620 in
        the test that accompanies this change (15.5 vs 520 run/s).

        New perf test: PerformanceTests/Layout/fixed-grid-lots-of-data.html

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): Keep track
        of content sized tracks and only iterate over them.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctionsForItems):
        Early return if there are no tracks to pass to the algorithm.
        * rendering/RenderGrid.h:
        * rendering/style/GridLength.h:
        (WebCore::GridLength::isContentSized):
        * rendering/style/GridTrackSize.h:
        (WebCore::GridTrackSize::isContentSized):

2013-11-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Move code after early break in RenderRegion::repaintFlowThreadContentRectangle
        https://bugs.webkit.org/show_bug.cgi?id=124743

        Reviewed by Mihnea Ovidenie.

        No new tests, covered by existing tests.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle): Variable
        flippedFlowThreadPortionRect is not used before the early break, so we
        can move it after and save some unneeded operations.

2013-11-22  Manuel Rego Casasnovas  <rego@igalia.com>

        [CSS Regions] Use hasOverflowClip() in RenderRegion
        https://bugs.webkit.org/show_bug.cgi?id=124746

        Reviewed by Mihnea Ovidenie.

        Implement the suggested FIXME in RenderRegion using hasOverflowClip().

        No new tests, covered by existing tests.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion): Use
        hasOverflowClip().
        (WebCore::RenderRegion::rectFlowPortionForBox): Ditto.

2013-11-21  Frédéric Wang  <fred.wang@free.fr>

        Map the dir attribute to the CSS direction property.
        https://bugs.webkit.org/show_bug.cgi?id=124572.

        Reviewed by Darin Adler.

        Test: mathml/presentation/mstyle-css-attributes.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute): reorder attributes
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): reorder tags that accept dir
        (WebCore::MathMLElement::isMathMLToken): add an inline function to test that a tag corresponds to a MathML Token Element.
        * mathml/MathMLElement.h:

        Follow-up work to address Darin's comments.

2013-11-21  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Remove ENABLE_WORKERS
        https://bugs.webkit.org/show_bug.cgi?id=105784

        Reviewed by Darin Adler.

2013-11-21  Alex Christensen  <achristensen@webkit.org>

        [Win] Unreviewed build fix after r159632.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::certVerifyCallback):
        Fixed template syntax.

2013-11-21  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Refactor highlighting code to decrease Shapes API surface
        https://bugs.webkit.org/show_bug.cgi?id=124737

        Reviewed by Timothy Hatcher.

        Add a virtual method to Shapes, buildPath, that can be used to build the
        path (in the Shape coordinate system) for display in the Inspector. This allows us
        to remove methods such as type(), polygon(), and logicalRx/Ry() which exposed the
        inner workings of the Shapes classes. Also covers the addition of the BoxShape type.

        Refactoring, existing test is inspector-protocol/model/highlight-shape-outside.html.

        * inspector/InspectorOverlay.cpp:
        (WebCore::appendPathCommandAndPoints): Points need to be translated from shape space
        to renderer space using ShapeInfo.
        (WebCore::buildObjectForShapeOutside): Add the ShapeOutsideInfo to the path info struct.
        * rendering/shapes/BoxShape.cpp:
        (WebCore::BoxShape::buildPath): Build the path for a BoxShape.
        * rendering/shapes/BoxShape.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::buildPath): Build the path for a PolygonShape.
        * rendering/shapes/PolygonShape.h:
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::buildPath): Build the path for a RectangleShape.
        * rendering/shapes/RectangleShape.h:
        * rendering/shapes/Shape.h:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124702> Stop overriding VALID_ARCHS.

        All modern versions of Xcode set it appropriately for our needs.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Gwang Yoon Hwang  <ryumiel@company100.net>

        [GTK] Unreviewed buildfix after r159614 and r159656.

        * bindings/gobject/WebKitDOMCustom.cpp: Add missing header

2013-11-21  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Fix WinCairo unreachable code warnings in SimpleLineLayout.cpp
        https://bugs.webkit.org/show_bug.cgi?id=124704

        Reviewed by Antti Koivisto.

        Fix unreachable code warnings using conditional directives.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124701> Fix an error in a few Xcode configuration setting files.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124700> Fix some deprecation warnings.

        Reviewed by Anders Carlsson.

        * platform/mac/HTMLConverter.mm:
        (fileWrapperForURL): Move off a deprecated NSFileWrapper method.

2013-11-21  Daniel Bates  <dabates@apple.com>

        [iOS] Build fix; export symbol for WebCore::provideDeviceOrientationTo()

        Add the symbol __ZN7WebCore26provideDeviceOrientationToEPNS_4PageEPNS_23DeviceOrientationClientE.

        * WebCore.exp.in:

2013-11-21  Daniel Bates  <dabates@apple.com>

        Add !USE(NETWORK_CFDATA_ARRAY_CALLBACK)-guard
        https://bugs.webkit.org/show_bug.cgi?id=124741

        Reviewed by Alexey Proskuryakov.

        Add !USE(NETWORK_CFDATA_ARRAY_CALLBACK)-guard around code that is unused
        when building with feature NETWORK_CFDATA_ARRAY_CALLBACK.

        Additionally, add a declaration for allocateSegment() with attribute WARN_UNUSED_RETURN
        to have the compiler warn when the return value of this function is unused. Together with
        warnings treated as errors this change will prevent a memory leak.

        * platform/SharedBuffer.cpp:

2013-11-21  Daniel Bates  <dabates@apple.com>

        Remove unused functions from WebCore and WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=124739

        Reviewed by Alexey Proskuryakov.

        * editing/markup.cpp: Remove unused functions isHTMLBlockElement and
        ancestorToRetainStructureAndAppearanceWithNoRenderer.
        * rendering/InlineElementBox.cpp: Append newline to the end of the file.

2013-11-21  Daniel Bates  <dabates@apple.com>

        Only generate isObservable() when IDL specifies GenerateIsReachable
        https://bugs.webkit.org/show_bug.cgi?id=124729

        Reviewed by Geoffrey Garen.

        We should only generate the static inline function isObservable() when the IDL
        specifies GenerateIsReachable. Otherwise, this function is unused.

        Added a new test IDL TestGenerateIsReachable.idl and expected results to test that
        we generate isObservable() when an IDL specifies GenerateIsReachable. Additionally,
        rebased existing test results.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/CPP/WebDOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestGenerateIsReachablePrivate.h: Added.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Removed unused function isObservable().
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestException.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp: Added.
        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Removed unused function isObservable().
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
        * bindings/scripts/test/JS/JSattribute.cpp: Ditto.
        * bindings/scripts/test/JS/JSreadonly.cpp: Ditto.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.h: Added.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachable.mm: Added.
        * bindings/scripts/test/ObjC/DOMTestGenerateIsReachableInternal.h: Added.
        * bindings/scripts/test/TestGenerateIsReachable.idl: Added.

2013-11-21  Beth Dakin  <bdakin@apple.com>

        Add a new mode to extend the tile cache beyond the page
        https://bugs.webkit.org/show_bug.cgi?id=124216

        Reviewed by Simon Fraser.

        This patch makes it possible to give the tile cache a margin of tiles. If there is 
        a margin of tiles, this patch paints those tiles with the background color. Note 
        that this patch does not actually give the tile cache a margin at this time.

        You opt into a margined tiled cache by called setTileMargins() with number of 
        pixels that the margin on that side should be. 
        * platform/graphics/TiledBacking.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tilesWouldChangeForVisibleRect):

        TileController::bounds() now computes the bounds INCLUDING the margin.
        (WebCore::TileController::bounds):

        adjustRectAtTileIndexForMargin() is a new function that is required to get the 
        rect size for tiles in the margin right. rectForTileIndex() assumes all tiles 
        strive to be the size of m_tileSize, but now margin tiles will be whatever the 
        margin sizes were set to.
        (WebCore::TileController::adjustRectAtTileIndexForMargin):
        (WebCore::TileController::rectForTileIndex):

        This is another instance where m_tileSize is not always the right size to use.
        (WebCore::TileController::getTileIndexRangeForRect):

        The tile coverage rect now might include the margin tiles. Only include them in 
        slow-scrolling mode if the current position is within one tile of the edge.
        (WebCore::TileController::computeTileCoverageRect):

        tileSizeForCoverageRect() does not make sense in a world where the coverage rect 
        will include margin. Instead, this patch implements the current strategy more 
        explicitly by returning the visibleRect in the slow scrolling case, and in the 
        process this patch also re-names tileSizeForCoverageRect() to computeTileSize() 
        since it no longer takes a coverageRect.
        (WebCore::TileController::computeTileSize):
        (WebCore::TileController::revalidateTiles):

        New setters and getters for the tile margins on each side.
        (WebCore::TileController::setTileMargins):
        (WebCore::TileController::hasMargins):
        (WebCore::TileController::topMarginHeight):
        (WebCore::TileController::bottomMarginHeight):
        (WebCore::TileController::leftMarginWidth):
        (WebCore::TileController::rightMarginWidth):

        New function to add margin onto the composited bounds if there is one.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::tiledBackingHasMargin):
        (WebCore::RenderLayerBacking::paintContents):
        (WebCore::RenderLayerBacking::compositedBoundsIncludingMargin):
        * rendering/RenderLayerBacking.h:

        Do not set masks to bounds if there is a margin on the root layer.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateBacking):
        (WebCore::RenderLayerCompositor::mainFrameBackingIsTiledWithMargin):
        * rendering/RenderLayerCompositor.h:

        Allow background color to paint into the margin tiles.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paintBoxDecorations):

2013-11-21  Alexey Proskuryakov  <ap@apple.com>

        Implement WebCrypto wrapKey
        https://bugs.webkit.org/show_bug.cgi?id=124738

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-wrap-rsa-non-extractable.html
               crypto/subtle/aes-cbc-wrap-rsa.html

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::exportKey): Factored out the actual operation that can be chained with
        encryption for wrapKey.
        (WebCore::JSSubtleCrypto::exportKey):
        (WebCore::JSSubtleCrypto::wrapKey):
        (WebCore::JSSubtleCrypto::unwrapKey): Fixed a memory leak in failure code path.

        * crypto/SubtleCrypto.idl: Added wrapKey.

2013-11-21  Alexey Proskuryakov  <ap@apple.com>

        Implement WebCrypto unwrapKey
        https://bugs.webkit.org/show_bug.cgi?id=124725

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-unwrap-failure.html
               crypto/subtle/aes-cbc-unwrap-rsa.html

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        * bindings/js/JSCryptoAlgorithmDictionary.h:
        Removed calls for wrap/unwrap parameter parsing, these are just the same as encrypt/decrypt.

        * bindings/js/JSCryptoOperationData.cpp:
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSCryptoOperationData.h:
        * crypto/CryptoKeySerialization.h:
        More Vector<char> elimination.

        * bindings/js/JSDOMPromise.cpp:
        * bindings/js/JSDOMPromise.h:
        Removed unneccessary copy constructor and assignment operator, they are no diffdrent
        than compiler generated ones.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::cryptoKeyUsagesFromJSValue): Minor style fixes.
        (WebCore::JSSubtleCrypto::encrypt): Ditto.
        (WebCore::JSSubtleCrypto::decrypt): Ditto.
        (WebCore::JSSubtleCrypto::sign): Ditto.
        (WebCore::JSSubtleCrypto::verify): Ditto.
        (WebCore::JSSubtleCrypto::generateKey): Ditto.
        (WebCore::importKey): Separated actual import operation and the parts that read
        arguments from ExecState, and call the promise. Logically, this should be outside
        of bindings code even, but JWK makes that quite challenging.
        (WebCore::JSSubtleCrypto::importKey): This only does the more mundane arguments
        and return parts now.
        (WebCore::JSSubtleCrypto::exportKey): Minor style fixes.
        (WebCore::JSSubtleCrypto::unwrapKey): Chain decrypt and import.

        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encryptForWrapKey):
        (WebCore::CryptoAlgorithm::decryptForUnwrapKey):
        * crypto/CryptoAlgorithm.h:
        There are algorithms that expose wrap/unwrap, but not encrypt/decrypt. These will
        override these new functions, and leave encrypt/decrypt to raise NOT_SUPPORTED_ERR.

        * crypto/SubtleCrypto.idl: Added unwrapKey.

2013-11-21  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl]Improve ssl certificate storage and check
        https://bugs.webkit.org/show_bug.cgi?id=124569

        Reviewed by Brent Fulgham.

        Storage and check the whole certificate chain, not just the root certificate.

        * platform/network/curl/SSLHandle.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):

2013-11-21  Mihai Maerean  <mmaerean@adobe.com>

        Fix hover area for divs with css transforms
        https://bugs.webkit.org/show_bug.cgi?id=124647

        Reviewed by Allan Sandfeld Jensen.

        Non transformed layers are now being hit last, not through or in-between transformed layers.
        The paint order says that the divs creating stacking contexts (including transforms) are painted after the
        other siblings so they should be hit tested in the reverse order. Also, a rotated div in a non-rotated parent
        should be hit in its entire area, not hit its parent's background, even if the z-coordinate is negative where
        the mouse is located.

        Test: transforms/3d/hit-testing/hover-rotated-negative-z.html

        * rendering/RenderLayer.cpp:
        (WebCore::computeZOffset):

2013-11-21  Andres Gomez  <agomez@igalia.com>

        [GTK] Release compilation fails when defining "LOG_DISABLED=0"
        https://bugs.webkit.org/show_bug.cgi?id=124661

        Reviewed by Mario Sanchez Prada.

        In a "Debug" build the CString.h header comes from another
        indirect dependency. Now, we explicitly add this missing include.

        * html/HTMLTrackElement.cpp: Explicitly adding missing include.

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        Fix Range.insertNode when the inserted node is in the same container as the Range
        https://bugs.webkit.org/show_bug.cgi?id=123957

        Reviewed by Antti Koivisto.

        Inspired by https://chromium.googlesource.com/chromium/blink/+/fb6ca1f488703e8d4f20ce6449cc8ea210be6edb

        When a node from the same container is inserted, we can't simply adjust m_end with the offset.
        Compute m_start and m_end from the inserted nodes instead.

        Also, don't adjust m_start and m_end to nodes outside of the document if the inserted nodes had been
        removed by mutation events.

        Test: fast/dom/Range/range-insertNode-same-container.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode):

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        nextBoundary and previousBoundary are very slow when there is a password field
        https://bugs.webkit.org/show_bug.cgi?id=123973

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/57366eec5e3edea54062d4e74c0e047f8681dbad

        When iterating through DOM nodes nextBoundary and previousBoundary convert the contents of nodes using
        text security to a sequence of 'x' characters. The SimplifiedBackwardsTextIterator and TextIterator
        may iterate past node boundaries. Before this patch, the transformation was done looking at the starting
        node rather than the current node. In some situations, this replaced all boundaries with 'x' and caused
        the text iterator to continue iterating and transforming until the extent of the document.

        Test: editing/deleting/password-delete-performance.html

        * editing/TextIterator.h:
        (WebCore::SimplifiedBackwardsTextIterator::node):
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):

2013-11-21  Ryosuke Niwa  <rniwa@webkit.org>

        HTML parser should not associate elements inside templates with forms
        https://bugs.webkit.org/show_bug.cgi?id=117779

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/45aadf7ee7ee010327eb692066cf013315ef3ed7

        When parsing <form><template><input>, the previous behavior was to associate the <input> with the <form>,
        even though they're not in the same tree (or even the same document).

        This patch changes that by checking, prior to creating a form control element, whether the element to be
        created lives in a document with a browsing context.

        We don't update m_form as needed to faithfully match the HTML5 specification's form element pointer
        http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#form-element-pointer
        and its algorithm for creating and inserting nodes:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#creating-and-inserting-nodes

        While this leaves isindex's reference to form element pointer stale:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#isindex
        The HTML5 specification matches the behaviors of Chrome and Firefox so we leave it as is.

        Test: fast/dom/HTMLTemplateElement/no-form-association.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElement):

2013-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Cannot scroll in option menu when it larger than the screen
        https://bugs.webkit.org/show_bug.cgi?id=124671

        Reviewed by Martin Robinson.

        The problem is that the popup menu is not resized to fit in the
        screen, so it doesn't scroll and some of the items are offscreen
        so they can't be selected either. GTK+ automatically resizes the
        popup menus to fit in the work area, but only when the menu is
        already positioned.

        * platform/gtk/GtkPopupMenu.cpp:
        (WebCore::GtkPopupMenu::popUp): Schedule a resize of the popup
        menu right after showing it once it has a position.

2013-11-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Mark all deprecated symbols in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=124406

        Reviewed by Gustavo Noronha Silva.

        Move deprecated API from WebKitDOMCustom to a new file
        WebKitDOMDeprecated leaving in WebKitDOMCustom only the
        non-deprecated API that is not autogenerated. Also added the
        deprecation decorations and tags in the documentation.

        * bindings/gobject/GNUmakefile.am:
        * bindings/gobject/WebKitDOMCustom.cpp:
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:
        * bindings/gobject/WebKitDOMDeprecated.cpp: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.cpp.
        (webkit_dom_blob_webkit_slice):
        (webkit_dom_html_element_get_id):
        (webkit_dom_html_element_set_id):
        (webkit_dom_html_element_get_class_name):
        (webkit_dom_html_element_set_class_name):
        (webkit_dom_html_element_get_class_list):
        (webkit_dom_html_form_element_dispatch_form_change):
        (webkit_dom_html_form_element_dispatch_form_input):
        (webkit_dom_webkit_named_flow_get_overflow):
        (webkit_dom_element_get_webkit_region_overflow):
        (webkit_dom_webkit_named_flow_get_content_nodes):
        (webkit_dom_webkit_named_flow_get_regions_by_content_node):
        (webkit_dom_bar_info_get_property):
        (webkit_dom_bar_info_class_init):
        (webkit_dom_bar_info_init):
        (webkit_dom_bar_info_get_visible):
        (webkit_dom_console_get_memory):
        (webkit_dom_css_style_declaration_get_property_css_value):
        (webkit_dom_document_get_webkit_hidden):
        (webkit_dom_document_get_webkit_visibility_state):
        (webkit_dom_html_document_open):
        (webkit_dom_html_element_set_item_id):
        (webkit_dom_html_element_get_item_id):
        (webkit_dom_html_element_get_item_ref):
        (webkit_dom_html_element_get_item_prop):
        (webkit_dom_html_element_set_item_scope):
        (webkit_dom_html_element_get_item_scope):
        (webkit_dom_html_element_get_item_type):
        (webkit_dom_html_style_element_set_scoped):
        (webkit_dom_html_style_element_get_scoped):
        (webkit_dom_html_properties_collection_get_property):
        (webkit_dom_html_properties_collection_class_init):
        (webkit_dom_html_properties_collection_init):
        (webkit_dom_html_properties_collection_item):
        (webkit_dom_html_properties_collection_named_item):
        (webkit_dom_html_properties_collection_get_length):
        (webkit_dom_html_properties_collection_get_names):
        (webkit_dom_node_get_attributes):
        (webkit_dom_node_has_attributes):
        (webkit_dom_memory_info_get_property):
        (webkit_dom_memory_info_class_init):
        (webkit_dom_memory_info_init):
        (webkit_dom_memory_info_get_total_js_heap_size):
        (webkit_dom_memory_info_get_used_js_heap_size):
        (webkit_dom_memory_info_get_js_heap_size_limit):
        (webkit_dom_micro_data_item_value_class_init):
        (webkit_dom_micro_data_item_value_init):
        (webkit_dom_performance_get_memory):
        (webkit_dom_property_node_list_get_property):
        (webkit_dom_property_node_list_class_init):
        (webkit_dom_property_node_list_init):
        (webkit_dom_property_node_list_item):
        (webkit_dom_property_node_list_get_length):
        (webkit_dom_html_media_element_get_start_time):
        (webkit_dom_html_media_element_get_initial_time):
        (webkit_dom_html_head_element_get_profile):
        (webkit_dom_html_head_element_set_profile):
        (webkit_dom_processing_instruction_get_data):
        (webkit_dom_processing_instruction_set_data):
        * bindings/gobject/WebKitDOMDeprecated.h: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.h.
        * bindings/gobject/WebKitDOMDeprecated.symbols: Copied from Source/WebCore/bindings/gobject/WebKitDOMCustom.symbols.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Do not include deprecation guards in the cpp file.
        * bindings/scripts/gobject-generate-headers.pl: Do not create
        fordward declarations for non-existent classes like Custom and
        Deprecated.
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event):

2013-11-20  Jae Hyun Park  <jae.park@company100.net>

        [CoordinatedGraphics] Use std::unique_ptrs rather than OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=124692

        Reviewed by Noam Rosenthal.

        No new tests, covered by existing ones.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        * platform/graphics/TiledBackingStore.h:
        * platform/graphics/TiledBackingStoreBackend.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer::createBackingStore):
        * platform/graphics/texmap/coordinated/CoordinatedTile.h:

2013-11-20  Brady Eidson  <beidson@apple.com>

        Add more infrastructure for ServerConnection communication between Web and Database processes
        https://bugs.webkit.org/show_bug.cgi?id=124693

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Hoist <template> to head when found between </head> and <body> for consistency with <script>
        https://bugs.webkit.org/show_bug.cgi?id=123949

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/835fb468fd211054a920fb7612a6dc5043662495

        Move template elements between head and body elements into the head to be consistent with script elements.
        The HTML5 specification was changed in http://html5.org/tools/web-apps-tracker?from=8217&to=8218.

        Inline comments below are cited from https://www.w3.org/Bugs/Public/show_bug.cgi?id=23002
        and https://codereview.chromium.org/25900003 for clarity.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag): Add the template element to the list of elements to be hoisted into
        the head element.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):

        Replace the assertion that isParsingFragment is true when item->node() == m_tree.openElements()->rootNode() since,
        with this change, we can now invoke resetInsertionMode when parsing a normal document (not fragment) and there is
        only the html element on the stack of open elements.

        For the second change, consider: <head></head><template>

        This example breaks in the old HTML parser because the template element is handled by "after head" state which
        pushes the head element back on, processes the template element for "in head", then pops the head element off.
        EOF is reached, which processes a fake close tag for the template element, which pops the template element off
        and resets the insertion mode appropriately

        The problem here is that "reset the insertion mode" is going to inspect the bottom-most element on the stack which
        is now the html element and it will set the mode to "before head". Nothing good happens after this.

        We fix this problem by having the reset algorithm check if the head element pointer is set, and if so, go to after
        head instead of before head.

2013-11-20  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Implement visual overflow for first & last regions
        https://bugs.webkit.org/show_bug.cgi?id=118665

        In order to properly propagate the visual overflow of elements flowed inside regions, 
        the responsiblity of painting and hit-testing content inside flow threads has been
        moved to the flow thread layer's level.
        Each region keeps the associated overflow with each box in the RenderBoxRegionInfo
        structure, including one for the flow thread itself. This data is used during
        painting and hit-testing.

        Reviewed by David Hyatt.

        Tests: fast/regions/overflow-first-and-last-regions-in-container-hidden.html
               fast/regions/overflow-first-and-last-regions.html
               fast/regions/overflow-nested-regions.html
               fast/regions/overflow-region-float.html
               fast/regions/overflow-region-inline.html
               fast/regions/overflow-region-transform.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideRegionRange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
        (WebCore::RenderFlowThread::flipForWritingModeLocalCoordinates):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsVisualOverflow):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::updateDescendantsLayerListsIfNeeded):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        (WebCore::RenderLayer::paintNamedFlowThreadInsideRegion):
        (WebCore::RenderLayer::paintFlowThreadIfRegion):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::inflateX):
        (WebCore::ClipRect::inflateY):
        (WebCore::ClipRect::inflate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::flowThreadPortionLocation):
        (WebCore::RenderRegion::regionContainerLayer):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        [HTML parser] reset insertion mode appropriate must check for "in select in table" mode
        https://bugs.webkit.org/show_bug.cgi?id=123850

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/2cb7523df57dfb48111f6aa16b7138cd54024ba7

        The HTML specification has been updated to detect encountering a template element inside of a select element,
        which in turn is inside of a table element. In this case, the select element will cause the parser to be in
        "InSelectInTable" mode. Thus when the template element closes, it should return to that mode.

        The fix here is that resetInsertionModeAppropriately must continue looking up the stack if the first node is
        select element to see whether the select element is inside of a table element.

        See also: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#reset-the-insertion-mode-appropriately

        Test: html5lib/resources/template.dat

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):

2013-11-20  Mark Lam  <mark.lam@apple.com>

        Build fix for last commit.
        https://bugs.webkit.org/show_bug.cgi?id=124634.

        Not reviewed.

        No new tests.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:

2013-11-20  Mark Lam  <mark.lam@apple.com>

        Introducing VMEntryScope to update the VM stack limit.
        https://bugs.webkit.org/show_bug.cgi?id=124634.

        Reviewed by Geoffrey Garen.

        No new tests.

        Renamed dynamicGlobalObject() to vmEntryGlobalObject().
        Replaced uses of DynamicGlobalObjectScope with VMEntryScope.

        * ForwardingHeaders/runtime/VMEntryScope.h: Added.
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::create):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::firstDOMWindow):
        * bindings/js/JSErrorHandler.cpp:
        (WebCore::JSErrorHandler::handleEvent):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::vmEntryGlobalObject):
        * bindings/js/PageScriptDebugServer.cpp:
        (WebCore::PageScriptDebugServer::recompileAllJSFunctions):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::evaluateBreakpointAction):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::recompileAllJSFunctions):
        * bindings/objc/WebScriptObject.mm:
        (WebCore::addExceptionToConsole):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::convertValueToObjcObject):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):

2013-11-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLFooElement() to clean up static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124571

        Reviewed by Ryosuke Niwa.

        Though there are a lot of clean up commits before, there are still
        use of static_cast<HTMLFooElement*>. To clean up them, we need to generate
        toHTMLDetails|Meta|Summary|TableCaptionElement().

        Additionally, other static_cast<> are removed as well.

        No new tests, no behavior changes.

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Clear TemplateContentDocumentFragment::m_host when HTMLTemplateElement is destroyed
        https://bugs.webkit.org/show_bug.cgi?id=122806

        Reviewed by Antti Koivisto.

        Merge https://chromium.googlesource.com/chromium/blink/+/858ed5f6341de9d900768c1f4668fcfce870c52e

        The document fragment of a template element outlives the element itself.
        Clear the host property on the document fragment when that happens.

        Test: fast/dom/HTMLTemplateElement/content-outlives-template-crash.html

        * dom/TemplateContentDocumentFragment.h:
        * html/HTMLTemplateElement.cpp:
        (WebCore::HTMLTemplateElement::~HTMLTemplateElement):
        * html/HTMLTemplateElement.h:

2013-11-20  Chris Fleizach  <cfleizach@apple.com>

        AX: Implement CSS -webkit-alt property (text alternative for generated content pseudo-elements ::before and ::after)
        https://bugs.webkit.org/show_bug.cgi?id=120188

        Reviewed by Dean Jackson.

        Add a -webkit-alt CSS property that can be used to label Image content or Text content for accessibility clients.

        To accomplish this, it sets the string in the RenderStyle. Then when the ContentData creates an anonymous renderer,
        it sets that string on the TextFragment or RenderImage, which can be queried by accessibility code.

        Test: platform/mac/accessibility/webkit-alt-for-css-content.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::objectInclusionFromAltText):
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::altTextToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseAlt):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::altText):
        (WebCore::RenderImage::setAltText):
        * rendering/RenderTextFragment.h:
        * rendering/style/ContentData.cpp:
        (WebCore::ImageContentData::createRenderer):
        (WebCore::TextContentData::createRenderer):
        * rendering/style/ContentData.h:
        (WebCore::ContentData::setAltText):
        (WebCore::ContentData::altText):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent):
        (WebCore::RenderStyle::setContentAltText):
        (WebCore::RenderStyle::contentAltText):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.h:

2013-11-20  Roger Fong  <roger_fong@apple.com>

        Use compile flag SH_UNFOLD_SHORT_CIRCUIT when compiling shaders.
        https://bugs.webkit.org/show_bug.cgi?id=124684.

        Reviewed by Brent Fulgham.

        Existing test webgl/1.0.2/conformance/glsl/misc/shader-with-short-circuiting-operators.html

        * platform/graphics/opengl/Extensions3DOpenGLCommon.cpp:
        (WebCore::Extensions3DOpenGLCommon::getTranslatedShaderSourceANGLE):

2013-11-20  Robert Sipka  <sipka@inf.u-szeged.hu>

        [curl] Improve detecting and handling of SSL related errors
        https://bugs.webkit.org/show_bug.cgi?id=119436

        Reviewed by Brent Fulgham.

        Set the exact SSL verification error on CURL
        and store the enabled domain with certificate.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/curl/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::sslErrors):
        (WebCore::ResourceError::setSSLErrors):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::setHostAllowsAnyHTTPSCertificate):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):
        * platform/network/curl/SSLHandle.cpp: Added.
        (WebCore::allowsAnyHTTPSCertificateHosts):
        (WebCore::sslIgnoreHTTPSCertificate):
        (WebCore::sslCertificateFlag):
        (WebCore::pemData):
        (WebCore::certVerifyCallback):
        (WebCore::sslctxfun):
        (WebCore::setSSLVerifyOptions):
        * platform/network/curl/SSLHandle.h: Added.

2013-11-20  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Parse new circle shape syntax
        https://bugs.webkit.org/show_bug.cgi?id=124618

        Reviewed by Antti Koivisto.

        Implement parsing of the new cicle shape syntax. The implementation of
        the old syntax has been move aside as deprecated, and will be removed
        once the new syntax is stable.

        Updated existing parsing tests to cover this.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForCenterCoordinate): Create a CSSPrimitiveValue from a
            BasicShapeCenterCoordinate.
        (WebCore::valueForBasicShape): Convert new basic shape and rename old
            one.
        (WebCore::convertToCenterCoordinate): Create a
            BasicShapeCenterCoordinate from a CSSPrimitiveValue.
        (WebCore::basicShapeForValue): Convert new shape value and rename old
            one.
        * css/CSSBasicShapes.cpp:
        (WebCore::buildCircleString): Build a new circle string.
        (WebCore::CSSBasicShapeCircle::cssText): Serialize the new circle
            shape.
        (WebCore::CSSBasicShapeCircle::equals): Compare new circle shapes.
        (WebCore::CSSBasicShapeCircle::serializeResolvingVariables):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShapeCircle::CSSBasicShapeCircle): Add class for new
            circle shape.
        (WebCore::CSSDeprecatedBasicShapeCircle::create): Renamed to move out
            of the way of the new circle implementation.
        (WebCore::CSSDeprecatedBasicShapeCircle::centerX): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::centerY): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::radius): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setCenterX): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setCenterY): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::setRadius): Ditto.
        (WebCore::CSSDeprecatedBasicShapeCircle::CSSDeprecatedBasicShapeCircle): Ditto.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseShapeRadius): Parse the radius for the new
            circle syntax. Will also be used by the new ellipse syntax.
        (WebCore::CSSParser::parseBasicShapeCircle): Parse the new circle
            syntax.
        (WebCore::CSSParser::parseDeprecatedBasicShapeCircle): Rename to make
            way for the new implementation.
        (WebCore::isDeprecatedBasicShape): Check if we have a new circle or an
            old circle.
        (WebCore::CSSParser::parseBasicShape): Update to parse the new circle
            syntax.
        * css/CSSParser.h:
        * css/CSSValueKeywords.in: Add support for the new circle keywords.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): 
        * rendering/style/BasicShapes.cpp: Deprecate old circle and add stub
            for layout code.
        (WebCore::DeprecatedBasicShapeCircle::path): Rename to make way for
            the new implementation.
        (WebCore::DeprecatedBasicShapeCircle::blend): Rename to make way for
            the new implementation.
        (WebCore::BasicShapeCircle::path): Create path for new circle shape.
        (WebCore::BasicShapeCircle::blend): Interpolate the new circle shape.
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShapeCenterCoordinate::BasicShapeCenterCoordinate):
            Represent an x or y coordinate for the center of a new circle,
            since it can be either a keyword along with an offset that cannot
            be resolved until layout time or an ordinary Length. This will
            also be used by the new ellipse implementation.
        (WebCore::BasicShapeCenterCoordinate::keyword):
        (WebCore::BasicShapeCenterCoordinate::length):
        (WebCore::BasicShapeCenterCoordinate::blend): Interpolate.
        (WebCore::BasicShapeRadius::BasicShapeRadius): Represent the radius of
            a new circle shape since it can either be a straightforward Length or
            a keyword that cannot be resolved until layout time.
        (WebCore::BasicShapeRadius::value):
        (WebCore::BasicShapeRadius::type):
        (WebCore::BasicShapeRadius::blend): Interpolate.
        (WebCore::BasicShapeCircle::centerX):
        (WebCore::BasicShapeCircle::centerY):
        (WebCore::BasicShapeCircle::radius):
        (WebCore::BasicShapeCircle::setCenterX):
        (WebCore::BasicShapeCircle::setCenterY):
        (WebCore::BasicShapeCircle::setRadius):
        (WebCore::BasicShapeCircle::BasicShapeCircle): New circle class.
        (WebCore::DeprecatedBasicShapeCircle::create): Rename to make room for
            new circle implementation.
        (WebCore::DeprecatedBasicShapeCircle::DeprecatedBasicShapeCircle): Ditto.

2013-11-20  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Add BoxShape and FloatRoundingRect classes
        https://bugs.webkit.org/show_bug.cgi?id=124368

        Reviewed by Dean Jackson.

        Added the BoxShape class. It's now used to represent shape-outside box
        values: [margin/border/padding/content]-box. BoxShape depends on a new
        FloatRoundedRect class, which is a float analog of the existing (int)
        RoundedRect class. The FloatRoundedRect class contains the same basic
        methods and accessors as BorderRect and adds a set of four methods,
        for example topLeftCorner(), that return a FloatRect that represents the
        bounds of one elliptical corner. I also added a method, xInterceptsAtY()
        that returns two X coordinates of the intersection between a horizontal
        line and the rounded rectangle.

        No new tests, this is just an internal refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatRoundedRect.cpp: Added.
        (WebCore::FloatRoundedRect::FloatRoundedRect):
        (WebCore::FloatRoundedRect::Radii::isZero):
        (WebCore::FloatRoundedRect::Radii::scale):
        (WebCore::FloatRoundedRect::Radii::expand):
        (WebCore::cornerRectIntercept):
        (WebCore::FloatRoundedRect::xInterceptsAtY):
        * platform/graphics/FloatRoundedRect.h: Added.
        (WebCore::FloatRoundedRect::Radii::Radii):
        (WebCore::FloatRoundedRect::Radii::setTopLeft):
        (WebCore::FloatRoundedRect::Radii::setTopRight):
        (WebCore::FloatRoundedRect::Radii::setBottomLeft):
        (WebCore::FloatRoundedRect::Radii::setBottomRight):
        (WebCore::FloatRoundedRect::Radii::topLeft):
        (WebCore::FloatRoundedRect::Radii::topRight):
        (WebCore::FloatRoundedRect::Radii::bottomLeft):
        (WebCore::FloatRoundedRect::Radii::bottomRight):
        (WebCore::FloatRoundedRect::Radii::expand):
        (WebCore::FloatRoundedRect::Radii::shrink):
        (WebCore::FloatRoundedRect::rect):
        (WebCore::FloatRoundedRect::radii):
        (WebCore::FloatRoundedRect::isRounded):
        (WebCore::FloatRoundedRect::isEmpty):
        (WebCore::FloatRoundedRect::setRect):
        (WebCore::FloatRoundedRect::setRadii):
        (WebCore::FloatRoundedRect::move):
        (WebCore::FloatRoundedRect::inflate):
        (WebCore::FloatRoundedRect::expandRadii):
        (WebCore::FloatRoundedRect::shrinkRadii):
        (WebCore::FloatRoundedRect::topLeftCorner):
        (WebCore::FloatRoundedRect::topRightCorner):
        (WebCore::FloatRoundedRect::bottomLeftCorner):
        (WebCore::FloatRoundedRect::bottomRightCorner):
        (WebCore::operator==):
        * rendering/shapes/BoxShape.cpp: Added.
        (WebCore::BoxShape::BoxShape):
        (WebCore::BoxShape::getExcludedIntervals):
        (WebCore::BoxShape::getIncludedIntervals):
        (WebCore::BoxShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/BoxShape.h: Added.
        * rendering/shapes/Shape.cpp:
        (WebCore::createBoxShape):
        (WebCore::Shape::createShape):

2013-11-20  Antti Koivisto  <antti@apple.com>

        Simple line layout should support floats
        https://bugs.webkit.org/show_bug.cgi?id=124666

        Reviewed by Dave Hyatt.

        Tests: fast/text/simple-lines-float-compare.html
               fast/text/simple-lines-float.html

        * rendering/line/LineWidth.h:
        (WebCore::LineWidth::logicalLeftOffset):
        
            Expose the left offset so we don't need to recompute it.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::computeLineLeft):
        
            Include the left offset from floats.

        (WebCore::SimpleLineLayout::createTextRuns):
        
            Keep the flow height updated during the loop as LineWidth reads the current position from there.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        
            We now bake the border and the padding to the line left offset. No need to add it during resolve.

2013-11-20  Alexey Proskuryakov  <ap@apple.com>

        Use std::function callbacks in CryptoAlgorithm instead of JS promises
        https://bugs.webkit.org/show_bug.cgi?id=124673

        Reviewed by Anders Carlsson.

        To implement key wrapping/unwrapping, we'll need to chain existing operations.
        It's much easier to do with C++ callbacks than with functions fulfilling JS
        promises directly.

        Also, this will decouple CryptoAlgorithm from JS, which is nice.

        SubtleCrypto IDL says that all functions return Promise<any>, but in reality,
        there is very little polymorphism, the only function whose return type depends
        on algorithm is generateKey (it can create a Key or a KeyPair).

        * bindings/js/JSDOMPromise.cpp:
        (WebCore::PromiseWrapper::PromiseWrapper):
        (WebCore::PromiseWrapper::operator=):
        * bindings/js/JSDOMPromise.h:
        Made it copyable, as each crypto function wraps the promise in success and failure
        functional objects now.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::generateKey):
        (WebCore::JSSubtleCrypto::importKey):
        (WebCore::JSSubtleCrypto::exportKey):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::digest):
        (WebCore::CryptoAlgorithm::generateKey):
        (WebCore::CryptoAlgorithm::deriveKey):
        (WebCore::CryptoAlgorithm::deriveBits):
        (WebCore::CryptoAlgorithm::importKey):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::generatePair):

2013-11-20  Robert Hogan  <robert@webkit.org>

        REGRESSION(r127163): Respect clearance set on ancestors when placing floats
        https://bugs.webkit.org/show_bug.cgi?id=119979

        Reviewed by David Hyatt.

        Refactor the way self-collapsing blocks with clearance are positioned so that they
        get the correct logical-top position during margin-collapsing.

        Test: fast/block/margin-collapse/self-collapsing-block-with-float-descendants.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::marginOffsetForSelfCollapsingBlock):
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        * rendering/RenderBlockFlow.h:

2013-11-20  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [GTK] Remove Chromium as user agent and claim to be Safari in OS X
        https://bugs.webkit.org/show_bug.cgi?id=124229

        Reviewed by Martin Robinson.

        http://www.duolingo.com/ doesn't get render correctly because it uses
        Chrome/Chromium specific variables, added after it was forked. Because
        of this, it is necessary to remove the Chrome/Chromium identification
        in the user agent. Also, from now on, by default, The GTK+ port will
        claim to be Safari in OS X to avoid loading wrong resources.

        * platform/gtk/UserAgentGtk.cpp:
        (WebCore::standardUserAgent):

2013-11-20  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159551.
        http://trac.webkit.org/changeset/159551
        https://bugs.webkit.org/show_bug.cgi?id=124669

        made many tests asserts (Requested by anttik on #webkit).

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-20  Zoltan Horvath  <zoltan@webkit.org>

        Move LineWidth.{h,cpp} into rendering/line
        <https://webkit.org/b/124448>

        Reviewed by David Hyatt.

        In r159354 I introduced line directory. Now it's time to move the helper classes of RenderBlockLineLayout into 'line' subdirectory.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/line/LineWidth.cpp: Renamed from Source/WebCore/rendering/LineWidth.cpp.
        (WebCore::LineWidth::LineWidth):
        (WebCore::LineWidth::fitsOnLine):
        (WebCore::LineWidth::fitsOnLineIncludingExtraWidth):
        (WebCore::LineWidth::fitsOnLineExcludingTrailingWhitespace):
        (WebCore::LineWidth::updateAvailableWidth):
        (WebCore::LineWidth::shrinkAvailableWidthForNewFloatIfNeeded):
        (WebCore::LineWidth::commit):
        (WebCore::LineWidth::applyOverhang):
        (WebCore::LineWidth::fitBelowFloats):
        (WebCore::LineWidth::setTrailingWhitespaceWidth):
        (WebCore::LineWidth::updateCurrentShapeSegment):
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight):
        (WebCore::LineWidth::fitsOnLineExcludingTrailingCollapsedWhitespace):
        * rendering/line/LineWidth.h: Renamed from Source/WebCore/rendering/LineWidth.h.
        (WebCore::LineWidth::currentWidth):
        (WebCore::LineWidth::uncommittedWidth):
        (WebCore::LineWidth::committedWidth):
        (WebCore::LineWidth::availableWidth):
        (WebCore::LineWidth::addUncommittedWidth):
        (WebCore::LineWidth::shouldIndentText):

2013-11-20  Brady Eidson  <beidson@apple.com>

        Alphabetization followup to r159567

        Reviewed by style-bot  :(

        * Modules/indexeddb/IDBDatabaseBackend.h:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2013-11-20  Brady Eidson  <beidson@apple.com>

        Rename IDBMetadata.h to IDBDatabaseMetadata.h
        https://bugs.webkit.org/show_bug.cgi?id=124668

        Reviewed by Dean Jackson.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackend.h:

        * Modules/indexeddb/IDBDatabaseMetadata.h: Renamed from Source/WebCore/Modules/indexeddb/IDBMetadata.h.
        (WebCore::IDBIndexMetadata::IDBIndexMetadata):
        (WebCore::IDBObjectStoreMetadata::IDBObjectStoreMetadata):
        (WebCore::IDBDatabaseMetadata::IDBDatabaseMetadata):

        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h:
        * inspector/InspectorIndexedDBAgent.cpp:

2013-11-20  Ryosuke Niwa  <rniwa@webkit.org>

        Remove bogus assertions in updateNameForTreeScope and updateNameForDocument
        https://bugs.webkit.org/show_bug.cgi?id=124639

        Reviewed by Darin Adler.

        Removed assertions. We can't assert that the element in a tree scope or a document
        since these two functions are called from removedFrom.

        * dom/Element.cpp:
        (WebCore::Element::updateNameForTreeScope):
        (WebCore::Element::updateNameForDocument):

2013-11-20  Brady Eidson  <beidson@apple.com>

        Cleanup getOrEstablishIDBDatabaseMetadata and stub it out in WK2
        https://bugs.webkit.org/show_bug.cgi?id=124635

        Reviewed by Tim Horton.

        getOrEstablishIDBDatabaseMetadata() should not have to take a database name parameter because the 
        server connection should already know what database name it represents.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::openInternalAsync):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::getOrEstablishIDBDatabaseMetadata):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):

2013-11-20  Andrzej Badowski  <a.badowski@samsung.com>

        [EFL] <video> and <audio> should be accessible.
        https://bugs.webkit.org/show_bug.cgi?id=124494

        Reviewed by Gyuyoung Kim.

        Adding descriptions of media-element controls.

        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::localizedMediaControlElementString):

2013-11-20  Antti Koivisto  <antti@apple.com>

        Don't paint simple text runs outside the paint rect
        https://bugs.webkit.org/show_bug.cgi?id=124651

        Reviewed by Anders Carlsson.
        
        This speeds up partial paints for long text paragraphs. 
        Also add the same optimization for hit testing.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):
        
            Iterate over the run range that needs painting.

        (WebCore::SimpleLineLayout::hitTestFlow):
        
            Iterate over the line range that needs painting.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::Range::Range):
        (WebCore::SimpleLineLayout::Range::begin):
        (WebCore::SimpleLineLayout::Range::end):
        
            Add Range type.

        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advance):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::advanceLines):
        
            Optimize case where runCount==lineCount. In this case we can just directly jump
            to the right run/line.

        (WebCore::SimpleLineLayout::RunResolver::begin):
        (WebCore::SimpleLineLayout::RunResolver::end):
        (WebCore::SimpleLineLayout::RunResolver::lineIndexForHeight):
        (WebCore::SimpleLineLayout::RunResolver::rangeForRect):
        
            Get the range corresponding to a rect. This currently cares about y coordinates only.

        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::LineResolver::rangeForRect):

2013-11-20  Antoine Quint  <graouts@apple.com>

        Cannot animate "points" attribute for <svg:polygon>
        https://bugs.webkit.org/show_bug.cgi?id=21371

        Reviewed by Antti Koivisto.

        Ensure we use animated list of points for SVG <polygon> and <polyline> elements
        when we build the path used to draw them, otherwise the animated changes won't
        be rendered and the base value will be used.

        Tests: svg/animations/polygon-set.svg
               svg/animations/polyline-set.svg

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):

2013-11-20  Andrei Bucur  <abucur@adobe.com>

        [CSSRegions] Move region styling code into RenderNamedFlowFragment
        https://bugs.webkit.org/show_bug.cgi?id=122957

        Reviewed by Mihnea Ovidenie.

        The patch moves all the region styling functionality outside of RenderRegion
        to RenderNamedFlowFragment and outside of RenderFlowThread to RenderNamedFlowThread.
        This generates a couple of undesired casts that will be removed in later patches
        when everything CSS Regions specific will be located inside RenderNamedFlowThread
        and RenderNamedFlowFragment (e.g. the move of the isValid flag, the auto-height
        code etc.).

        The painting function was also moved from RenderRegion to RenderNamedFlowFragment. It
        was only used by the CSS Regions code. The new multi-column implementation has its own
        painting mechanism.

        Tests: No changed functionality, just refactorings.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::RenderFlowThread):
        (WebCore::RenderFlowThread::removeFlowChildInfo):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        * rendering/RenderFlowThread.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::updateAlwaysCreateLineBoxes):
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::checkRegionStyle):
        (WebCore::RenderNamedFlowFragment::computeStyleInRegion):
        (WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setObjectStyleInRegion):
        (WebCore::RenderNamedFlowFragment::clearObjectStyleInRegion):
        (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
        (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
        (WebCore::shouldPaintRegionContentsInPhase):
        (WebCore::RenderNamedFlowFragment::paintObject):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::checkRegionsWithStyling):
        (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderNamedFlowThread::removeFlowChildInfo):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::RenderRegion):
        (WebCore::RenderRegion::styleDidChange):
        (WebCore::RenderRegion::attachRegion):
        * rendering/RenderRegion.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeRenderRegionList):

2013-11-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLFooElement() to clean up static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124571

        Reviewed by Darin Adler.

        Though there are a lot of clean up commits before, there are still
        use of static_cast<HTMLFooElement*>. To clean up them, we need to generate
        toHTMLDetails|Meta|Summary|TableSection|TableCaptionElement().

        Additionally, other static_cast<> are removed as well.

        No new tests, no behavior changes.

        * html/HTMLDetailsElement.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::selectNextSourceChild):
        * html/HTMLMetaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::shouldAllowQuickTimeClassIdQuirk):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::isDisabledFormControl):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLSummaryElement.cpp:
        (WebCore::HTMLSummaryElement::detailsElement):
        * html/HTMLSummaryElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::caption):
        (WebCore::HTMLTableElement::tHead):
        (WebCore::HTMLTableElement::tFoot):
        (WebCore::HTMLTableElement::lastBody):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTagNames.in:
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/shadow/DetailsMarkerControl.cpp:
        (WebCore::DetailsMarkerControl::summaryElement):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handleFallbackContent):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
        * page/DragController.cpp:
        (WebCore::DragController::canProcessDrag):
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsBeforeElement):
        * page/SpatialNavigation.cpp:
        (WebCore::frameOwnerElement):

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Enable HTMLTemplateElement on Mac port
        https://bugs.webkit.org/show_bug.cgi?id=124637

        Reviewed by Tim Horton.

        Enabled the feature.

        * Configurations/FeatureDefines.xcconfig:

2013-11-19  Jinwoo Song  <jinwoo7.song@samsung.com>

        Remove unused member function declaration in DocumentOrderedMap.h
        https://bugs.webkit.org/show_bug.cgi?id=124629

        Reviewed by Ryosuke Niwa.

        checkConsistency() is not used anywhere.

        * dom/DocumentOrderedMap.h:

2013-11-19  Seokju Kwon  <seokju@webkit.org>

        Removal of redundant function call in Editor::insertTextWithoutSendingTextEvent
        https://bugs.webkit.org/show_bug.cgi?id=124563

        Reviewed by Brent Fulgham.

        No new tests needed, no behavior change.

        * editing/Editor.cpp:
        (WebCore::Editor::insertTextWithoutSendingTextEvent):

2013-11-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Fix build break after r159533.

        * CMakeLists.txt: Update ANGLE files.

2013-11-19  Zhuang Zhigang  <zhuangzg@cn.fujitsu.com>

        Implement spin control on WinCE port.
        https://bugs.webkit.org/show_bug.cgi?id=123254

        Reviewed by Brent Fulgham.

        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustInnerSpinButtonStyle):
        (WebCore::RenderThemeWinCE::paintInnerSpinButton):
        * rendering/RenderThemeWinCE.h:

2013-11-19  Roger Fong  <roger_fong@apple.com>

        Update ANGLE sources.
        https://bugs.webkit.org/show_bug.cgi?id=124615.

        Reviewed by Dean Jackson.

        Tests covered by Khronos WebGL conformance tests.

        * platform/graphics/ANGLEWebKitBridge.cpp: Resolve a build error that resulted from updating ANGLE.
        (WebCore::getSymbolInfo):
        (WebCore::ANGLEWebKitBridge::compileShaderSource):

2013-11-19  Filip Pizlo  <fpizlo@apple.com>

        Rename WatchpointSet::notifyWrite() should be renamed to WatchpointSet::fireAll()
        https://bugs.webkit.org/show_bug.cgi?id=124609

        Rubber stamped by Mark Lam.

        No new tests because no new behavior.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::create):

2013-11-19  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Parse [<box> || <shape>] values
        https://bugs.webkit.org/show_bug.cgi?id=124426

        Reviewed by Dirk Schulze.

        Shape values can now have an optional box specifying the coordinate sytem to use
        for sizing and positioning the shape. This patch adds the functionality to support
        parsing these new values.

        * css/BasicShapeFunctions.cpp:
        (WebCore::valueForBox): Added function to convert between BasicShape::ReferenceBox
        and CSSPrimitiveValue (which wraps a CSSValueID).
        (WebCore::boxForValue): Ditto.
        (WebCore::valueForBasicShape): Translations between CSSBasicShape and BasicShape
        must now include the reference box.
        (WebCore::basicShapeForValue): Ditto.
        * css/BasicShapeFunctions.h:
        * css/CSSBasicShapes.cpp:
        (WebCore::buildRectangleString): Include the box in the built CSS string.
        (WebCore::CSSBasicShapeRectangle::cssText): Ditto.
        (WebCore::CSSBasicShapeRectangle::equals): Include the box in comparisions.
        (WebCore::buildCircleString):
        (WebCore::CSSBasicShapeCircle::cssText):
        (WebCore::CSSBasicShapeCircle::equals):
        (WebCore::buildEllipseString):
        (WebCore::CSSBasicShapeEllipse::cssText):
        (WebCore::CSSBasicShapeEllipse::equals):
        (WebCore::buildPolygonString):
        (WebCore::CSSBasicShapePolygon::cssText):
        (WebCore::CSSBasicShapePolygon::equals):
        (WebCore::buildInsetRectangleString):
        (WebCore::CSSBasicShapeInsetRectangle::cssText):
        (WebCore::CSSBasicShapeInsetRectangle::equals):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShape::box): BasicShapes now have an reference box.
        (WebCore::CSSBasicShape::setBox): Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Shape-inside can also
        parse the box values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): The shape properties use parseShapeProperty,
        while minor adjustments were made to parseBasicShape's return type.
        (WebCore::isBoxValue): Is the CSSValueID one of  the box values.
        (WebCore::CSSParser::parseShapeProperty): Parse one of the shape properties
        and return an appropriate CSSValue.
        (WebCore::CSSParser::parseBasicShape): Return a CSSBasicShape rather than
        adding a ShapeValue to the style.
        * css/CSSParser.h:
        * rendering/style/BasicShapes.h:
        (WebCore::BasicShape::box): Add a box to BasicShape and getters/setters.
        (WebCore::BasicShape::setBox): Ditto.
        (WebCore::BasicShape::BasicShape): Ditto.

2013-11-19  Jer Noble  <jer.noble@apple.com>

        [Mac] 9 WebGL conformance failures after r159518.
        https://bugs.webkit.org/show_bug.cgi?id=124608

        Reviewed by Dean Jackson.

        Once we removed the CIImage drawing path, there was no longer any reason to flip the
        CGImageRef before drawing to the provided GraphicsContext.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):

2013-11-19  Chris Fleizach  <cfleizach@apple.com>

        Web Speech API crashes onboundary event handling with reload
        https://bugs.webkit.org/show_bug.cgi?id=124607

        Reviewed by Tim Horton.

        If the page goes away, we need to cleanup the Mac platform synthesizer object, because
        NSSpeechSynthesizer is retained elsewhere to handle the callbacks (so it doesn't automatically
        get torn down).

        The layout tests for speech rely on a Mock synthesizer, so there is no good way to test this
        Mac platform specific behavior.       

        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper invalidate]):
        (WebCore::PlatformSpeechSynthesizer::~PlatformSpeechSynthesizer):

2013-11-19  Mark Lam  <mark.lam@apple.com>

        Add tracking of endColumn for Executables.
        https://bugs.webkit.org/show_bug.cgi?id=124245.

        Reviewed by Geoffrey Garen.

        Test: js/dom/script-start-end-locations.html

        * ForwardingHeaders/bytecode: Added.
        * ForwardingHeaders/bytecode/CodeBlock.h: Added.
        * WebCore.exp.in:
        * testing/Internals.cpp:
        (WebCore::GetCallerCodeBlockFunctor::GetCallerCodeBlockFunctor):
        (WebCore::GetCallerCodeBlockFunctor::operator()):
        (WebCore::GetCallerCodeBlockFunctor::codeBlock):
        (WebCore::Internals::parserMetaData):
        * testing/Internals.h:
        * testing/Internals.idl:

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [MSE] Support fastSeek() in MediaSource.
        https://bugs.webkit.org/show_bug.cgi?id=124422

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-fastseek.html

        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/MediaSource.h:

        Add support for "seek to the next fastest time" in MediaSource by
        returning the time of the nearest Sync sample.

        Move the data structure logic out of SourceBuffer and into it's own
        class:
        * Modules/mediasource/SampleMap.cpp: Added.
        (WebCore::SampleIsLessThanMediaTimeComparator::operator()):
        (WebCore::SampleIsGreaterThanMediaTimeComparator::operator()):
        (WebCore::SampleIsRandomAccess::operator()):
        (WebCore::SamplePresentationTimeIsWithinRangeComparator::operator()):
        (WebCore::SampleMap::addSample):
        (WebCore::SampleMap::removeSample):
        (WebCore::SampleMap::findSampleContainingPresentationTime):
        (WebCore::SampleMap::findSampleAfterPresentationTime):
        (WebCore::SampleMap::findSampleWithDecodeTime):
        (WebCore::SampleMap::reverseFindSampleContainingPresentationTime):
        (WebCore::SampleMap::reverseFindSampleBeforePresentationTime):
        (WebCore::SampleMap::reverseFindSampleWithDecodeTime):
        (WebCore::SampleMap::findSyncSamplePriorToPresentationTime):
        (WebCore::SampleMap::findSyncSamplePriorToDecodeIterator):
        (WebCore::SampleMap::findSyncSampleAfterPresentationTime):
        (WebCore::SampleMap::findSyncSampleAfterDecodeIterator):
        (WebCore::SampleMap::findSamplesBetweenPresentationTimes):
        (WebCore::SampleMap::findDependentSamples):
        * Modules/mediasource/SampleMap.h: Added.
        (WebCore::SampleMap::presentationBegin):
        (WebCore::SampleMap::presentationEnd):
        (WebCore::SampleMap::decodeBegin):
        (WebCore::SampleMap::decodeEnd):
        (WebCore::SampleMap::reversePresentationBegin):
        (WebCore::SampleMap::reversePresentationEnd):
        (WebCore::SampleMap::reverseDecodeBegin):
        (WebCore::SampleMap::reverseDecodeEnd):

        Add logic to find and return the time of the next & previous sync
        sample, within the threshold provided:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::TrackBuffer::TrackBuffer):
        (WebCore::SourceBuffer::sourceBufferPrivateSeekToTime):
        (WebCore::SourceBuffer::sourceBufferPrivateFastSeekTimeForMediaTime):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        (WebCore::SourceBuffer::setActive):
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample):
        (WebCore::SourceBuffer::sourceBufferPrivateDidBecomeReadyForMoreSamples):
        (WebCore::SourceBuffer::provideMediaData):
        * Modules/mediasource/SourceBuffer.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::setActive):
        * platform/graphics/SourceBufferPrivateClient.h:
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateFastSeekTimeForMediaTime):
        (WebCore::SourceBufferPrivateClient::sourceBufferPrivateSeekToTime):

        Add new files to the project:
        * WebCore.xcodeproj/project.pbxproj:

        Drive-by fixes in HTMLMediaElement:
        * html/HTMLMediaSource.h:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::finishSeek): Cause the MediaSource to check the ready state of all its buffers.
        (HTMLMediaElement::selectNextSourceChild): Pass in whether the source element has a MediaSource URL.

        Implement the seekWithTolerance behavior in MockMediaPlayerMediaSource:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp:
        (WebCore::MockMediaPlayerMediaSource::maxTimeSeekableDouble):
        (WebCore::MockMediaPlayerMediaSource::currentTimeDouble):
        (WebCore::MockMediaPlayerMediaSource::seekWithTolerance):
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp:
        (WebCore::MockMediaSourcePrivate::seekToTime):
        * platform/mock/mediasource/MockMediaSourcePrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockMediaSample::flags):
        (WebCore::MockSourceBufferPrivate::setActive):
        (WebCore::MockSourceBufferPrivate::fastSeekTimeForMediaTime):
        (WebCore::MockSourceBufferPrivate::seekToTime):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2013-11-19  Jer Noble  <jer.noble@apple.com>

        [Mac] 10X slower than Chrome when drawing a video into a canvas
        https://bugs.webkit.org/show_bug.cgi?id=124599

        Reviewed by Dean Jackson.

        Improve performance by creating a CGImageRef which directly references the CVPixelBuffer provided
        by AVPlayerItemVideoOutput:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::CVPixelBufferGetBytePointerCallback):
        (WebCore::CVPixelBufferReleaseBytePointerCallback):
        (WebCore::CVPixelBufferReleaseInfoCallback):
        (WebCore::createImageFromPixelBuffer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateLastImage):

        Additionally, when asked to paint with an AVPlayerItemVideoOutput, block until the output notifies
        its delegate that a pixel buffer is available:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::globalPullDelegateQueue):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::nativeImageForCurrentTime):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::waitForVideoOutputMediaDataWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::outputMediaDataWillChange):
        (-[WebCoreAVFPullDelegate initWithCallback:]):
        (-[WebCoreAVFPullDelegate outputMediaDataWillChange:]):
        (-[WebCoreAVFPullDelegate outputSequenceWasFlushed:]):
        
        To further optimize video -> canvas drawing, add a method which can return a PassNativeImage to be
        drawn directly onto the canvas, rather than rendering into an intermediary context:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::nativeImageForCurrentTime):
        * html/HTMLVideoElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::nativeImageForCurrentTime):
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::nativeImageForCurrentTime):

2013-11-19  Brady Eidson  <beidson@apple.com>

        Consolidate IDBBackingStore*Interface and IDBBackingStore*LevelDB
        https://bugs.webkit.org/show_bug.cgi?id=124597

        Reviewed by Alexey Proskuryakov.

        The Interface abstraction doesn’t make sense anymore, as LevelDB will be the only implementor.

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h: Removed.
        * Modules/indexeddb/IDBBackingStoreInterface.h: Removed.
        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h: Removed.

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h:
        (WebCore::IDBBackingStoreCursorLevelDB::key):
        (WebCore::IDBBackingStoreCursorLevelDB::primaryKey):
        (WebCore::IDBBackingStoreCursorLevelDB::recordIdentifier):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::getOrEstablishIDBDatabaseMetadata):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        (WebCore::IDBBackingStoreLevelDB::deleteDatabase):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:
        (WebCore::IDBBackingStoreTransactionLevelDB::levelDBTransactionFrom):

        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.cpp:
        (WebCore::IDBIndexWriterLevelDB::writeIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::verifyIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):

        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        Get rid of bare new in SVGAnimatedColorAnimator::constructFromString()
        https://bugs.webkit.org/show_bug.cgi?id=124595

        Reviewed by Darin Adler.

        Use std::unique_ptr instead, to manage the arguments passed to the create
        methods of SVGAnimatedType.

        No new tests, covered by existing tests.

        * svg/SVGAnimatedAngle.cpp:
        (WebCore::SVGAnimatedAngleAnimator::constructFromString): Replace bare
        pointer with std::unique_ptr.
        * svg/SVGAnimatedBoolean.cpp:
        (WebCore::SVGAnimatedBooleanAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedColor.cpp:
        (WebCore::SVGAnimatedColorAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedEnumeration.cpp:
        (WebCore::SVGAnimatedEnumerationAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedInteger.cpp:
        (WebCore::SVGAnimatedIntegerAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        (WebCore::SVGAnimatedIntegerOptionalIntegerAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedLength.cpp:
        (WebCore::SVGAnimatedLengthAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedLengthList.cpp:
        (WebCore::SVGAnimatedLengthListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumber.cpp:
        (WebCore::SVGAnimatedNumberAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumberList.cpp:
        (WebCore::SVGAnimatedNumberListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        (WebCore::SVGAnimatedNumberOptionalNumberAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedPointList.cpp:
        (WebCore::SVGAnimatedPointListAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        (WebCore::SVGAnimatedPreserveAspectRatioAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedRect.cpp:
        (WebCore::SVGAnimatedRectAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedString.cpp:
        (WebCore::SVGAnimatedStringAnimator::constructFromString): Ditto.
        * svg/SVGAnimatedTransformList.cpp:
        (WebCore::SVGAnimatedTransformListAnimator::constructFromString):
        Ditto.
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createAngleAndEnumeration): Use
        std::unique_ptr instead of bare pointer as parameter.
        (WebCore::SVGAnimatedType::createBoolean): Ditto.
        (WebCore::SVGAnimatedType::createColor): Ditto.
        (WebCore::SVGAnimatedType::createEnumeration): Ditto.
        (WebCore::SVGAnimatedType::createInteger): Ditto.
        (WebCore::SVGAnimatedType::createIntegerOptionalInteger): Ditto.
        (WebCore::SVGAnimatedType::createLength): Ditto.
        (WebCore::SVGAnimatedType::createLengthList): Ditto.
        (WebCore::SVGAnimatedType::createNumber): Ditto.
        (WebCore::SVGAnimatedType::createNumberList): Ditto.
        (WebCore::SVGAnimatedType::createNumberOptionalNumber): Ditto.
        (WebCore::SVGAnimatedType::createPointList): Ditto.
        (WebCore::SVGAnimatedType::createPreserveAspectRatio): Ditto.
        (WebCore::SVGAnimatedType::createRect): Ditto.
        (WebCore::SVGAnimatedType::createString): Ditto.
        (WebCore::SVGAnimatedType::createTransformList): Ditto.
        * svg/SVGAnimatedType.h: Use std::unique_ptr as parameter in the
        create methods.
        * svg/SVGAnimatedTypeAnimator.h:
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValue): Make
        helper return std::unique_ptr instead of bare pointer.
        (WebCore::SVGAnimatedTypeAnimator::constructFromBaseValues): Ditto.

2013-11-19  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Refactor RectangleShape
        https://bugs.webkit.org/show_bug.cgi?id=124416

        Privatize and rename the FloatRoundedRect class defined in RectangleShape.h.
        The new class is called RectangleShape::ShapeBounds. This change enables
        creating a proper FloatRoundedRect analog of the existing RoundedRect class;
        part of adding support for box shapes, per the latest CSS spec.

        Reviewed by Dean Jackson.

        No new tests, just refactoring.

        * rendering/shapes/RectangleShape.cpp:
        (WebCore::RectangleShape::ShapeBounds::paddingBounds):
        (WebCore::RectangleShape::ShapeBounds::marginBounds):
        (WebCore::RectangleShape::ShapeBounds::cornerInterceptForWidth):
        (WebCore::RectangleShape::shapePaddingBounds):
        (WebCore::RectangleShape::shapeMarginBounds):
        (WebCore::RectangleShape::getExcludedIntervals):
        (WebCore::RectangleShape::getIncludedIntervals):
        (WebCore::RectangleShape::firstIncludedIntervalLogicalTop):
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::ShapeBounds::ShapeBounds):
        (WebCore::RectangleShape::ShapeBounds::rx):
        (WebCore::RectangleShape::ShapeBounds::ry):

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        Mark classes deriving from SVGAnimatedTypeAnimator as FINAL
        https://bugs.webkit.org/show_bug.cgi?id=124456

        Reviewed by Darin Adler.

        Also add OVERRIDE to their virtual methods appropriately and remove
        existing empty virtual destructors.

        No new tests, covered by existing ones.

        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.h:

2013-11-19  Brady Eidson  <beidson@apple.com>

        Add WebIDBServerConnection and DatabaseProcessIDBConnection stubs
        https://bugs.webkit.org/show_bug.cgi?id=124562

        Reviewed by Alexey Proskuryakov.

        Export some more symbols and headers for WK2 to use.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Frédéric Wang  <fred.wang@free.fr>

        Map the dir attribute to the CSS direction property.
        https://bugs.webkit.org/show_bug.cgi?id=124572.

        Reviewed by Darin Adler.

        Tests: mathml/presentation/direction-overall.html
               mathml/presentation/direction-token.html
               mathml/presentation/direction.html

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::isPresentationAttribute): add dir
        (WebCore::MathMLElement::collectStyleForPresentationAttribute): map dir
        * mathml/mathattrs.in: add the dir attribute
        * mathml/mathtags.in: add the mstyle tag (needed to use mstyleTag)

2013-11-19  Sergio Correia  <sergio.correia@openbossa.org>

        [SVG] Convert OwnPtr/PassOwnPtr to std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124382

        Reviewed by Darin Adler.

        The files modified are mostly under WebCore/svg/; in a few cases, some
        "external" files needed changes as well.

        No new tests, covered by existing ones.

        * css/CSSFontFaceSource.cpp:
        * loader/cache/CachedImage.cpp:
        * loader/cache/CachedImage.h:
        * platform/graphics/SimpleFontData.cpp:
        * platform/graphics/SimpleFontData.h:
        * rendering/svg/RenderSVGResourceContainer.cpp:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimatedAngle.cpp:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.cpp:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedColor.cpp:
        * svg/SVGAnimatedColor.h:
        * svg/SVGAnimatedEnumeration.cpp:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedInteger.cpp:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedIntegerOptionalInteger.cpp:
        * svg/SVGAnimatedIntegerOptionalInteger.h:
        * svg/SVGAnimatedLength.cpp:
        * svg/SVGAnimatedLength.h:
        * svg/SVGAnimatedLengthList.cpp:
        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumber.h:
        * svg/SVGAnimatedNumberList.cpp:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.h:
        * svg/SVGAnimatedPath.cpp:
        * svg/SVGAnimatedPath.h:
        * svg/SVGAnimatedPointList.cpp:
        * svg/SVGAnimatedPointList.h:
        * svg/SVGAnimatedPreserveAspectRatio.cpp:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.cpp:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimatedString.cpp:
        * svg/SVGAnimatedString.h:
        * svg/SVGAnimatedTransformList.cpp:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGAnimatedType.cpp:
        * svg/SVGAnimatedType.h:
        * svg/SVGAnimatedTypeAnimator.cpp:
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGAnimatorFactory.h:
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGFontData.h:
        * svg/SVGFontElement.cpp:
        * svg/SVGFontElement.h:
        * svg/SVGGraphicsElement.cpp:
        * svg/SVGGraphicsElement.h:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathParser.h:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathStringSource.h:
        * svg/SVGPathUtilities.cpp:
        * svg/SVGPathUtilities.h:
        * svg/animation/SMILTimeContainer.cpp:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/SVGImage.cpp:
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageCache.h:
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        * svg/properties/SVGAttributeToPropertyMap.h:

2013-11-19  Zoltan Horvath  <zoltan@webkit.org>

        Add LineInlineHeaders.h to WebCore.xcodeproj
        <https://webkit.org/b/124460>

        Reviewed by Csaba Osztrogonác.

        LineInlineHeaders.h (r159354) hasn't been added to WebCore.xcodeproj. This patch adds to it.

        No new tests, no behavior change.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-19  Krzysztof Czech  <k.czech@samsung.com>

        [AX] Use std::unique_ptr to manage AXComputedObjectAttributeCache
        https://bugs.webkit.org/show_bug.cgi?id=124404

        Reviewed by Mario Sanchez Prada.

        Convert OwnPtr/PassOwnPtr to std::unique_ptr.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::startCachingComputedObjectAttributesUntilTreeMutates):
        (WebCore::AXObjectCache::stopCachingComputedObjectAttributes):
        * accessibility/AXObjectCache.h:
        (WebCore::AXComputedObjectAttributeCache::AXComputedObjectAttributeCache):

2013-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Add more assertions with security implications in DocumentOrderedMap
        https://bugs.webkit.org/show_bug.cgi?id=124559

        Reviewed by Antti Koivisto.

        Assert that newly added elements and existing elements in the document ordered map are in the same tree scope
        as the document ordered map. Also exit early if we're about to add an element in a wrong document to the map.
        We don't exit early in get() because the damage has already been done at that point (the element may have been
        deleted already).

        * dom/Document.cpp:
        (WebCore::Document::addImageElementByLowercasedUsemap):
        * dom/DocumentOrderedMap.cpp:
        (WebCore::DocumentOrderedMap::add): Assert that the newly added element is in the current tree scope.
        Also exit early if either the element is not in the tree scope or not in the right document.
        While this doesn't make the function completely fault safe, it'll catch when we try to add a detached node.
        (WebCore::DocumentOrderedMap::remove): Convert existing assertions to ones with security implication.
        (WebCore::DocumentOrderedMap::get): Assert with security implication that the element we're about to return
        is in the current tree scope. The element may have already been deleted if we ever hit these assertions.
        (WebCore::DocumentOrderedMap::getAllElementsById):  Convert an existing assertion to an assertion with security
        implication.
        * dom/DocumentOrderedMap.h:
        * dom/TreeScope.cpp:
        (WebCore::TreeScope::addElementById):
        (WebCore::TreeScope::addElementByName):
        (WebCore::TreeScope::addImageMap):
        (WebCore::TreeScope::addLabel):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::addDocumentNamedItem):
        (WebCore::HTMLDocument::addWindowNamedItem):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto): Set InTreeScope flag before calling addImageElementByLowercasedUsemap.
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::insertedInto): Ditto for addImageMap.

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159455.
        http://trac.webkit.org/changeset/159455
        https://bugs.webkit.org/show_bug.cgi?id=124568

        broke two api tests (see bug 124564) (Requested by thorton on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Removed.
        * page/FrameSnapshotting.h: Removed.
        * page/mac/FrameMac.mm: Copied from Source/WebCore/page/win/FrameWin.h.
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/mac/FrameSnapshottingMac.h: Copied from Source/WebCore/page/win/FrameWin.h.
        * page/mac/FrameSnapshottingMac.mm: Added.
        (WebCore::imageFromRect):
        (WebCore::selectionImage):
        (WebCore::rangeImage):
        (WebCore::snapshotDragImage):
        * page/win/FrameWin.cpp:
        (WebCore::Frame::dragImageForSelection):
        (WebCore::Frame::nodeImage):
        * page/win/FrameWin.h:
        * platform/DragImage.cpp:
        (WebCore::fitDragImageToMaxSize):
        (WebCore::createDragImageForLink):
        * platform/DragImage.h:

2013-11-18  Mark Rowe  <mrowe@apple.com>

        Use hw.activecpu for determining how many processes to spawn.

        It's documented as the preferred way to determine the number of threads
        or processes to create in a SMP aware application.

        Rubber-stamped by Tim Horton.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-18  Samuel White  <samuel_white@apple.com>

        AX: aria-labelledby should be used in preference to aria-labeledby
        https://bugs.webkit.org/show_bug.cgi?id=62351

        Reviewed by Chris Fleizach.

        Making sure aria-labelled by overrides the incorrectly spelled aria-labeledby attribute.

        Test: accessibility/aria-labelledby-overrides-aria-labeledby.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::ariaLabeledByElements):

2013-11-18  Zalan Bujtas  <zalan@apple.com>

        use after free in WebCore::DocumentOrderedMap::remove / WebCore::TreeScope::removeElementById
        https://bugs.webkit.org/show_bug.cgi?id=121324

        Reviewed by Ryosuke Niwa.

        Update the document ordered map for an image element before dispatching load or error events
        when it's inserted into a document.

        Test: fast/dom/modify-node-and-while-in-the-callback-too-crash.html

        * dom/DocumentOrderedMap.cpp: defensive fix to avoid use after free issues.
        (WebCore::DocumentOrderedMap::remove):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedInto):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement): setting m_failedLoadURL makes
        repeated updateFromElement calls return early.

2013-11-18  Benjamin Poulain  <bpoulain@apple.com>

        Upstream iOS's ResourceHandle implementation
        https://bugs.webkit.org/show_bug.cgi?id=124554

        Reviewed by Sam Weinig.

        * platform/network/ResourceHandle.h:
        (WebCore::ResourceHandle::quickLookHandle):
        (WebCore::ResourceHandle::setQuickLookHandle):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::connectionProperties):
        (WebCore::ResourceHandleClient::shouldCacheResponse):
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::synthesizeRedirectResponseIfNecessary):
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveDataArray):
        (WebCore::didReceiveData):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::willCacheResponse):
        (WebCore::canRespondToProtectionSpace):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willSendRequest):
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        (WebCore::ResourceHandle::currentRequest):
        (WebCore::ResourceHandle::connectionClientCallbacks):

2013-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159430.
        http://trac.webkit.org/changeset/159430
        https://bugs.webkit.org/show_bug.cgi?id=124548

        WebCore can know nothing about nor use files from WebKit/
        (Requested by thorton on #webkit).

        * DerivedSources.make:

2013-11-18  Brady Eidson  <beidson@apple.com>

        Remove IDBServerConnection's deprecatedBackingStore()
        https://bugs.webkit.org/show_bug.cgi?id=124547

        Reviewed by Tim Horton.

        It is no longer needed, as the front end no longer knows about the backing store.

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-18  Samuel White  <samuel_white@apple.com>

        AX: Add ability to fetch only visible table rows.
        https://bugs.webkit.org/show_bug.cgi?id=124430

        Reviewed by Chris Fleizach.

        Adding AccessibilityTable::visibleRows method to support AXVisibleRows attribute mac platform.

        Test: platform/mac/accessibility/table-visible-rows.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::visibleRows):
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTableRow.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-18  Simon Fraser  <simon.fraser@apple.com>

        At some scales, opaque compositing layers have garbage pixels around the edges
        https://bugs.webkit.org/show_bug.cgi?id=124541

        Reviewed by Dean Jackson.
        
        Layers get marked as having opaque contents when their background is
        known to paint the entire layer. However, this failed to take into
        account two reasons why every pixel may not get painted.
        
        First, subpixel layout can result in non-integral RenderLayer
        bounds, which will get rounded up to an integral GraphicsLayer
        size. When this happens we may not paint edge pixels.
        
        Second, at non-integral scale factors, graphics context scaling
        may cause us to not paint edge pixels.
        
        Fix by only marking PlatformCALayers as having opaque contents
        when the contentsScale of the layer is integral.

        Not testable, because we can't guarantee to get garbage pixels
        in a ref test, and layer dumps show GraphicsLayer's notion of
        content opaqueness, not the one we set on the PlatformCALayer.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::isIntegral):
        (WebCore::clampedContentsScaleForScale):
        (WebCore::GraphicsLayerCA::updateRootRelativeScale):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsOpaque):
        (WebCore::GraphicsLayerCA::getTransformFromAnimationsWithMaxScaleImpact):
        Drive-by typo fix.
        (WebCore::GraphicsLayerCA::noteChangesForScaleSensitiveProperties):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):

2013-11-18  David Hyatt  <hyatt@apple.com>

        Add a quirk to not respect center text-align when positioning

        <rdar://problem/15427571>
        https://bugs.webkit.org/show_bug.cgi?id=124522

        Reviewed by Simon Fraser.

        Added fast/block/legacy-text-align-position-quirk.html

        * page/Settings.in:
        Add the quirk setting.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::startAlignedOffsetForLine):
        Don't pay attention to center text-align when the quirk is set.

2013-11-18  Brian J. Burg  <burg@cs.washington.edu>

        Consolidate various frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124325

        Reviewed by Timothy Hatcher.

        Various snapshot creation methods had duplicated code and were split
        between Frame, DragImage, and platform-specific implementationss.
        This patch puts WebCore snapshot methods into FrameSnapshotting
        and removes platform implementations where possible.

        DragImage methods reuse snapshot methods where possible. Inspector
        will be able to take snapshots without using drag images.

        No new tests, this is a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        (-[DOMRange renderedImageForcingBlackText:]):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::createDragImage):
        * dom/ClipboardMac.mm:
        (WebCore::Clipboard::createDragImage):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/Frame.cpp:
        * page/Frame.h:
        * page/FrameSnapshotting.cpp: Added.
        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
        (WebCore::snapshotFrameRect): Move most buffer logic to here.
        (WebCore::snapshotSelection): Moved from Frame.
        (WebCore::snapshotNode): Moved from Frame.
        * page/FrameSnapshotting.h: Added.
        * page/mac/FrameMac.mm: Removed.
        * page/mac/FrameSnapshottingMac.h: Removed.
        * page/mac/FrameSnapshottingMac.mm: Removed.
        * page/win/FrameWin.cpp: remove duplicate implementation.
        * page/win/FrameWin.h: Fix an incorrect parameter name.
        * platform/DragImage.cpp:
        (WebCore::ScopedNodeDragState::ScopedNodeDragState):
        (WebCore::ScopedNodeDragState::~ScopedNodeDragState):
        (WebCore::createDragImageFromSnapshot): Boilerplate buffer conversion.
        (WebCore::createDragImageForNode):
        (WebCore::createDragImageForSelection):
        (WebCore::ScopedFrameSelectionState::ScopedFrameSelectionState):
        (WebCore::ScopedFrameSelectionState::~ScopedFrameSelectionState):
        (WebCore::createDragImageForRange): Moved from Frame.
        (WebCore::createDragImageForImage): Moved from FrameSnapshottingMac.
        (WebCore::createDragImageForLink): use nullptr.

2013-11-18  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Crash when using media source
        https://bugs.webkit.org/show_bug.cgi?id=124525

        Reviewed by Philippe Normand.

        No new tests because this is already covered by tests in media/media-source (which aren't enabled because the feature isn't done).

        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp:
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer): Add missing adoptRef()

2013-11-18  Brady Eidson  <beidson@apple.com>

        Remove unneeded BackingStore-related #include from IDBFactoryBackendInterface

        Rubberstamped by Beth Dakin.

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

2013-11-18  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Change mediasource and mediastream modules to use nullptr
        https://bugs.webkit.org/show_bug.cgi?id=124530

        Reviewed by Tim Horton.

        No new tests needed, no behavior change.

        * Modules/mediasource/MediaSource.cpp:
        * Modules/mediasource/SourceBuffer.cpp:
        * Modules/mediastream/MediaStream.cpp:
        * Modules/mediastream/RTCDTMFSender.cpp:
        * Modules/mediastream/RTCDataChannel.cpp:
        * Modules/mediastream/RTCIceCandidate.cpp:
        * Modules/mediastream/RTCPeerConnection.cpp:
        * Modules/mediastream/RTCSessionDescription.cpp:
        * Modules/mediastream/RTCStatsResponse.cpp:
        * Modules/mediastream/UserMediaRequest.cpp:

2013-11-18  Brady Eidson  <beidson@apple.com>

        Move execution of IDBCursorBackendOperations to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124463

        Reviewed by Tim Horton.

        This almost entirely removes knowledge of the backing store from the front end.

        The primary change here is to give cursors a unique ID.

        This way the IDBCursorBackend can reference itself by ID, while the 
        IDBServerConnection can handle mapping that ID to a backing store.

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h:

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::IDBCursorBackend::IDBCursorBackend):
        (WebCore::IDBCursorBackend::deleteFunction):
        (WebCore::IDBCursorBackend::prefetchReset):
        (WebCore::IDBCursorBackend::close):
        (WebCore::IDBCursorBackend::updateCursorData):
        (WebCore::IDBCursorBackend::clearCursorData):
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::create):
        (WebCore::IDBCursorBackend::key):
        (WebCore::IDBCursorBackend::primaryKey):
        (WebCore::IDBCursorBackend::value):
        (WebCore::IDBCursorBackend::id):
        (WebCore::IDBCursorBackend::transaction):
        (WebCore::IDBCursorBackend::setSavedCursorID):

        * Modules/indexeddb/IDBCursorBackendOperations.cpp:
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        (WebCore::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h:
        (WebCore::CursorIterationOperation::key):
        (WebCore::CursorIterationOperation::callbacks):
        (WebCore::CursorAdvanceOperation::count):
        (WebCore::CursorAdvanceOperation::callbacks):
        (WebCore::CursorPrefetchIterationOperation::numberToFetch):
        (WebCore::CursorPrefetchIterationOperation::callbacks):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h:
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreCursorImpl::create):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        (WebCore::IDBServerConnectionLevelDB::createObjectStore):
        (WebCore::IDBServerConnectionLevelDB::createIndex):
        (WebCore::IDBServerConnectionLevelDB::deleteIndex):
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::put):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):
        (WebCore::IDBServerConnectionLevelDB::deleteObjectStore):
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion):
        (WebCore::IDBServerConnectionLevelDB::cursorAdvance):
        (WebCore::IDBServerConnectionLevelDB::cursorIterate):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchIteration):
        (WebCore::IDBServerConnectionLevelDB::cursorPrefetchReset):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-17  Jer Noble  <jer.noble@apple.com>

        [WTF] Media time should not have a constructor which accepts a single int or float.
        https://bugs.webkit.org/show_bug.cgi?id=124470

        Reviewed by Eric Carlson.

        Fix the compile error exposed by removing the default parameter in the MediaTime constructor.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::setTimestampOffset):

2013-11-18  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Change webaudio to use nullptr for null pointers
        https://bugs.webkit.org/show_bug.cgi?id=124526

        Reviewed by Anders Carlsson.

        No new tests needed, no behavior change.

        * Modules/webaudio/AudioBuffer.cpp:
        * Modules/webaudio/AudioContext.cpp:
        * Modules/webaudio/AudioNode.cpp:
        * Modules/webaudio/ChannelMergerNode.cpp:
        * Modules/webaudio/ChannelSplitterNode.cpp:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        * Modules/webaudio/OfflineAudioContext.cpp:
        * Modules/webaudio/PeriodicWave.cpp:
        * Modules/webaudio/ScriptProcessorNode.cpp:

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Basic authentication is not reused.
        https://bugs.webkit.org/show_bug.cgi?id=124452

        Reviewed by Brent Fulgham.

        After a successful basic authentication, the credentials are not reused for later requests.
        In the CFNetwork port, this is solved by trying basic authentication first, if credentials exists.
        Also, when a 401 response is received, the first thing the CFNetwork port does, is to use
        m_user/m_pass as credentials in the following request if they are set.
        This can be done the same way for the Curl version.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Try using m_user/m_pass as credentials first, if they are set.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::applyAuthenticationToRequest): Try basic authentication first, if credentials exists.

2013-11-18  Mátyás Mustoha  <mmatyas@inf.u-szeged.hu>

        [curl] Add file cache
        https://bugs.webkit.org/show_bug.cgi?id=123333

        Reviewed by Brent Fulgham.

        Implementation of on disc file cache
        for the curl network backend.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/curl/CurlCacheEntry.cpp: Added.
        (WebCore::CurlCacheEntry::CurlCacheEntry):
        (WebCore::CurlCacheEntry::~CurlCacheEntry):
        (WebCore::CurlCacheEntry::isCached):
        (WebCore::CurlCacheEntry::requestHeaders):
        (WebCore::CurlCacheEntry::saveCachedData):
        (WebCore::CurlCacheEntry::loadCachedData):
        (WebCore::CurlCacheEntry::saveResponseHeaders):
        (WebCore::CurlCacheEntry::loadResponseHeaders):
        (WebCore::CurlCacheEntry::setResponseFromCachedHeaders):
        (WebCore::CurlCacheEntry::didFail):
        (WebCore::CurlCacheEntry::didFinishLoading):
        (WebCore::CurlCacheEntry::generateBaseFilename):
        (WebCore::CurlCacheEntry::loadFileToBuffer):
        (WebCore::CurlCacheEntry::invalidate):
        (WebCore::CurlCacheEntry::parseResponseHeaders):
        * platform/network/curl/CurlCacheEntry.h: Added.
        (WebCore::CurlCacheEntry::isInMemory):
        * platform/network/curl/CurlCacheManager.cpp: Added.
        (WebCore::CurlCacheManager::getInstance):
        (WebCore::CurlCacheManager::CurlCacheManager):
        (WebCore::CurlCacheManager::~CurlCacheManager):
        (WebCore::CurlCacheManager::setCacheDirectory):
        (WebCore::CurlCacheManager::loadIndex):
        (WebCore::CurlCacheManager::saveIndex):
        (WebCore::CurlCacheManager::didReceiveResponse):
        (WebCore::CurlCacheManager::didFinishLoading):
        (WebCore::CurlCacheManager::isCached):
        (WebCore::CurlCacheManager::requestHeaders):
        (WebCore::CurlCacheManager::didReceiveData):
        (WebCore::CurlCacheManager::saveResponseHeaders):
        (WebCore::CurlCacheManager::invalidateCacheEntry):
        (WebCore::CurlCacheManager::didFail):
        (WebCore::CurlCacheManager::loadCachedData):
        * platform/network/curl/CurlCacheManager.h: Added.
        (WebCore::CurlCacheManager::getCacheDirectory):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback):
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):

2013-11-18  peavo@outlook.com  <peavo@outlook.com>

        [Win] WebKit version in user agent string is incorrect.
        https://bugs.webkit.org/show_bug.cgi?id=124454

        Reviewed by Brent Fulgham.

        * DerivedSources.make: Generate WebKitVersion.h

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add inspector json files to EXTRA_DIST and
        remove maketokenizer from EXTRA_DIST.
        * GNUmakefile.list.am: Add missing header files.

2013-11-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toHTMLDataList|Html|EmbedElement
        https://bugs.webkit.org/show_bug.cgi?id=124482

        Reviewed by Tim Horton.

        To clean up static_cast<HTMLFoo*>, toHTMLEmbedElement, toHTMLHtmlElement, toHTMLDataListElement
        are generated.

        No new tests, no behavior changes.

        * html/HTMLDataListElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::dataList):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerDataListElement):
        * html/HTMLTagNames.in:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocument::replaceMediaElementTimerFired):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintSliderTicks):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2013-11-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up static_cast<HTMLFoo*> usage
        https://bugs.webkit.org/show_bug.cgi?id=124480

        Reviewed by Tim Horton.

        Though there are toHTMLFoo(), some places are still using static_cast<>.
        Additionally, toHTMLBodyElement() is supported from now.

        No new tests, no behavior changes.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isRequired):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isDataTable):
        * bindings/js/JSHTMLFrameSetElementCustom.cpp:
        (WebCore::JSHTMLFrameSetElement::nameGetter):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginInstance):
        * dom/Document.cpp:
        (WebCore::Document::openSearchDescriptionURL):
        (WebCore::Document::iconURLs):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuilder):
        * editing/ios/EditorIOS.mm:
        (WebCore::Editor::setTextAlignmentForChangedBaseWritingDirection):
        * html/HTMLBodyElement.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::bgColor):
        (WebCore::HTMLDocument::setBgColor):
        (WebCore::HTMLDocument::fgColor):
        (WebCore::HTMLDocument::setFgColor):
        (WebCore::HTMLDocument::alinkColor):
        (WebCore::HTMLDocument::setAlinkColor):
        (WebCore::HTMLDocument::linkColor):
        (WebCore::HTMLDocument::setLinkColor):
        (WebCore::HTMLDocument::vlinkColor):
        (WebCore::HTMLDocument::setVlinkColor):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::updateAncestorDisabledState):
        (WebCore::HTMLFormControlElement::enclosingFormControlElement):
        * html/HTMLFormElement.cpp:
        (WebCore::submitElementFromEvent):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::virtualForm):
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::checkElementMatchesRadioNodeListFilter):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r158760.

        * bindings/gobject/webkitdom.symbols: Add
        webkit_dom_text_track_get_id prototype.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r158821): [GTK] API break due to removed properties in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=124489

        Reviewed by Philippe Normand.

        In r158821, several properties were changed from readonly to
        CustomSetter. The GObject DOM bindings currently skips any
        attribute having a custom getter or setter, and those properties
        are not generated anymore. We should add support for generating
        attributes having a custom getter or setter in GObject DOM
        bindings generator, but to fix the ABI break now we bring the old
        implementatiom back as custom implementation. This fixes the ABI
        compatibility, but not the API since the GObject properties are
        not generated.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_audio_track_get_kind):
        (webkit_dom_audio_track_get_language):
        (webkit_dom_text_track_get_kind):
        (webkit_dom_text_track_get_language):
        (webkit_dom_video_track_get_kind):
        (webkit_dom_video_track_get_language):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r158662.

        * bindings/gobject/webkitdom.symbols: Add missing prototypes.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Update GObject DOM symbols file after r159208 and r159363.

        * bindings/gobject/webkitdom.symbols: Add
        webkit_dom_html_media_element_fast_seek prototype.

2013-11-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r159363): [GTK] API break in webkit_dom_html_media_element_set_current_time
        https://bugs.webkit.org/show_bug.cgi?id=124485

        Reviewed by Philippe Normand.

        In r159363 currentTime attribute was changed to not raise
        exceptions. This breaks the API of GObject DOM bindings because we
        use a GError parameter for exceptions that has been removed.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_set_current_time): Custom
        implementation that receives a GError for backwards
        compatibility.
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Add
        webkit_dom_html_media_element_set_current_time prototype.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction): Skip
        webkit_dom_html_media_element_set_current_time since we are adding
        a custom implementation.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        Support exporting public RSASSA-PKCS1-v1_5 keys
        https://bugs.webkit.org/show_bug.cgi?id=124475

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsa-export-key.html

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::buildJSONForRSAComponents):
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON):
        (WebCore::JSCryptoKeySerializationJWK::serialize):
        Added said support (this part works with private keys too).

        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::getPublicKeyComponents): Moved the logic for getting a
        public key from private one here for reuse in keySizeInBits().
        (WebCore::CryptoKeyRSA::isRestrictedToHash):
        (WebCore::CryptoKeyRSA::keySizeInBits):
        (WebCore::CryptoKeyRSA::exportData):
        Exposed information necessary for JWK serialization.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        RSASSA-PKCS1-v1_5 JWK import doesn't check key size
        https://bugs.webkit.org/show_bug.cgi?id=124472

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsassa-pkcs1-v1_5-import-jwk-small-key.html

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid): Added the checks.
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Check key size when
        importing.
        (WebCore::JSCryptoKeySerializationJWK::serialize): Updated a comment.

        * crypto/keys/CryptoKeySerializationRaw.cpp: (WebCore::CryptoKeySerializationRaw::serialize):
        Updated a comment.

2013-11-17  Alexey Proskuryakov  <ap@apple.com>

        JWK crypto key export result is a DOM string instead of an array buffer
        https://bugs.webkit.org/show_bug.cgi?id=124473

        Reviewed by Sam Weinig.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::exportKey):
        Fix it.

2013-11-17  Sam Weinig  <sam@webkit.org>

        LayoutStateMaintainer should use references where possible
        https://bugs.webkit.org/show_bug.cgi?id=124471

        Reviewed by Dan Bernstein.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::simplifiedLayout):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::pushFlowThreadLayoutState):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::pushLayoutStateForCurrentFlowThread):
        * rendering/RenderView.h:
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        Use uint8_t vectors for WebCrypto data
        https://bugs.webkit.org/show_bug.cgi?id=124466

        Reviewed by Sam Weinig.

        Using Vector<char> for crypto key data is somewhat non-idiomatic, and it gets simply
        dangerous for bignums, because signed arithmetic is not appropriate for bignum digits.

        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::generateSecWebSocketKey):
        (WebCore::WebSocketHandshake::getExpectedWebSocketAccept):
        No longer need to cast data to char* here.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * crypto/CryptoDigest.h:
        * crypto/CryptoKey.h:
        * crypto/keys/CryptoKeyAES.cpp:
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        * crypto/keys/CryptoKeyDataRSAComponents.cpp:
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.cpp:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        * crypto/mac/CryptoDigestMac.cpp:
        * crypto/mac/CryptoKeyMac.cpp:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        Switched to Vector<uint8_t>.

        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::getPublicKeyComponents): Extracted from buildAlgorithmDescription() and simplified.
        (WebCore::CryptoKeyRSA::create): Switched to Vector<uint8_t>.
        (WebCore::CryptoKeyRSA::buildAlgorithmDescription): No longer need to copy data just
        to change type from Vector<char> to Vector<unsigned char>.
        (WebCore::bigIntegerToUInt32): Ditto. No longer need to cast types when dealing with the bignum.
        (WebCore::CryptoKeyRSA::generatePair): Improved an error message a little.

        * fileapi/FileReaderLoader.cpp: (WebCore::FileReaderLoader::convertToDataURL):
        * inspector/DOMPatchSupport.cpp: (WebCore::DOMPatchSupport::createDigest):
        * inspector/InspectorPageAgent.cpp: (WebCore::InspectorPageAgent::archive):
        * platform/graphics/cg/ImageBufferCG.cpp: (WebCore::CGImageToDataURL):
        No longer need to cast data to char* here.

2013-11-17  Antti Koivisto  <antti@apple.com>

        REGRESSION (r158774): Iteration over element children is broken
        https://bugs.webkit.org/show_bug.cgi?id=124145

        Reviewed by Anders Carlsson.
        
        Mutation during traversal invalidates the position cache. After the mid-point we start
        traversing backwards as it the shortest path. However backward traversal of children-only
        HTMLCollection was wrong and would end up going to descendants.
        
        Reduction by yannick.poirier@inverto.tv.

        Test: fast/dom/htmlcollection-children-mutation.html

        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::collectionTraverseBackward):
        
            Traverse direct children only when m_shouldOnlyIncludeDirectChildren bit is set.

2013-11-17  Zoltan Horvath  <zoltan@webkit.org>

        Move LineLayoutState.h into rendering/line
        <https://webkit.org/b/124458>

        Reviewed by Mihnea Ovidenie.

        LineLayoutState is a helper class of RenderBlockLineLayout, so I'm moving it into line subdirectory.

        No new tests, no behavior change.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/line/LineLayoutState.h: Renamed from Source/WebCore/rendering/LineLayoutState.h.
        (WebCore::FloatWithRect::FloatWithRect):
        (WebCore::LineLayoutState::LineLayoutState):
        (WebCore::LineLayoutState::lineInfo):
        (WebCore::LineLayoutState::endLineLogicalTop):
        (WebCore::LineLayoutState::setEndLineLogicalTop):
        (WebCore::LineLayoutState::endLine):
        (WebCore::LineLayoutState::setEndLine):
        (WebCore::LineLayoutState::lastFloat):
        (WebCore::LineLayoutState::setLastFloat):
        (WebCore::LineLayoutState::floats):
        (WebCore::LineLayoutState::floatIndex):
        (WebCore::LineLayoutState::setFloatIndex):
        (WebCore::LineLayoutState::adjustedLogicalLineTop):
        (WebCore::LineLayoutState::setAdjustedLogicalLineTop):
        (WebCore::LineLayoutState::flowThread):
        (WebCore::LineLayoutState::setFlowThread):
        (WebCore::LineLayoutState::endLineMatched):
        (WebCore::LineLayoutState::setEndLineMatched):
        (WebCore::LineLayoutState::checkForFloatsFromLastLine):
        (WebCore::LineLayoutState::setCheckForFloatsFromLastLine):
        (WebCore::LineLayoutState::markForFullLayout):
        (WebCore::LineLayoutState::isFullLayout):
        (WebCore::LineLayoutState::usesRepaintBounds):
        (WebCore::LineLayoutState::setRepaintRange):
        (WebCore::LineLayoutState::updateRepaintRangeFromBox):

2013-11-17  Antti Koivisto  <antti@apple.com>

        Simple line path does not respect visibility:hidden
        https://bugs.webkit.org/show_bug.cgi?id=124467

        Reviewed by Anders Carlsson.

        Test: fast/text/text-visibility.html

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintFlow):

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto no longer uses sequences of ArrayBuffers
        https://bugs.webkit.org/show_bug.cgi?id=124451

        Build fix.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::calculateSignature):
        Now that the function became shorter, clang realized that a variable was used
        uninitialized in an impossible code path.

2013-11-16  Alexey Proskuryakov  <ap@apple.com>

        WebCrypto no longer uses sequences of ArrayBuffers
        https://bugs.webkit.org/show_bug.cgi?id=124451

        Reviewed by Sam Weinig.

        Covered by existing tests.

        Changed all operations to take single CryptoOperationData objects.

        * bindings/js/JSCryptoOperationData.cpp:
        * bindings/js/JSCryptoOperationData.h:
        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt):
        (WebCore::JSSubtleCrypto::decrypt):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        * crypto/CryptoAlgorithm.cpp:
        (WebCore::CryptoAlgorithm::encrypt):
        (WebCore::CryptoAlgorithm::decrypt):
        (WebCore::CryptoAlgorithm::sign):
        (WebCore::CryptoAlgorithm::verify):
        (WebCore::CryptoAlgorithm::digest):
        * crypto/CryptoAlgorithm.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h:
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp:
        (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA1.h:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp:
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.h:
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp:
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.h:
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp:
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.h:
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp:
        (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:

2013-11-16  Zoltan Horvath  <zoltan@webkit.org>

        Remove the include of LineWidth.h from SimpleLineLayoutFunctions.cpp
        <https://webkit.org/b/124449>

        Reviewed by Antti Koivisto.

        I removed the include of LineWidth, since SimpleLineLayoutFunctions.cpp doesn't use it.

        No new tests, no behavior change.

        * rendering/SimpleLineLayoutFunctions.cpp:

2013-11-15  Alexey Proskuryakov  <ap@apple.com>

        Support exporting symmetric keys as JWK
        https://bugs.webkit.org/show_bug.cgi?id=124442

        Reviewed by Sam Weinig.

        Error handling is not consistent yet - some errors cause exceptions, and others
        result in rejected promises. This part of spec is incomplete, so I basically did
        what was most straightforward in each case.

        * bindings/js/JSCryptoKeySerializationJWK.h: 
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Updated a comment with a better link.
        (WebCore::JSCryptoKeySerializationJWK::buildJSONForOctetSequence): A helper to building JWK.
        (WebCore::JSCryptoKeySerializationJWK::addToJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::addBoolToJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::addJWKAlgorithmToJSON): Ditto. The code for
        mapping is my best guess, this all needs to be specified.
        (WebCore::JSCryptoKeySerializationJWK::addJWKUseToJSON): A helper to building JWK.
        (WebCore::JSCryptoKeySerializationJWK::serialize): Build a JSON string for the key.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::importKey): Updated a comment.
        (WebCore::JSSubtleCrypto::exportKey): Use CryptoKeySerialization (also for raw keys,
        for consistency).

        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::algorithmIdentifier):
        (WebCore::CryptoKey::usagesBitmap):
        Exposed data needed for building JWK (it used to be only exposed in a form suitable
        for DOM accessors).

        * crypto/keys/CryptoKeyHMAC.h: Ditto, added an accessor for JWK.

        * crypto/keys/CryptoKeySerializationRaw.cpp: (WebCore::CryptoKeySerializationRaw::serialize):
        * crypto/keys/CryptoKeySerializationRaw.h:
        Moved from JSSubtleCryptoCustom.cpp for consistency.

2013-11-15  Brady Eidson  <beidson@apple.com>

        Move IDBCursorBackend operations into their own files
        https://bugs.webkit.org/show_bug.cgi?id=124444

        Reviewed by Tim Horton.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        (WebCore::IDBCursorBackend::cursorType):
        (WebCore::IDBCursorBackend::deprecatedBackingStoreCursor):
        (WebCore::IDBCursorBackend::deprecatedSetBackingStoreCursor):
        (WebCore::IDBCursorBackend::deprecatedSetSavedBackingStoreCursor):

        * Modules/indexeddb/IDBCursorBackendOperations.cpp: Added.
        (WebCore::CallOnDestruct::CallOnDestruct):
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::CursorAdvanceOperation::perform):
        (WebCore::CursorIterationOperation::perform):
        (WebCore::CursorPrefetchIterationOperation::perform):
        * Modules/indexeddb/IDBCursorBackendOperations.h: Added.
        (WebCore::CursorIterationOperation::create):
        (WebCore::CursorIterationOperation::CursorIterationOperation):
        (WebCore::CursorAdvanceOperation::create):
        (WebCore::CursorAdvanceOperation::CursorAdvanceOperation):
        (WebCore::CursorPrefetchIterationOperation::create):
        (WebCore::CursorPrefetchIterationOperation::CursorPrefetchIterationOperation):

2013-11-14  David Farler  <dfarler@apple.com>

        Copy ASAN flag settings to WebCore and JavaScriptCore intermediate build tools
        https://bugs.webkit.org/show_bug.cgi?id=124362

        Reviewed by David Kilzer.

        No new tests needed.

        * WebCore.xcodeproj/project.pbxproj:
        Use ASAN_C*FLAGS for WebCoreExportFileGenerator.

2013-11-15  Jer Noble  <jer.noble@apple.com>

        [Mac][AVF] Allow video and audio tracks to be initialized with an AVAssetTrack.
        https://bugs.webkit.org/show_bug.cgi?id=124421

        Reviewed by Eric Carlson.

        Currently, VideoTrackPrivateAVFObjC and AudioTrackPrivateAVFObjC are initialized with an
        AVPlayerItemTrack, but most of its methods use the AVAssetTrack wrapped by the
        AVPlayerItemTrack. Allow these objects to be alternatively initialized with an AVAssetTrack.

        Add factory methods taking an AVAssetTrack:
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.h:
        (WebCore::AudioTrackPrivateAVFObjC::create):
        * platform/graphics/avfoundation/objc/AudioTrackPrivateAVFObjC.mm:
        (WebCore::AudioTrackPrivateAVFObjC::AudioTrackPrivateAVFObjC):
        (WebCore::AudioTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::AudioTrackPrivateAVFObjC::assetTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.cpp:
        (WebCore::VideoTrackPrivateAVFObjC::VideoTrackPrivateAVFObjC):
        (WebCore::VideoTrackPrivateAVFObjC::setAssetTrack):
        (WebCore::VideoTrackPrivateAVFObjC::assetTrack):
        * platform/graphics/avfoundation/objc/VideoTrackPrivateAVFObjC.h:

        Use m_assetTrack instead of [m_playerItemTrack assetTrack]:
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.h:
        (WebCore::AVTrackPrivateAVFObjCImpl::assetTrack):
        * platform/graphics/avfoundation/AVTrackPrivateAVFObjCImpl.mm:
        (WebCore::AVTrackPrivateAVFObjCImpl::AVTrackPrivateAVFObjCImpl):
        (WebCore::AVTrackPrivateAVFObjCImpl::enabled):
        (WebCore::AVTrackPrivateAVFObjCImpl::setEnabled):
        (WebCore::AVTrackPrivateAVFObjCImpl::audioKind):
        (WebCore::AVTrackPrivateAVFObjCImpl::videoKind):
        (WebCore::AVTrackPrivateAVFObjCImpl::id):
        (WebCore::AVTrackPrivateAVFObjCImpl::label):
        (WebCore::AVTrackPrivateAVFObjCImpl::language):
        (WebCore::AVTrackPrivateAVFObjCImpl::trackID):


2013-11-15  Brady Eidson  <beidson@apple.com>

        Let IDBDatabaseBackend create IDBTransactionBackend's directly
        https://bugs.webkit.org/show_bug.cgi?id=124438

        Reviewed by Beth Dakin.

        Create IDBTransactionBackends directly:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::createTransaction):
        * Modules/indexeddb/IDBDatabaseBackend.h:

        Remove maybeCreateTransactionBackend():
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-15  Jer Noble  <jer.noble@apple.com>

        HTMLMediaElement should not throw an exception from setCurrentTime or fastSeek.
        https://bugs.webkit.org/show_bug.cgi?id=124294

        Reviewed by Eric Carlson.

        Update the seek logic to match the current specification. This means removing exception
        throwing from both the .idl and the implementation. 

        Remove the ExceptionCode parameter from setCurrentTime and fastSeek:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fastSeek):
        (HTMLMediaElement::seek):
        (HTMLMediaElement::seekWithTolerance):
        (HTMLMediaElement::setCurrentTime):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaController.cpp:
        (MediaController::setCurrentTime):
        * html/MediaController.h:
        * html/MediaController.idl:
        * html/MediaControllerInterface.h:

        Do not pass in an ExceptionCode placeholder when calling seek:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::rewind):
        (HTMLMediaElement::returnToRealtime):
        (HTMLMediaElement::finishSeek):
        (HTMLMediaElement::playInternal):
        (HTMLMediaElement::mediaPlayerTimeChanged):
        (HTMLMediaElement::mediaPlayerDurationChanged):
        (HTMLMediaElement::applyMediaFragmentURI):
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:
        * html/MediaController.cpp:
        (MediaController::bringElementUpToSpeed):
        * html/MediaController.h:
        * html/MediaController.idl:
        * html/MediaControllerInterface.h:
        * html/shadow/MediaControlElementTypes.cpp:
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController setCurrentTime:]):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Remove last vestiges of IDBBackingStore* from IDBTransactionBackend.
        https://bugs.webkit.org/show_bug.cgi?id=124436

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBFactoryBackendInterface.h: Removed createCursorBackend.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp: Removed createCursorBackend.
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h: Removed createCursorBackend.

        * Modules/indexeddb/IDBCursorBackend.h:

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::openCursor):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Make IDBIndexWriter a LevelDB specific concept
        https://bugs.webkit.org/show_bug.cgi?id=124434

        Reviewed by Tim Horton.

        This includes renaming the class and moving it into the leveldb subdirectory.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBIndexWriter.cpp.
        (WebCore::IDBIndexWriterLevelDB::IDBIndexWriterLevelDB):
        (WebCore::IDBIndexWriterLevelDB::writeIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::verifyIndexKeys):
        (WebCore::IDBIndexWriterLevelDB::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBIndexWriterLevelDB.h: Renamed from Source/WebCore/Modules/indexeddb/IDBIndexWriter.h.
        (WebCore::IDBIndexWriterLevelDB::create):

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        (WebCore::IDBServerConnectionLevelDB::put):

2013-11-15  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: DOM.performSearch should accept a list of context nodes
        https://bugs.webkit.org/show_bug.cgi?id=124390

        Reviewed by Timothy Hatcher.

        Extracted the code in InspectorDOMAgent::performSearch into its own helper class
        called InspectorNodeFinder. Also added a new array parameter called "nodeIds"
        that can be used to limit the search results to just partial subtrees.

        Tests: inspector-protocol/dom/dom-search-crash.html
               inspector-protocol/dom/dom-search-with-context.html
               inspector-protocol/dom/dom-search.html

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/protocol/DOM.json:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorNodeFinder.cpp: Added.
        (WebCore::stripCharacters):
        (WebCore::InspectorNodeFinder::InspectorNodeFinder):
        (WebCore::InspectorNodeFinder::performSearch):
        (WebCore::InspectorNodeFinder::searchUsingDOMTreeTraversal):
        (WebCore::InspectorNodeFinder::matchesAttribute):
        (WebCore::InspectorNodeFinder::matchesElement):
        (WebCore::InspectorNodeFinder::searchUsingXPath):
        (WebCore::InspectorNodeFinder::searchUsingCSSSelectors):
        * inspector/InspectorNodeFinder.h: Added.
        (WebCore::InspectorNodeFinder::results):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Remove IDBBackingStoreInterface.h includes that are no longer needed
        https://bugs.webkit.org/show_bug.cgi?id=124433

        Reviewed by Tim Horton.

        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackend.h:

2013-11-15  Zoltan Horvath  <zoltan@webkit.org>

        Move BreakingContext and LineBreaker into their own files
        <https://webkit.org/b/124336>

        Reviewed by David Hyatt.

        In this change I introduced 'line' subdirectory inside 'rendering', this directory will contain all the classes
        which have been refactored from RenderBlockLineLayout.cpp. This change contains the separation of BreakingContext,
        and the separation of LineBreaker classes. Since I wanted to keep the helper functions organized, I also added a
        new file called LineInlineHeaders.h, which contains the functions which used in LineBreaker.h and BreakingContext.h.
        I moved LineInfo class into line directory. It was necessary this time, since I added a cpp for it. I'll move the
        rest of the line layout related helper classes later. (I wanted to minimize merge conflicts.)

        No new tests, no behavior change.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createRun):
        * rendering/line/BreakingContextInlineHeaders.h: Added.
        (WebCore::WordMeasurement::WordMeasurement):
        (WebCore::TrailingObjects::TrailingObjects):
        (WebCore::TrailingObjects::setTrailingWhitespace):
        (WebCore::TrailingObjects::clear):
        (WebCore::TrailingObjects::appendBoxIfNeeded):
        (WebCore::deprecatedAddMidpoint):
        (WebCore::startIgnoringSpaces):
        (WebCore::stopIgnoringSpaces):
        (WebCore::ensureLineBoxInsideIgnoredSpaces):
        (WebCore::TrailingObjects::updateMidpointsForTrailingBoxes):
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::lineBreakRef):
        (WebCore::BreakingContext::lineWidth):
        (WebCore::BreakingContext::atEnd):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::increment):
        (WebCore::BreakingContext::handleBR):
        (WebCore::borderPaddingMarginStart):
        (WebCore::borderPaddingMarginEnd):
        (WebCore::shouldAddBorderPaddingMargin):
        (WebCore::previousInFlowSibling):
        (WebCore::inlineLogicalWidth):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::shouldSkipWhitespaceAfterStartObject):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::firstPositiveWidth):
        (WebCore::updateSegmentsForShapes):
        (WebCore::iteratorIsBeyondEndOfRenderCombineText):
        (WebCore::nextCharacter):
        (WebCore::updateCounterIfNeeded):
        (WebCore::measureHyphenWidth):
        (WebCore::textWidth):
        (WebCore::ensureCharacterGetsLineBox):
        (WebCore::tryHyphenating):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::checkMidpoints):
        (WebCore::BreakingContext::handleEndOfLine):
        * rendering/line/LineBreaker.cpp: Added.
        (WebCore::LineBreaker::reset):
        (WebCore::LineBreaker::skipTrailingWhitespace):
        (WebCore::LineBreaker::skipLeadingWhitespace):
        * rendering/line/LineBreaker.h: Added.
        (WebCore::LineBreaker::LineBreaker):
        (WebCore::LineBreaker::lineWasHyphenated):
        (WebCore::LineBreaker::positionedObjects):
        (WebCore::LineBreaker::clear):
        * rendering/line/LineInfo.cpp: Added.
        (WebCore::LineInfo::setEmpty):
        * rendering/line/LineInfo.h: Renamed from Source/WebCore/rendering/LineInfo.h.
        (WebCore::LineInfo::LineInfo):
        (WebCore::LineInfo::isFirstLine):
        (WebCore::LineInfo::isLastLine):
        (WebCore::LineInfo::isEmpty):
        (WebCore::LineInfo::previousLineBrokeCleanly):
        (WebCore::LineInfo::floatPaginationStrut):
        (WebCore::LineInfo::runsFromLeadingWhitespace):
        (WebCore::LineInfo::resetRunsFromLeadingWhitespace):
        (WebCore::LineInfo::incrementRunsFromLeadingWhitespace):
        (WebCore::LineInfo::setFirstLine):
        (WebCore::LineInfo::setLastLine):
        (WebCore::LineInfo::setPreviousLineBrokeCleanly):
        (WebCore::LineInfo::setFloatPaginationStrut):
        * rendering/line/LineInlineHeaders.h: Added.
        (WebCore::hasInlineDirectionBordersPaddingOrMargin):
        (WebCore::lineStyle):
        (WebCore::requiresLineBoxForContent):
        (WebCore::shouldCollapseWhiteSpace):
        (WebCore::skipNonBreakingSpace):
        (WebCore::alwaysRequiresLineBox):
        (WebCore::requiresLineBox):
        (WebCore::setStaticPositions):

2013-11-15  Brady Eidson  <beidson@apple.com>

        Move execution of IDBTransactionBackendOperations to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124385

        Reviewed by Tim Horton.

        Each IDBOperation has it’s ::perform() moved to a method on IDBServerConnection.
        This almost removes all knowledge of the backing stores from the front end.

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::clearObjectStore):
        (WebCore::IDBDatabaseBackend::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackend.h:

        * Modules/indexeddb/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::clear):

        Add methods to reflect each transaction backend operation:
        * Modules/indexeddb/IDBServerConnection.h:

        Schedule certain operations with callbacks:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::scheduleVersionChangeOperation):
        (WebCore::IDBTransactionBackend::schedulePutOperation):
        (WebCore::IDBTransactionBackend::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackend::scheduleCountOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackend::scheduleClearObjectStoreOperation):
        * Modules/indexeddb/IDBTransactionBackend.h:

        Make each operation’s perform() method defer to the IDBServerConnection (with a callback):
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearObjectStoreOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):

        Add accessors to each operation’s data members so the IDBServerConnection has everything it needs:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::objectStoreMetadata):
        (WebCore::DeleteObjectStoreOperation::objectStoreMetadata):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::version):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::callbacks):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::databaseCallbacks):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::CreateIndexOperation::objectStoreID):
        (WebCore::CreateIndexOperation::idbIndexMetadata):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::objectStoreID):
        (WebCore::DeleteIndexOperation::idbIndexMetadata):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::objectStoreID):
        (WebCore::GetOperation::indexID):
        (WebCore::GetOperation::cursorType):
        (WebCore::GetOperation::keyRange):
        (WebCore::GetOperation::callbacks):
        (WebCore::GetOperation::autoIncrement):
        (WebCore::GetOperation::keyPath):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::putMode):
        (WebCore::PutOperation::objectStore):
        (WebCore::PutOperation::key):
        (WebCore::PutOperation::indexIDs):
        (WebCore::PutOperation::indexKeys):
        (WebCore::PutOperation::callbacks):
        (WebCore::PutOperation::value):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::objectStoreID):
        (WebCore::OpenCursorOperation::indexID):
        (WebCore::OpenCursorOperation::direction):
        (WebCore::OpenCursorOperation::cursorType):
        (WebCore::OpenCursorOperation::taskType):
        (WebCore::OpenCursorOperation::keyRange):
        (WebCore::OpenCursorOperation::cursorDirection):
        (WebCore::OpenCursorOperation::callbacks):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::objectStoreID):
        (WebCore::CountOperation::indexID):
        (WebCore::CountOperation::keyRange):
        (WebCore::CountOperation::callbacks):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::objectStoreID):
        (WebCore::DeleteRangeOperation::callbacks):
        (WebCore::DeleteRangeOperation::keyRange):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearObjectStoreOperation::create):
        (WebCore::ClearObjectStoreOperation::objectStoreID):
        (WebCore::ClearObjectStoreOperation::callbacks):
        (WebCore::ClearObjectStoreOperation::ClearObjectStoreOperation):

        Implement each operation in terms of the appropriate backing store, then perform the callback:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::createObjectStore):
        (WebCore::IDBServerConnectionLevelDB::createIndex):
        (WebCore::IDBServerConnectionLevelDB::deleteIndex):
        (WebCore::IDBServerConnectionLevelDB::get):
        (WebCore::IDBServerConnectionLevelDB::put):
        (WebCore::IDBServerConnectionLevelDB::openCursor):
        (WebCore::IDBServerConnectionLevelDB::count):
        (WebCore::IDBServerConnectionLevelDB::deleteRange):
        (WebCore::IDBServerConnectionLevelDB::clearObjectStore):
        (WebCore::IDBServerConnectionLevelDB::deleteObjectStore):
        (WebCore::IDBServerConnectionLevelDB::changeDatabaseVersion):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * WebCore.xcodeproj/project.pbxproj:

2013-11-15  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Modifying RTCIceCandidate object construction to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=124369

        Reviewed by Eric Carlson.

        According to the spec the RTCIceCandidateInit parameter in RTCSessionDescription constructor is optional,
        which must not be nullable, and, if passed, must be a valid Dictionary. If the keys are not present, the string
        object that stores them in the RTCIceCandidate class, must be null in those cases. Also, if a key is present
        and its value is not valid an exception must be raised.

        Existing test was updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCIceCandidate.cpp:
        (WebCore::RTCIceCandidate::create):
        * Modules/mediastream/RTCIceCandidate.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCIceCandidateCustom.cpp: Added.
        (WebCore::JSRTCIceCandidateConstructor::constructJSRTCIceCandidate):

2013-11-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159337.
        http://trac.webkit.org/changeset/159337
        https://bugs.webkit.org/show_bug.cgi?id=124423

        broke a bunch of fast/regions tests on EFL/GTK (Requested by
        philn on #webkit).

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::paintFlowThreadPortionInRegion):
        (WebCore::RenderFlowThread::hitTestFlowThreadPortionInRegion):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::shouldPaintRegionContentsInPhase):
        (WebCore::RenderRegion::paintObject):
        (WebCore::RenderRegion::hitTestContents):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-15  Antti Koivisto  <antti@apple.com>

        Hovering over text using simple line path should not cause switch to line boxes
        https://bugs.webkit.org/show_bug.cgi?id=124418

        Reviewed by Anders Carlsson.

        Test: fast/text/simple-lines-hover.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        
            Collect quads and rects directly from simple lines without requiring the line box switch.

        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::collectTextAbsoluteRects):
        (WebCore::SimpleLineLayout::collectTextAbsoluteQuads):
        
            Add these.

        * rendering/SimpleLineLayoutFunctions.h:
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::start):
        (WebCore::SimpleLineLayout::RunResolver::Run::end):
        
            For future use.

2013-11-15  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Implement visual overflow for first & last regions
        https://bugs.webkit.org/show_bug.cgi?id=118665

        In order to properly propagate the visual overflow of elements flowed inside regions, 
        the responsiblity of painting and hit-testing content inside flow threads has been
        moved to the flow thread layer's level.
        Each region keeps the associated overflow with each box in the RenderBoxRegionInfo
        structure, including one for the flow thread itself. This data is used during
        painting and hit-testing.

        Reviewed by David Hyatt.

        Tests: fast/regions/overflow-first-and-last-regions-in-container-hidden.html
               fast/regions/overflow-first-and-last-regions.html
               fast/regions/overflow-nested-regions.html
               fast/regions/overflow-region-float.html
               fast/regions/overflow-region-inline.html
               fast/regions/overflow-region-transform.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::setLayoutOverflow):
        (WebCore::InlineFlowBox::setVisualOverflow):
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromChildren):
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintObject):
        (WebCore::RenderBlock::estimateRegionRangeForBoxChild):
        (WebCore::RenderBlock::updateRegionRangeForBoxChild):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::hasNextPage):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::positionNewFloatOnLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::borderBoxRectInRegion):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::addLayoutOverflow):
        (WebCore::RenderBox::addVisualOverflow):
        (WebCore::RenderBox::isUnsplittableForPagination):
        (WebCore::RenderBox::overflowRectForPaintRejection):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::canHaveOutsideRegionRange):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintMaskForTextFillBox):
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderBoxRegionInfo.h:
        (WebCore::RenderBoxRegionInfo::createOverflow):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::objectShouldPaintInFlowRegion):
        (WebCore::RenderFlowThread::mapFromLocalToFlowThread):
        (WebCore::RenderFlowThread::mapFromFlowThreadToLocal):
        (WebCore::RenderFlowThread::decorationsClipRectForBoxInRegion):
        (WebCore::RenderFlowThread::flipForWritingModeLocalCoordinates):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsVisualOverflow):
        (WebCore::CurrentRenderFlowThreadMaintainer::CurrentRenderFlowThreadMaintainer):
        * rendering/RenderFlowThread.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        (WebCore::expandClipRectForRegionAndReflection):
        (WebCore::expandClipRectForDescendantsAndReflection):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintLayerContents):
        (WebCore::RenderLayer::updatePaintingInfoForFragments):
        (WebCore::RenderLayer::paintForegroundForFragments):
        (WebCore::RenderLayer::hitTest):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::mapLayerClipRectsToFragmentationLayer):
        (WebCore::RenderLayer::calculateClipRects):
        (WebCore::RenderLayer::parentClipRects):
        (WebCore::RenderLayer::calculateRects):
        (WebCore::RenderLayer::intersectsDamageRect):
        (WebCore::RenderLayer::updateDescendantsLayerListsIfNeeded):
        (WebCore::RenderLayer::repaintIncludingDescendants):
        (WebCore::RenderLayer::paintNamedFlowThreadInsideRegion):
        (WebCore::RenderLayer::paintFlowThreadIfRegion):
        (WebCore::RenderLayer::hitTestFlowThreadIfRegion):
        * rendering/RenderLayer.h:
        (WebCore::ClipRect::inflateX):
        (WebCore::ClipRect::inflateY):
        (WebCore::ClipRect::inflate):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::addOverflowFromChildren):
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
        (WebCore::RenderMultiColumnSet::repaintFlowThreadContent):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.cpp:
        (WebCore::RenderNamedFlowFragment::createStyle):
        (WebCore::RenderNamedFlowFragment::namedFlowThread):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderOverflow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::flowThreadPortionOverflowRect):
        (WebCore::RenderRegion::flowThreadPortionLocation):
        (WebCore::RenderRegion::regionContainerLayer):
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        (WebCore::RenderRegion::computeOverflowFromFlowThread):
        (WebCore::RenderRegion::repaintFlowThreadContent):
        (WebCore::RenderRegion::repaintFlowThreadContentRectangle):
        (WebCore::RenderRegion::insertedIntoTree):
        (WebCore::RenderRegion::ensureOverflowForBox):
        (WebCore::RenderRegion::rectFlowPortionForBox):
        (WebCore::RenderRegion::addLayoutOverflowForBox):
        (WebCore::RenderRegion::addVisualOverflowForBox):
        (WebCore::RenderRegion::layoutOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBox):
        (WebCore::RenderRegion::visualOverflowRectForBoxForPropagation):
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paint):

2013-11-15  Stephane Jadaud  <sjadaud@sii.fr>

        [GStreamer] Add support for Media Source API
        https://bugs.webkit.org/show_bug.cgi?id=99065

        The patch integrate a Media Source player for the GStreamer backend. The implementented architecture is:
        - MediaPlayerPrivateGStreamer engine is modified to support Media Source URIs (change blob:// to mediasourceblob://), in addition to the existing support for web (http/https/blob) URIs
        - Similar to the existing WebKitWebSrc gstreamer element that handles web URIs, a new gstreamer element named WebKitMediaSrc is implemented to handle Media Source URIs
        - WebKitMediaSrc registers its URI protocol handler, allowing uridecodebin to dynamically create the appropriate source element.
        - The WebKitMediaSrc element creates a bin with 2 appsrc: One for Audio and One for Video. Pads are dynamically linked at the reception of first video and audio buffers.

        Reviewed by Philippe Normand.

        Tests: Activate http/tests/media/media-source and media/media-source tests

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::initializeGStreamerAndRegisterWebKitElements):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/MediaSourceGStreamer.cpp: Added.
        (WebCore::MediaSourceGStreamer::open):
        (WebCore::MediaSourceGStreamer::MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::~MediaSourceGStreamer):
        (WebCore::MediaSourceGStreamer::addSourceBuffer):
        (WebCore::MediaSourceGStreamer::setDuration):
        (WebCore::MediaSourceGStreamer::markEndOfStream):
        (WebCore::MediaSourceGStreamer::unmarkEndOfStream):
        * platform/graphics/gstreamer/MediaSourceGStreamer.h: Added.
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.cpp: Added.
        (WebCore::SourceBufferPrivateGStreamer::SourceBufferPrivateGStreamer):
        (WebCore::SourceBufferPrivateGStreamer::append):
        (WebCore::SourceBufferPrivateGStreamer::abort):
        (WebCore::SourceBufferPrivateGStreamer::removedFromMediaSource):
        * platform/graphics/gstreamer/SourceBufferPrivateGStreamer.h: Added.
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.cpp: Added.
        (webKitMediaSrcAddSrc):
        (webkit_media_src_init):
        (webKitMediaSrcFinalize):
        (webKitMediaSrcSetProperty):
        (webKitMediaSrcGetProperty):
        (webKitMediaVideoSrcStop):
        (webKitMediaAudioSrcStop):
        (webKitMediaVideoSrcStart):
        (webKitMediaAudioSrcStart):
        (webKitMediaSrcChangeState):
        (webKitMediaSrcQueryWithParent):
        (webKitMediaSrcUriGetType):
        (webKitMediaSrcGetProtocols):
        (webKitMediaSrcGetUri):
        (webKitMediaSrcSetUri):
        (webKitMediaSrcUriHandlerInit):
        (webKitMediaVideoSrcNeedDataMainCb):
        (webKitMediaAudioSrcNeedDataMainCb):
        (webKitMediaVideoSrcNeedDataCb):
        (webKitMediaAudioSrcNeedDataCb):
        (webKitMediaVideoSrcEnoughDataMainCb):
        (webKitMediaAudioSrcEnoughDataMainCb):
        (webKitMediaVideoSrcEnoughDataCb):
        (webKitMediaAudioSrcEnoughDataCb):
        (webKitMediaVideoSrcSeekMainCb):
        (webKitMediaAudioSrcSeekMainCb):
        (webKitMediaVideoSrcSeekDataCb):
        (webKitMediaAudioSrcSeekDataCb):
        (webKitMediaSrcSetMediaPlayer):
        (webKitMediaSrcSetPlayBin):
        (MediaSourceClientGstreamer::MediaSourceClientGstreamer):
        (MediaSourceClientGstreamer::~MediaSourceClientGstreamer):
        (MediaSourceClientGstreamer::didReceiveDuration):
        (MediaSourceClientGstreamer::didReceiveData):
        (MediaSourceClientGstreamer::didFinishLoading):
        (MediaSourceClientGstreamer::didFail):
        * platform/graphics/gstreamer/WebKitMediaSourceGStreamer.h: Added.

2013-11-14  Victor Costan  <costan@gmail.com>

        XMLSerializer escapes < > & correctly inside <script> and <style> tags.
        https://bugs.webkit.org/show_bug.cgi?id=123914

        Reviewed by Darin Adler.

        Test: fast/dom/XMLSerializer-entities.html

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces): vim removed some whitespace.
        (WebCore::MarkupAccumulator::entityMaskForText): Fixed the returned value for <script> etc in XML.

2013-11-14  Bem Jones-Bey  <bjonesbe@adobe.com>

        ASSERTION FAILED: rangesIntersect(m_renderer.pixelSnappedLogicalTopForFloat(floatingObject), m_renderer.pixelSnappedLogicalBottomForFloat(floatingObject), m_lineTop, m_lineBottom) ../../Source/WebCore/rendering/FloatingObjects.cpp(463)
        https://bugs.webkit.org/show_bug.cgi?id=124375

        Reviewed by Alexandru Chiculita.

        When moving the placed floats tree over to LayoutUnit, I forgot to
        update these asserts, which causes issues on ports with subpixel
        layout enabled. 

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::::collectIfNeeded):

2013-11-14  Victor Costan  <costan@gmail.com>

        Clean up sequence handling in Blob constructor
        https://bugs.webkit.org/show_bug.cgi?id=124343

        Reviewed by Alexey Proskuryakov.

        Added test case to LayoutTests/fast/files/blob-constructor.html

        * bindings/js/JSBlobCustom.cpp:
        (WebCore::JSBlobConstructor::constructJSBlob):
            Handle exceptions in sequences, eliminate double type-checking for
            ArrayBuffer, ArrayBufferView and Blob parts.

2013-11-14  Oliver Hunt  <oliver@apple.com>

        Make CLoop easier to build, and make it work
        https://bugs.webkit.org/show_bug.cgi?id=124359

        Reviewed by Geoffrey Garen.

        Add cloop configuration info to WebCore FeatureDefines
        so that it's consistent with JSC

        * Configurations/FeatureDefines.xcconfig:

2013-11-14  Aloisio Almeida Jr  <aloisio.almeida@openbossa.org>

        [Cairo] Avoid extra copy when drawing images
        https://bugs.webkit.org/show_bug.cgi?id=124209

        Reviewed by Martin Robinson.

        To solve the bug #58309 a cairo subsurface is being used to limit the
        source image boundaries.
        In many cases, when a cairo subsurface is used for drawing an image,
        it occurs an image copy, causing performance penalty. In the case of
        the function PlatformContextCairo::drawSurfaceToContext, the image
        copy always happens.
        So, we should use the subsurface only when it's really necessary.
        In cases where we're drawing the whole image, the subsurface is
        unnecessary.

        The proposed patch avoid the use of subsurfaces when sampling the whole
        image.

        No new tests. It's an enhancement. Already covered by existing tests.

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement raw format for WebCrypto key export
        https://bugs.webkit.org/show_bug.cgi?id=124376

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-export-key.html
               crypto/subtle/hmac-export-key.html

        A CryptoKey just exports its native CryptoKeyData, which will also work nicely for
        JWK format soon. For spki and pkcs8, we'll need to figure out the best way to
        utilize platform library support for ASN.1, but we are not there yet.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::exportKey):
        * crypto/CryptoKey.h:
        * crypto/SubtleCrypto.idl:
        * crypto/keys/CryptoKeyAES.cpp:
        (WebCore::CryptoKeyAES::exportData):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyHMAC.cpp:
        (WebCore::CryptoKeyHMAC::exportData):
        * crypto/keys/CryptoKeyHMAC.h:

        * crypto/keys/CryptoKeyRSA.h:
        * crypto/mac/CryptoKeyRSAMac.cpp:
        (WebCore::CryptoKeyRSA::exportData):
        Added a dummy implementation for RSA.

2013-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Simply generated domain dispatch methods for domains with few commands
        https://bugs.webkit.org/show_bug.cgi?id=124374

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspector.py:
        (Generator.go):
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:

2013-11-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Accept the new <box> value for shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=124227

        Reviewed by David Hyatt.

        The shape-outside property can now be set to the box values [margin/border/padding/content]-box.
        This patch adds the parsing code required to accept the new values, and the layout code
        to create a rectangle shape that has the size and position of the appropriate box.

        Tests: fast/shapes/shape-outside-floats/shape-outside-boxes-001.html
               fast/shapes/shape-outside-floats/shape-outside-boxes-002.html
               fast/shapes/shape-outside-floats/shape-outside-boxes-003.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue): Output the new box values.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Accept the new box values.
        * css/CSSValueKeywords.in: Add margin-box value.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyShape::applyValue): Accept the new box values.
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderLogicalWidth): Added new utility methods to help
        with box sizing.
        (WebCore::RenderBoxModelObject::borderLogicalHeight): Ditto.
        (WebCore::RenderBoxModelObject::paddingLogicalWidth): Ditto.
        (WebCore::RenderBoxModelObject::paddingLogicalHeight): Ditto.
        * rendering/shapes/Shape.cpp:
        (WebCore::Shape::createShape): You can create a shape from a box's dimensions, rather
        than always using a BasicShape or RasterShape value.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::computedShape): Create the appropriate shape based on the box values.
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::setShapeSize): Adjust for the box size when using a box value.
        (WebCore::ShapeInfo::logicalTopOffset): Ditto.
        (WebCore::ShapeInfo::logicalLeftOffset): Ditto.
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Enable for the box values.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::isEnabledFor): Disable for shape-inside.
        * rendering/style/ShapeValue.h:
        (WebCore::ShapeValue::createBoxValue): Create the appropriate shape value for a box.
        (WebCore::ShapeValue::box): Return the box value for this ShapeValue.
        (WebCore::ShapeValue::ShapeValue): Create a ShapeValue from a box value.

2013-11-14  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Tim Horton.

        Post-checkin review comment! StickToViewportBounds sounds better and more accurate 
        than StickToWindowBounds.

        * platform/ScrollTypes.h:

2013-11-13  Jer Noble  <jer.noble@apple.com>

        Unreviewed build failure; update MediaPlayerPrivateAVFFoundationCF::seekToTime after r159208.

        After r159208, seekToTime takes tolerance parameters.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::seekToTime):
        (WebCore::AVFWrapper::seekToTime):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:

2013-11-14  Beth Dakin  <bdakin@apple.com>

        Add a new mode where fixed elements don't constrain their positions during a
        rubber band
        https://bugs.webkit.org/show_bug.cgi?id=124260

        Reviewed by Tim Horton.

        This patch adds a new enum called ScrollBehaviorForFixedElements, which has
        two values, StickToDocumentBounds or StickToWindowBounds. StickToDocumentBounds 
        corresponds to our current behavior, where fixed elements constrain 
        their positions during a rubber-band so that they stay stuck to the document.
        The new mode, StickToWindowBounds, will cause fixed elements to always stay
        fixed relative to the window.

        scrollOffsetForFixedPosition() now takes a new parameter for the fixed behavior
        so that it knows whether or not to constrain the position.
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollOffsetForFixedPosition):
        
        Right now, just return StickToDocumentBounds and retain existing behavior.
        (WebCore::FrameView::scrollBehaviorForFixedElements):
        * page/FrameView.h:

        The scrolling thread needs to know about the fixed element scroll behavior,
        so this code makes ScrollingStateScrollingNodes keep track of that 
        information to pass over to the scrolling thread.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::setScrollBehaviorForFixedElements):
        * page/scrolling/ScrollingStateScrollingNode.h:
        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::ScrollingTreeScrollingNode):
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::scrollBehaviorForFixedElements):
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::setScrollBehaviorForFixedElementsForNode):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):
        
        Here is the new enum.
        * platform/ScrollTypes.h:
        
        Another place where we only want to constrain scroll position if that is the
        mode we are in.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::customPositionForVisibleRectComputation):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] HMAC sign/verify crashes when key is empty
        https://bugs.webkit.org/show_bug.cgi?id=124372

        Reviewed by Sam Weinig.

        Test: crypto/subtle/hmac-sign-verify-empty-key.html

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: (WebCore::calculateSignature): Give it
        a non-null pointer then.

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement RSASSA-PKCS1-v1_5 sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=124335

        Build fix.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:

2013-11-14  Samuel White  <samuel_white@apple.com>

        AX: Calling NSAccessibilityColumnsAttribute and NSAccessibilityRowsAttribute simply to get column/row count can be very expensive.
        https://bugs.webkit.org/show_bug.cgi?id=124293

        Reviewed by Chris Fleizach.

        Added ability to get accessibility table column or row count without fetching all columns or rows.

        Test: platform/mac/accessibility/table-column-and-row-count.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-14  Alexey Proskuryakov  <ap@apple.com>

        Implement RSASSA-PKCS1-v1_5 sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=124335

        Reviewed by Sam Weinig.

        Test: crypto/subtle/rsassa-pkcs1-v1_5-sign-verify.html

        * WebCore.xcodeproj/project.pbxproj: Added new files, removed Mac SHA algorithm files.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp:
        (WebCore::getCommonCryptoDigestAlgorithm):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Implemented. These take two steps, first a digest is computed, and then it's signed.

        * crypto/CryptoDigest.h: Added.
        * crypto/mac/CryptoDigestMac.cpp: Added.
        (WebCore::CryptoDigest::CryptoDigest):
        (WebCore::CryptoDigest::~CryptoDigest):
        (WebCore::CryptoDigest::create):
        (WebCore::CryptoDigest::addBytes):
        (WebCore::CryptoDigest::computeHash):
        Added a cross-platform interface and Mac implementation to compute a digest. It
        should be possible to use it outside WebCrypto if we need to (perhaps even merge
        with  WTF SHA-1 class).
        The Mac implementation is kind of ugly, but at least it encapsulates the ugliness.

        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: (WebCore::CryptoAlgorithmSHA1::digest):
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp: (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp: (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp: (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp: (WebCore::CryptoAlgorithmSHA512::digest):
        * crypto/mac/CryptoAlgorithmSHA1Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA224Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA256Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA384Mac.cpp: Removed.
        * crypto/mac/CryptoAlgorithmSHA512Mac.cpp: Removed.
        These are all cross-platform now.

2013-11-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Empty polygons with non-zero shape-padding cause an ASSERT crash
        https://bugs.webkit.org/show_bug.cgi?id=124324

        Reviewed by Andreas Kling.

        PolygonShape::shapePaddingBounds() and PolygonShape::shapeMarginBounds() no
        longer attempt to compute a new FloatPolygon when the original is empty, i.e.
        when it has less than three vertices.

        Tests: fast/shapes/shape-inside/shape-inside-empty-polygon-crash.html
               fast/shapes/shape-outside-floats/shape-outside-floats-empty-polygon-crash.html

        * rendering/shapes/PolygonShape.cpp:
        (WebCore::PolygonShape::shapePaddingBounds): Don't compute a padding FloatPolygon if the original polygon is empty.
        (WebCore::PolygonShape::shapeMarginBounds): Don't compute a margin FloatPolygon if the original polygon is empty.

2013-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cleaner Backend Method Calling Code Generation
        https://bugs.webkit.org/show_bug.cgi?id=124333

        Reviewed by Timothy Hatcher.

        No change in functionality, just improved generated code.

        * inspector/CodeGeneratorInspector.py:
        (Generator.process_command):
        * inspector/CodeGeneratorInspectorStrings.py:
        * inspector/InspectorBackendDispatcher.cpp:
        * inspector/InspectorBackendDispatcher.h:

2013-11-14  Seokju Kwon  <seokju@webkit.org>

        Use [ImplementedAs=defaultStatus] for Window.defaultstatus
        https://bugs.webkit.org/show_bug.cgi?id=124334

        Reviewed by Christophe Dumez.

        No new tests, this is just refactoring.

        Use [ImplementedAs=defaultStatus] for Window.defaultstatus
        and remove unnecessary code from DOMWindow.
        Because 'defaultstatus' is an alias of defaultStatus.

        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2013-11-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Generate toSVGPolyline|gonElement() to replace static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=124341

        Reviewed by Andreas Kling.

        toSVGFoo() supports more plenty helper functions. So, toSVGFoo() needs
        to be used instead of static_cast<>.

        Additionally, cleanup other static_cast<> as well.

        No new tests, no behavior changes.

        * rendering/svg/SVGPathData.cpp:
        (WebCore::updatePathFromEllipseElement):
        (WebCore::updatePathFromLineElement):
        (WebCore::updatePathFromPolygonElement):
        (WebCore::updatePathFromPolylineElement):
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.h:
        * svg/svgtags.in: Add *generateTypeHelpers* keyword to polygon, polyline

2013-11-14  Andreas Kling  <akling@apple.com>

        FontDescription copies should share families list, not duplicate it.
        <https://webkit.org/b/124338>

        Turn FontDescription::m_families into a RefCountedArray<AtomicString>
        instead of a Vector<AtomicString, 1>. This allows FontDescription to
        share the families list between copies, instead of each object having
        its own Vector.

        Also, FontDescription itself shrinks by 16 bytes.

        Reviewed by Antti Koivisto.

2013-11-14  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce FILTER_TYPE_CASTS for child filter class
        https://bugs.webkit.org/show_bug.cgi?id=124332

        Reviewed by Andreas Kling.

        To use TYPE_CASTS_BASE, define FILTER_TYPE_CASTS macro. Thanks to 
        it, static_cast<SVGFilter*> can be replaced by toSVGFilter().

        No new tests, no behavior changes.

        * platform/graphics/filters/Filter.h:
            Add isSVGFilter() to check if casting object is SVGFilter object.
        (WebCore::Filter::isSVGFilter):
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::platformApplySoftware):
        * svg/graphics/filters/SVGFilter.h:

2013-11-13  Victor Costan  <costan@gmail.com>

        Blob constructor accepts a sequence (array-like object) as first arg. 
        https://bugs.webkit.org/show_bug.cgi?id=124175

        Reviewed by Christophe Dumez.

        Added test cases to fast/files/script-tests/blob-constructor.js.

        * bindings/js/JSBlobCustom.cpp: Make the constructor work with sequences.
        (WebCore::JSBlobConstructor::constructJSBlob):
        * bindings/js/JSDOMBinding.h:
        (WebCore::toJSSequence): Slightly better error message when conversion fails.
        (WebCore::toJS): Whitespace.
        (WebCore::jsArray): Whitespace.

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: InspectorBackendDispatcher improvements
        https://bugs.webkit.org/show_bug.cgi?id=124330

        Reviewed by Timothy Hatcher.

        * inspector/InspectorBackendDispatcher.cpp:
        (WebCore::InspectorBackendDispatcher::sendResponse):
        (WebCore::InspectorBackendDispatcher::reportProtocolError):
        * inspector/InspectorBackendDispatcher.h:
        (WebCore::InspectorSupplementalBackendDispatcher::InspectorSupplementalBackendDispatcher):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed Windows Build Fix after r159268.

        Missed adding InspectorBackendDispatcher.h and cpp to the Windows build.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generate Individual InspectorBackendDispatchers, add base InspectorBackendDispatcher
        https://bugs.webkit.org/show_bug.cgi?id=124296

        Reviewed by Timothy Hatcher.

        No new tests, this is just refactoring without changing functionality.
        Set of changes made:

          - Add inspector/InspectorBackendDispatcher.{h,cpp}. This used to be almost entirely
            written in the code generator strings file, but make it actual source files
            because there is nothing changing in the code. Also clean this up a bit.
          - Give the base dispatcher a list of domain dispatchers and a way to register.
          - Make InspectorBackendDispatcher::dispatch read the domain of incoming request
            and pass the request on to the domain dispatcher.
          - Create per-domain dispatcher classes named "InspectorFooBackendDispatcher"
          - Convert "InspectorBackendDispatcher::FooCommandHandler" interfaces to
            "InspectorFooBackendDispatcherHandler" interfaces.
          - Convert all "InspectorBackendDispatcherImpl::FooDomain_fooMethod" methods to
            "InspectorFooBackendDispatcher::fooMethod" methods. These can also remove their
            "if (!agent)" checks because that can never be the case anymore.
          - Remove InspectorBackendDispatcherImpl, now that there are base and domain dispatchers.
          - Add ASCIILiteral in many places in generated code where possible.
          - In all agents, create dispatchers in didCreateFrontendAndBackend and clear
            them in willDestroyFrontendAndBackend, right alongside frontend dispatchers.

        * inspector/CodeGeneratorInspector.py:
        (DomainNameFixes.get_fixed_data.Res):
        (TypeBindings.create_type_declaration_.EnumBinding.get_code_generator.CodeGenerator.generate_type_builder):
        (Generator):
        (Generator.go):
        (Generator.process_command):
        (Generator.generate_send_method):
        * inspector/CodeGeneratorInspectorStrings.py:
        (void):
        (HashMap):
        (InspectorBackendDispatchers_h):
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorAgent.h:
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBackendDispatcher.cpp: Added.
        (WebCore::InspectorBackendDispatcher::CallbackBase::CallbackBase):
        (WebCore::InspectorBackendDispatcher::CallbackBase::isActive):
        (WebCore::InspectorBackendDispatcher::CallbackBase::sendFailure):
        (WebCore::InspectorBackendDispatcher::CallbackBase::sendIfActive):
        (WebCore::InspectorBackendDispatcher::create):
        (WebCore::InspectorBackendDispatcher::registerDispatcherForDomain):
        (WebCore::InspectorBackendDispatcher::dispatch):
        (WebCore::InspectorBackendDispatcher::sendResponse):
        (WebCore::InspectorBackendDispatcher::reportProtocolError):
        (WebCore::InspectorBackendDispatcher::getPropertyValue):
        (WebCore::AsMethodBridges::asInt):
        (WebCore::AsMethodBridges::asDouble):
        (WebCore::AsMethodBridges::asString):
        (WebCore::AsMethodBridges::asBoolean):
        (WebCore::AsMethodBridges::asObject):
        (WebCore::AsMethodBridges::asArray):
        (WebCore::InspectorBackendDispatcher::getInt):
        (WebCore::InspectorBackendDispatcher::getDouble):
        (WebCore::InspectorBackendDispatcher::getString):
        (WebCore::InspectorBackendDispatcher::getBoolean):
        (WebCore::InspectorBackendDispatcher::getObject):
        (WebCore::InspectorBackendDispatcher::getArray):
        * inspector/InspectorBackendDispatcher.h: Added.
        (WebCore::InspectorSupplementalBackendDispatcher::InspectorSupplementalBackendDispatcher):
        (WebCore::InspectorSupplementalBackendDispatcher::~InspectorSupplementalBackendDispatcher):
        (WebCore::InspectorBackendDispatcher::~InspectorBackendDispatcher):
        (WebCore::InspectorBackendDispatcher::clearFrontend):
        (WebCore::InspectorBackendDispatcher::isActive):
        (WebCore::InspectorBackendDispatcher::InspectorBackendDispatcher):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::getScriptExecutionStatus):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:

2013-11-13  Andy Estes  <aestes@apple.com>

        Use NSCalendarIdentifierGregorian instead of NSGregorianCalendar on OS X 10.9 and iOS
        https://bugs.webkit.org/show_bug.cgi?id=124323

        Reviewed by Mark Rowe.

        NSGregorianCalendar was deprecated in OS X 10.9 and iOS 7.

        * platform/text/mac/LocaleMac.mm:
        (WebCore::LocaleMac::LocaleMac):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename InspectorBackendDispatcher.h to InspectorBackendDispatchers.h
        https://bugs.webkit.org/show_bug.cgi?id=124257

        Reviewed by Timothy Hatcher.

        Soon each domain will generate its own dispatcher, and the generic
        InspectorBackendDispatcher will no longer be generated, it will just
        live in WebCore/inspector.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        * inspector/CodeGeneratorInspectorStrings.py:
        (InspectorBackendDispatchers_h):
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/WorkerInspectorController.cpp:

2013-11-13  Andreas Kling  <akling@apple.com>

        Remove Document::m_savedRenderView pointer.
        <https://webkit.org/b/124310>

        This pointer held a copy of m_renderView while the document was in
        page cache, and null while it wasn't. It was not used for anything.

        Reviewed by Anders Carlsson.

2013-11-13  Brady Eidson  <beidson@apple.com>

        Move setIndexKeys() to the IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124301

        Reviewed by Anders Carlsson.

        This is a big step towards moving knowledge of the backing store out of the frontend.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::setIndexKeys):

        * Modules/indexeddb/IDBServerConnection.h:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::setIndexKeys):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::PutOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract InspectorFrontendDispatchers from InspectorFrontend
        https://bugs.webkit.org/show_bug.cgi?id=124246

        Reviewed by Timothy Hatcher.

        No new tests, this is just refactoring without changing functionality.
        Set of changes made:

          - Remove "class InspectorFrontend" that currently does nothing but hold
            sub-frontend dispatcher classes. Catches some stale code.
          - Generate individual "class InspectorFooFrontendDispatcher" classes for
            domains that have events. Catches some unnecessary classes.
          - Simplify the Base Agent interface from optional set/clearFrontend/register
            to required didCreateFrontendAndBackend/willDestroyFrontendAndBackend.
            New agents must implement this and this will be their cue to setup
            frontend and backend dispatchers.
          - Base Agent no longer needs to be templated or have an Interface class.
          - While we are changing subclass BaseAgent superclass calls, use ASCIILiteral
          - In agents with events, convert "InspectorFrontend::Foo* m_frontend" to
            "unique_ptr<InspectorFooFrontendDispatcher> m_frontendDispatcher" and
            update uses as appropriate within the classes.
          - In agents with events, create dispatchers in didCreateFrontendAndBackend
            and clear them in willDestroyFrontendAndBackend.

        * inspector/CodeGeneratorInspector.py:
        (Generator):
        (Generator.go):
        (Generator.process_event):
        * inspector/CodeGeneratorInspectorStrings.py:
        (InspectorFrontendChannel):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::inspect):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::hasFrontend):
        * inspector/InspectorAgentRegistry.cpp:
        (WebCore::InspectorAgentRegistry::append):
        (WebCore::InspectorAgentRegistry::didCreateFrontendAndBackend):
        (WebCore::InspectorAgentRegistry::willDestroyFrontendAndBackend):
        * inspector/InspectorAgentRegistry.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::networkStateChanged):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgent::discardAgent):
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCSSAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCSSAgent::mediaQueryResultChanged):
        (WebCore::InspectorCSSAgent::didCreateNamedFlow):
        (WebCore::InspectorCSSAgent::willRemoveNamedFlow):
        (WebCore::InspectorCSSAgent::regionLayoutUpdated):
        (WebCore::InspectorCSSAgent::regionOversetChanged):
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        (WebCore::InspectorCSSAgent::styleSheetChanged):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        (WebCore::InspectorCanvasAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorCanvasAgent::notifyRenderingContextWasWrapped):
        (WebCore::InspectorCanvasAgent::findFramesWithUninstrumentedCanvases):
        (WebCore::InspectorCanvasAgent::frameNavigated):
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::clearMessages):
        (WebCore::InspectorConsoleAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::addConsoleMessage):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::close):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hasFrontend):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::focusNode):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        (WebCore::InspectorDOMAgent::didCommitLoad):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::didRemoveDOMAttr):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        (WebCore::InspectorDOMAgent::characterDataModified):
        (WebCore::InspectorDOMAgent::didPushShadowRoot):
        (WebCore::InspectorDOMAgent::willPopShadowRoot):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMDebuggerAgent::didInvalidateStyleAttr):
        (WebCore::InspectorDOMDebuggerAgent::willInsertDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willRemoveDOMNode):
        (WebCore::InspectorDOMDebuggerAgent::willModifyDOMAttr):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::didOpenDatabase):
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        (WebCore::InspectorDatabaseAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDatabaseAgent::enable):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorDebuggerAgent::addMessageToConsole):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        (WebCore::InspectorDebuggerAgent::clearBreakDetails):
        (WebCore::InspectorDebuggerAgent::reset):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorHeapProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorHeapProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        (WebCore::InspectorIndexedDBAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorIndexedDBAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        (WebCore::InspectorInputAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorInputAgent::willDestroyFrontendAndBackend):
        * inspector/InspectorInputAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        (WebCore::InspectorLayerTreeAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorLayerTreeAgent::layerTreeDidChange):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorPageAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        (WebCore::InspectorPageAgent::domContentEventFired):
        (WebCore::InspectorPageAgent::loadEventFired):
        (WebCore::InspectorPageAgent::frameNavigated):
        (WebCore::InspectorPageAgent::frameDetached):
        (WebCore::InspectorPageAgent::frameStartedLoading):
        (WebCore::InspectorPageAgent::frameStoppedLoading):
        (WebCore::InspectorPageAgent::frameScheduledNavigation):
        (WebCore::InspectorPageAgent::frameClearedScheduledNavigation):
        (WebCore::InspectorPageAgent::willRunJavaScriptDialog):
        (WebCore::InspectorPageAgent::didRunJavaScriptDialog):
        (WebCore::InspectorPageAgent::scriptsEnabled):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::getHeapSnapshot):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        (WebCore::InspectorProfilerAgent::toggleRecordButton):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveData):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrame):
        (WebCore::InspectorResourceAgent::didSendWebSocketFrame):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketFrameError):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::sendEvent):
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::WorkerFrontendChannel):
        (WebCore::InspectorWorkerAgent::WorkerFrontendChannel::dispatchMessageFromWorker):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::didCreateFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::willDestroyFrontendAndBackend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::didStartWorkerGlobalScope):
        (WebCore::InspectorWorkerAgent::workerGlobalScopeTerminated):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        (WebCore::PageRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::PageRuntimeAgent::willDestroyFrontendAndBackend):
        (WebCore::PageRuntimeAgent::didCreateMainWorldContext):
        (WebCore::PageRuntimeAgent::didCreateIsolatedContext):
        (WebCore::PageRuntimeAgent::notifyContextCreated):
        * inspector/PageRuntimeAgent.h:
        * inspector/TimelineRecordFactory.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        (WebCore::WorkerInspectorController::hasFrontend):
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::didCreateFrontendAndBackend):
        (WebCore::WorkerRuntimeAgent::willDestroyFrontendAndBackend):
        * inspector/WorkerRuntimeAgent.h:
        * inspector/protocol/Input.json:

2013-11-13  Simon Fraser  <simon.fraser@apple.com>

        Rename FrameView's repaintFixedElementsAfterScrolling and updateFixedElementsAfterScrolling
        https://bugs.webkit.org/show_bug.cgi?id=124306

        Reviewed by Tim Horton.
        
        FrameView::repaintFixedElementsAfterScrolling() didn't do any repainting, and didn't
        just apply to fixed elements. Rename it to updateLayerPositionsAfterScrolling().
        
        updateFixedElementsAfterScrolling() was also confusingly named; rename it
        to updateCompositingLayersAfterScrolling().

        * page/FrameView.cpp:
        (WebCore::FrameView::setFixedVisibleContentRect):
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):
        (WebCore::FrameView::updateLayerPositionsAfterScrolling):
        (WebCore::FrameView::shouldUpdateCompositingLayersAfterScrolling):
        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollTo):
        * platform/ScrollView.h:
        (WebCore::ScrollView::updateLayerPositionsAfterScrolling):
        (WebCore::ScrollView::updateCompositingLayersAfterScrolling):

2013-11-13  Andreas Kling  <akling@apple.com>

        Generate casting helpers for SVGPaint and SVGColor.
        <https://webkit.org/b/124285>

        Use CSS_VALUE_TYPE_CASTS to generate type casting helpers for the
        SVGPaint and SVGColor classes.

        Reviewed by Anders Carlsson.

2013-11-13  Benjamin Poulain  <bpoulain@apple.com>

        Update ResourceHandleCF to use the didReceiveBuffer() callback
        https://bugs.webkit.org/show_bug.cgi?id=124256

        Reviewed by Alexey Proskuryakov.

        Use didReceiveBuffer() instead of didReceiveData() to pass data back to
        the ResourceHandleClient. This unify the update code with the NSURLConnection loader.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didReceiveData):
        (WebCore::ResourceHandle::handleDataArray):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Split Inspector.json into individual domain json files
        https://bugs.webkit.org/show_bug.cgi?id=124098

        Reviewed by Timothy Hatcher.

        Split the Inspector domains into their own json file. Generate a
        combined Inspector.json from all of the json files at build time
        so that the CodeGenerator is unchanged.

        * .gitattributes:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.py:
        (TypeMap.__init__):
        * inspector/Inspector.json: Removed.
        * inspector/Scripts/generate-combined-inspector-json.py: Added.
        * inspector/protocol/ApplicationCache.json: Added.
        * inspector/protocol/CSS.json: Added.
        * inspector/protocol/Canvas.json: Added.
        * inspector/protocol/Console.json: Added.
        * inspector/protocol/DOM.json: Added.
        * inspector/protocol/DOMDebugger.json: Added.
        * inspector/protocol/DOMStorage.json: Added.
        * inspector/protocol/Database.json: Added.
        * inspector/protocol/Debugger.json: Added.
        * inspector/protocol/FileSystem.json: Added.
        * inspector/protocol/HeapProfiler.json: Added.
        * inspector/protocol/IndexedDB.json: Added.
        * inspector/protocol/Input.json: Added.
        * inspector/protocol/InspectorDomain.json: Added.
        * inspector/protocol/LayerTree.json: Added.
        * inspector/protocol/Memory.json: Added.
        * inspector/protocol/Network.json: Added.
        * inspector/protocol/Page.json: Added.
        * inspector/protocol/Profiler.json: Added.
        * inspector/protocol/Runtime.json: Added.
        * inspector/protocol/Timeline.json: Added.
        * inspector/protocol/Worker.json: Added.

2013-11-13  Zalan Bujtas  <zalan@apple.com>

        Code cleanup: change FrameView::doLayoutWithFrameFlattening() to make it more explicit.
        https://bugs.webkit.org/show_bug.cgi?id=124238

        Reviewed by Simon Fraser.

        Rename doLayoutWithFrameFlattening() and change its signature so that it's inline with
        what it does.

        Covered by existing tests.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::startLayoutAtMainFrameViewIfNeeded):
        * page/FrameView.h:

2013-11-13  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Modifying RTCSessionDescription object construction to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=124212

        Reviewed by Eric Carlson.

        According to the spec the RTCSessionDescriptionInit parameter in RTCSessionDescription constructor is optional,
        which must not be nullable. If the 'type' and/or 'sdp' keys are not present, the string object that stores
        them in the RTCSessionDescription class, must be null in those cases. Also, if an object that is not a
        Dictionary is passed as argument to the constructor, an exception must be raised.

        Existing test was updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCSessionDescription.cpp:
        (WebCore::RTCSessionDescription::create):
        * Modules/mediastream/RTCSessionDescription.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCSessionDescriptionCustom.cpp: Added.
        (WebCore::JSRTCSessionDescriptionConstructor::constructJSRTCSessionDescription):

2013-11-13  Tim Horton  <timothy_horton@apple.com>

        Fix release build after r159224.

        * WebCore.exp.in:

2013-11-13  Anders Carlsson  <andersca@apple.com>

        Remove ChromeClient::paintCustomOverhangArea
        https://bugs.webkit.org/show_bug.cgi?id=124304

        Reviewed by Beth Dakin.

        This function always returns false now; get rid of it.

        * page/Chrome.cpp:
        * page/ChromeClient.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::paintOverhangAreas):

2013-11-09  Martin Robinson  <mrobinson@igalia.com>

        [MathML] The double bar vertical delimiter does not stretch properly
        https://bugs.webkit.org/show_bug.cgi?id=123543

        Reviewed by Chris Fleizach.

        * rendering/mathml/RenderMathMLOperator.cpp: Add stretching support for U+2225, which
        is another version of the vertical bar.

2013-11-13  Simon Fraser  <simon.fraser@apple.com>

        ASSERTION FAILED: m_repaintRect == renderer().clippedOverflowRectForRepaint(renderer().containerForRepaint()) after r135816
        https://bugs.webkit.org/show_bug.cgi?id=103432

        Reviewed by Dave Hyatt.

        RenderLayer caches repaint rects in m_repaintRect, and on updating layer
        positions after scrolling, asserts that the cached rect is correct. However,
        this assertion would sometimes fail if we were scrolling as a result of
        doing adjustViewSize() in the middle of layout, because we haven't updated
        layer positions post-layout yet.
        
        Fix by having the poorly named FrameView::repaintFixedElementsAfterScrolling()
        skip the layer updating if this FrameView is inside of adjusetViewSize() in
        layout.
        
        In order to know if we're inside view size adjusting, add a LayoutPhase
        member to FrameView, replacing two existing bools that track laying out state.

        Investigative work showed that there are many, many ways to re-enter FrameView::layout(),
        which makes it hard (but desirable) to more assertions about state changes, but
        indicated that saving and restoring the state (via TemporaryChange<LayoutPhase>)
        was a good idea.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateCompositingLayersAfterStyleChange):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::repaintFixedElementsAfterScrolling):
        * page/FrameView.h:

2013-11-13  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete unused TextPainter function
        https://bugs.webkit.org/show_bug.cgi?id=124292

        Reviewed by Tim Horton.

        New tests are unnecessary since there is no behavior change

        * rendering/TextPainter.cpp:
        (WebCore::TextPainter::paintText):
        * rendering/TextPainter.h:

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        Check WebCrypto parameter types when casting
        https://bugs.webkit.org/show_bug.cgi?id=124297

        Reviewed by Sam Weinig.

        Also changed existing toCryptoXXX functions to use TYPE_CASTS_BASE mechanism.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        And sure enough, there was a bug caught by the added checks.

        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        * crypto/CryptoAlgorithmParameters.h:
        (WebCore::CryptoAlgorithmParameters::ENUM_CLASS):
        (WebCore::CryptoAlgorithmParameters::parametersClass):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyData.h:
        * crypto/CryptoKeySerialization.h:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp:
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::importKey):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::generateKey):
        * crypto/keys/CryptoKeyAES.h:
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::isCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataRSAComponents.h:
        (WebCore::isCryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/keys/CryptoKeyRSA.h:
        * crypto/keys/CryptoKeySerializationRaw.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h:
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmHmacParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h:

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html is failing on Maverics release bot
        https://bugs.webkit.org/show_bug.cgi?id=124280

        Reviewed by Anders Carlsson.

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        Don't be a muppet, initialize your variables.

2013-11-12  Jer Noble  <jer.noble@apple.com>

        Add support for HTMLMediaElement.fastSeek()
        https://bugs.webkit.org/show_bug.cgi?id=124262

        Reviewed by Eric Carlson.

        Test: media/video-fast-seek.html

        Add the fastSeek() method to HTMLMediaElement, and use fastSeek() in
        the JavaScript media controls.

        Add the new fastSeek() method:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::fastSeek): Call seekWithTolerance.
        (HTMLMediaElement::seek): Call seekWithTolerance with 0 tolerance.
        (HTMLMediaElement::seekWithTolerance): Renamed from seek().
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl:

        Add seekWithTolerance() to MediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::seekWithTolerance): Pass to MediaPlayerPrivate.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::seekWithTolerance): Default implementation which
            calls seek().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Call seekWithTolerance with 0 tolerance.
        (WebCore::MediaPlayerPrivateAVFoundation::seekWithTolerance): Renamed from seek().
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekToTime): Take tolerance parameters.

        Use the new fastSeek() method while actively scrubbing.
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls): Add mouse up and down handlers.
        (Controller.prototype.handleTimeUpdate): Only update the timeline when not scrubbing.
        (Controller.prototype.handleTimelineChange): Use fastSeek().
        (Controller.prototype.handleTimelineMouseDown): Start scrubbing.
        (Controller.prototype.handleTimelineMouseUp): Stop scrubbing.

2013-11-13  Andreas Kling  <akling@apple.com>

        Generate casting helpers for scrolling tree classes.
        <https://webkit.org/b/124286>

        Added SCROLLING_STATE_NODE_TYPE_CASTS and used it to replace the
        hand-written toFoo() casts for ScrollingStateNode subclasses.

        Reviewed by Anders Carlsson.

2013-11-13  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Determining if a line is inside of a shape should only happen in one place
        https://bugs.webkit.org/show_bug.cgi?id=121708

        Reviewed by Andreas Kling.

        The ShapeInfo::lineOverlapsShapeBounds() methods now delegate to the Shape object. The
        logic for the Shape overlap test is now the same for ShapeInsideInfo and ShapeOutsideInfo.

        No new tests, this is just a refactoring of existing code.

        * rendering/shapes/Shape.h:
        (WebCore::Shape::lineOverlapsShapeMarginBounds): Apply lineOverlapsLayoutRect() to the shape-margin bounds LayoutRect.
        (WebCore::Shape::lineOverlapsShapePaddingBounds): Apply lineOverlapsLayoutRect() to the shape-padding bounds LayoutRect.
        (WebCore::Shape::lineOverlapsLayoutRect): The common code for checking if a line and a LayoutRect overlap.
        * rendering/shapes/ShapeInsideInfo.h: Use lineOverlapsShapePaddingBounds() for lineOverlapShapeBounds().
        * rendering/shapes/ShapeOutsideInfo.h: Use lineOverlapsShapeMarginBounds() for lineOverlapShapeBounds().

2013-11-13  Jochen Eisinger  <jochen@chromium.org>

        Restrict UserGestureIndicator to main thread
        https://bugs.webkit.org/show_bug.cgi?id=124277

        Reviewed by Andreas Kling.

        Certain classes that interact with UserGestureIndicators, e.g.
        the DOMTimer, can also live on worker threads. Since a
        background thread cannot possible get a user gesture in the
        first place, and to avoid races, we turn a UserGestureIndicator
        on a background thread into a no-op.

        * dom/UserGestureIndicator.cpp:
        (WebCore::UserGestureIndicator::UserGestureIndicator):
        (WebCore::UserGestureIndicator::~UserGestureIndicator):
        (WebCore::UserGestureIndicator::processingUserGesture):
        * dom/UserGestureIndicator.h:

2013-11-13  Antti Koivisto  <antti@apple.com>

        Factor simple line creation loop to function
        https://bugs.webkit.org/show_bug.cgi?id=124279

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::Style::Style):
        
            Capture style that affects line layout to a struct.

        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::measureWord):
        (WebCore::SimpleLineLayout::createLineRuns):
        
            Factor the line loop here.

        (WebCore::SimpleLineLayout::createTextRuns):

2013-11-12  Antti Koivisto  <antti@apple.com>

        Support overflow-wrap:break-word on simple line path
        https://bugs.webkit.org/show_bug.cgi?id=124206

        Reviewed by Andreas Kling.

        Pure text documents are rendered with break-word. It is also common in discussion board type sites.
        
        This also makes many <textarea>'s rendered using the simple line path.

        Tests: fast/forms/basic-textareas-quirks-simple-lines.html
               fast/forms/linebox-overflow-in-textarea-padding-simple-lines.html
               fast/forms/negativeLineHeight-simple-lines.html
               fast/forms/textAreaLineHeight-simple-lines.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange):
        (WebCore::RenderBlock::markShapeInsideDescendantsForLayout):
        
            Invalidate the cached line layout mode on shape-inside style change.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::createTextRuns):

2013-11-13  Andreas Kling  <akling@apple.com>

        Turn some not-so-rare ElementRareData bits into Node flags.
        <https://webkit.org/b/124275>

        The following 4 bits seem to be the most commonly set:

        - childrenAffectedByHover()
        - childrenAffectedByFirstChildRules()
        - childrenAffectedByLastChildRules()
        - childrenAffectedByDirectAdjacentRules()

        Turning them into Node flags means we don't have to allocate full
        ElementRareData object in many cases. I also took this opportunity
        to make Node's flag twiddling functions available to subclasses.

        1.38 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-13  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Cleanup the build from unused parameters in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124199.

        Reviewed by Csaba Osztrogonác.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedOrPendingImage):
        * dom/Document.cpp:
        (WebCore::Document::scriptedAnimationControllerSetThrottled):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        * html/HTMLAnchorElement.cpp:
        (WebCore::shouldProhibitLinks):
        * html/parser/XSSAuditor.cpp:
        (WebCore::isSemicolonSeparatedAttribute):
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveData):
        (WebCore::DocumentThreadableLoader::didFail):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::animate):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::applyFontTransforms):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::setIsInWindow):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        (WebCore::RenderStyle::changeRequiresLayerRepaint):
        (WebCore::RenderStyle::changeRequiresRecompositeLayer):
        * testing/Internals.cpp:
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setCaptionsStyleSheetOverride):

2013-11-13  Andreas Kling  <akling@apple.com>

        Refalize CSSCursorImageValue.
        <https://webkit.org/b/124272>

        Make CSSCursorImageValue constructor return a PassRef, and have it
        take the image CSSValue as a PassRef (and store it internally in a
        Ref<CSSValue>.)

        Had to add a Ref version of compareCSSValuePtr() to make this work.

        Reviewed by Antti Koivisto.

2013-11-13  Andreas Kling  <akling@apple.com>

        RenderTableSection: Cell structures don't need allocation padding.
        <https://webkit.org/b/124263>

        The row structure data gets shrunk-to-fit once we get to layout,
        but per-row cell structures get no such luxury. Fortuntely we know
        ahead of time how many cells a row needs to accomodate, so we can
        just use Vector::resizeToFit() instead of Vector::grow().

        1.25 MB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

2013-11-13  Andreas Kling  <akling@apple.com>

        Avoid unnecessarily padding the FontDescription families vector.
        <https://webkit.org/b/124267>

        Use a bit of reserveInitialCapacity+uncheckedAppend grease to avoid
        jumping all the way to capacity=16 when a style has more than just
        a single font-family in it.

        130 kB progression on HTML5-8266 locally.

        Reviewed by Antti Koivisto.

        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontFamily::applyValue):

2013-11-13  Andreas Kling  <akling@apple.com>

        Make remaining CSSPrimitiveValue constructors return PassRef.
        <https://webkit.org/b/124270>

        ..and same with the corresponding CSSValuePool functions.

        Reviewed by Antti Koivisto.

2013-11-13  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        Added a way to add an Uint8Array, as needed for RSA key.algorithm.publicExponent.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams): Removed unneeded JSC prefixes.
        (WebCore::createAesKeyGenParams): Ditto.
        (WebCore::createHmacParams): Ditto.
        (WebCore::createHmacKeyParams): Ditto.
        (WebCore::createRsaKeyGenParams): Added. 
        (WebCore::createRsaSsaKeyParams): Added. WebCrypto currently doesn't specify any
        parameters for importKey, so the structure remains blank (unlike with JWK).
        (WebCore::createRsaSsaParams): Added (currently unused, will be sued for sign/verify soon).
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey): Ditto.

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Added.
        (WebCore::getBigIntegerVectorFromJSON): Added.
        (WebCore::createRSASSAKeyParameters): Create parameters for key import. The key
        will remember which algorithm it's allowed to be used with.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): Added support for
        RS256...RS512 (tha is, RSAES_PKCS1_v1_5 with SHA-256...SHA-512).
        (WebCore::JSCryptoKeySerializationJWK::keyDataOctetSequence): Split out of keyData().
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Added code to read
        RSA key components from JWK.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Call one of the above functions.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Placeholders.

        * crypto/CryptoKey.h: (WebCore::CryptoKeyClass): Added RSA key class for poor man's RTTI.

        * crypto/CryptoKeyData.h: (WebCore::CryptoKeyData::FormatRSAComponents): Added RSAComponents
        for poor man's RTTI.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: (WebCore::CryptoAlgorithmAES_CBC::importKey): 
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::isCryptoKeyAES):
        (WebCore::toCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::toCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::isCryptoKeyHMAC):
        (WebCore::toCryptoKeyHMAC):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Switched from "as" functions to "is" and "to" ones, as that's more idiomatic.

        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Added.
        Glue code for importKey/generateKey for now.

        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Added.
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents):
        (WebCore::CryptoKeyDataRSAComponents::~CryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyDataRSAComponents.h: Added.
        (WebCore::toCryptoKeyDataRSAComponents):
        Added a structure to hold RSA key components, extracted from JWK or another format.

        * crypto/keys/CryptoKeyRSA.h: Added.
        * crypto/mac/CryptoKeyRSAMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Register RSASSA_PKCS1_v1_5.

        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added a constructor to make
        sure that hasLength is never left uninitialized, even when reading formats that
        don't contain a length.

        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Added.
        Added parameter structures that are needed for RSASSA_PKCS1_v1_5.

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Disable WebCrypto on Mountain Lion
        https://bugs.webkit.org/show_bug.cgi?id=124261

        Rubber-stamped by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Manage XMLHttpRequestUpload, XSLImportRule, XMLErrors, XML pending callback classes through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124224

        Reviewed by Anders Carlsson.

        Use std::unique_ptr to handle objects of various XML classes that were previously managed by OwnPtr.
        This removes usage of OwnPtr and PassOwnPtr under Source/WebCore/xml/.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::upload):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XSLImportRule.h:
        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::loadChildSheet):
        * xml/parser/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError):
        * xml/parser/XMLDocumentParser.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::PendingCallbacks::callAndRemoveFirstCallback):
        (WebCore::XMLDocumentParser::XMLDocumentParser):

2013-11-12  Brady Eidson  <beidson@apple.com>

        Move basic IDBBackingStoreTransaction operations to IDBServerConnection
        https://bugs.webkit.org/show_bug.cgi?id=124244

        Reviewed by Tim Horton (and unofficially Anders Carlsson).

        This patch:
        - Makes IDBBackingStore the owner of an IDBBackingStoreTransaction.
        - Adds the integer transaction ID to IDBBackingStoreTransaction for reference.
        - Removes IDBTransactionBackend’s reliance on IDBBackingStoreTransaction by moving
          necessary methods to IDBServerConnection.
        - Renames the IDBTransactionBackend::backingStoreTransaction() accessor to
          deprecatedBackingStoreTransaction to make it clear it’s on the way out.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::setIndexKeys):

        * Modules/indexeddb/IDBServerConnection.h:

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::~IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::deprecatedBackingStoreTransaction):
        (WebCore::IDBTransactionBackend::scheduleTask):
        (WebCore::IDBTransactionBackend::abort):
        (WebCore::IDBTransactionBackend::commit):
        (WebCore::IDBTransactionBackend::taskTimerFired):
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::generateKey):
        (WebCore::IDBBackingStoreLevelDB::updateKeyGenerator):
        (WebCore::IDBBackingStoreLevelDB::establishBackingStoreTransaction):
        (WebCore::IDBBackingStoreLevelDB::deprecatedBackingStoreTransaction):
        (WebCore::IDBBackingStoreLevelDB::removeBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp:
        (WebCore::IDBBackingStoreTransactionLevelDB::IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::~IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::resetTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::deprecatedBackingStoreTransaction):
        (WebCore::IDBServerConnectionLevelDB::openTransaction):
        (WebCore::IDBServerConnectionLevelDB::beginTransaction):
        (WebCore::IDBServerConnectionLevelDB::commitTransaction):
        (WebCore::IDBServerConnectionLevelDB::resetTransaction):
        (WebCore::IDBServerConnectionLevelDB::rollbackTransaction):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h:

2013-11-12  Andy Estes  <aestes@apple.com>

        Fix the Mountain Lion build after r159171.

        * platform/mac/HTMLConverter.mm:
        (_dateForString): +[NSCalendar calendarWithIdentifier:] only exists on
        10.9. Use -[NSCalendar initWithIdentifier:] instead.

2013-11-12  Andy Estes  <aestes@apple.com>

        [Mac] Fix some deprecation warnings
        https://bugs.webkit.org/show_bug.cgi?id=124252

        Reviewed by Mark Rowe.

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Use CFPropertyListCreateWithData()
        instead of CFPropertyListCreateFromXMLData().
        (WebCore::LegacyWebArchive::rawDataRepresentation): Use
        CFPropertyListWrite() instead of CFPropertyListWriteToStream().
        * platform/mac/HTMLConverter.mm:
        (_dateForString): Rewrite this method in terms of NSDateComponents and
        NSCalendar instead of using CFGregorianDate.

2013-11-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r159160, r159161, and r159164.
        http://trac.webkit.org/changeset/159160
        http://trac.webkit.org/changeset/159161
        http://trac.webkit.org/changeset/159164
        https://bugs.webkit.org/show_bug.cgi?id=124253

        Too many errors (make fewer) (Requested by ap on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams):
        (WebCore::createAesKeyGenParams):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey):
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm):
        (WebCore::JSCryptoKeySerializationJWK::keyData):
        * bindings/js/JSCryptoKeySerializationJWK.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Removed.
        * crypto/CryptoKey.h:
        (WebCore::ENUM_CLASS):
        * crypto/CryptoKeyData.h:
        (WebCore::CryptoKeyData::ENUM_CLASS):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Removed.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Removed.
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::asCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::asCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Removed.
        * crypto/keys/CryptoKeyDataRSAComponents.h: Removed.
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::asCryptoKeyHMAC):
        * crypto/keys/CryptoKeyRSA.h: Removed.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/mac/CryptoKeyRSAMac.cpp: Removed.
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h:
        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Removed.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Removed.

2013-11-12  Bem Jones-Bey  <bjonesbe@adobe.com>

        Make the placed floats tree use LayoutUnit instead of int
        https://bugs.webkit.org/show_bug.cgi?id=124207

        Reviewed by Alexandru Chiculita.

        The dimensions of floats are in LayoutUnits, so it doesn't make sense
        to be converting to ints for use in the placed floats tree.

        Also add missed "explicit" to single argument FloatingObjects
        constructor.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::rangesIntersect):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetAdapter::lowValue):
        (WebCore::ComputeFloatOffsetAdapter::highValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::lowValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::highValue):
        * rendering/FloatingObjects.h:
        * rendering/RenderFlowThread.h:

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Build fix.

        * crypto/mac/CryptoKeyRSAMac.cpp: (WebCore::CryptoKeyRSA::buildAlgorithmDescription):
        ifdef out some code on Mountain Lion. Bug 124249 track fixing this.

2013-11-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Extract InspectorAgentRegistry from InspectorBaseAgent
        https://bugs.webkit.org/show_bug.cgi?id=124190

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAgentRegistry.cpp: Added.
        (WebCore::InspectorAgentRegistry::append):
        (WebCore::InspectorAgentRegistry::setFrontend):
        (WebCore::InspectorAgentRegistry::clearFrontend):
        (WebCore::InspectorAgentRegistry::registerInDispatcher):
        (WebCore::InspectorAgentRegistry::discardAgents):
        * inspector/InspectorAgentRegistry.h: Added.
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorBaseAgent.cpp: Removed.
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        (WebCore::InspectorBaseAgentInterface::~InspectorBaseAgentInterface):
        * inspector/InspectorController.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/WorkerInspectorController.h:

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Release build fix.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp: Include TypedArrayInlines.h

2013-11-12  Alexey Proskuryakov  <ap@apple.com>

        Implement key generation and JWK import for RSASSA-PKCS1-v1_5
        https://bugs.webkit.org/show_bug.cgi?id=124236

        Reviewed by Sam Weinig.

        Tests: crypto/subtle/rsassa-pkcs1-v1_5-generate-key.html
               crypto/subtle/rsassa-pkcs1-v1_5-import-jwk.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::add):
        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        Added a way to add an Uint8Array, as needed for RSA key.algorithm.publicExponent.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams): Removed unneeded JSC prefixes.
        (WebCore::createAesKeyGenParams): Ditto.
        (WebCore::createHmacParams): Ditto.
        (WebCore::createHmacKeyParams): Ditto.
        (WebCore::createRsaKeyGenParams): Added. 
        (WebCore::createRsaSsaKeyParams): Added. WebCrypto currently doesn't specify any
        parameters for importKey, so the structure remains blank (unlike with JWK).
        (WebCore::createRsaSsaParams): Added (currently unused, will be sued for sign/verify soon).
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDeriveBits): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Added support for RSAES_PKCS1_v1_5.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Removed unneeded JSC prefixes.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForWrapKey): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForUnwrapKey): Ditto.

        * bindings/js/JSCryptoKeySerializationJWK.h:
        * bindings/js/JSCryptoKeySerializationJWK.cpp:
        (WebCore::getJSArrayFromJSON): Added.
        (WebCore::getBigIntegerVectorFromJSON): Added.
        (WebCore::createRSASSAKeyParameters): Create parameters for key import. The key
        will remember which algorithm it's allowed to be used with.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): Added support for
        RS256...RS512 (tha is, RSAES_PKCS1_v1_5 with SHA-256...SHA-512).
        (WebCore::JSCryptoKeySerializationJWK::keyDataOctetSequence): Split out of keyData().
        (WebCore::JSCryptoKeySerializationJWK::keyDataRSAComponents): Added code to read
        RSA key components from JWK.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Call one of the above functions.

        * crypto/CryptoAlgorithmRSASSA_PKCS1_v1_5Mac.cpp: Added.
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::sign):
        (WebCore::CryptoAlgorithmRSASSA_PKCS1_v1_5::verify):
        Placeholders.

        * crypto/CryptoKey.h: (WebCore::CryptoKeyClass): Added RSA key class for poor man's RTTI.

        * crypto/CryptoKeyData.h: (WebCore::CryptoKeyData::FormatRSAComponents): Added RSAComponents
        for poor man's RTTI.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: (WebCore::CryptoAlgorithmAES_CBC::importKey): 
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/keys/CryptoKeyAES.h:
        (WebCore::isCryptoKeyAES):
        (WebCore::toCryptoKeyAES):
        * crypto/keys/CryptoKeyDataOctetSequence.h:
        (WebCore::toCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::isCryptoKeyHMAC):
        (WebCore::toCryptoKeyHMAC):
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Switched from "as" functions to "is" and "to" ones, as that's more idiomatic.

        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmRSASSA_PKCS1_v1_5.h: Added.
        Glue code for importKey/generateKey for now.

        * crypto/keys/CryptoKeyDataRSAComponents.cpp: Added.
        (WebCore::CryptoKeyDataRSAComponents::CryptoKeyDataRSAComponents):
        (WebCore::CryptoKeyDataRSAComponents::~CryptoKeyDataRSAComponents):
        * crypto/keys/CryptoKeyDataRSAComponents.h: Added.
        (WebCore::toCryptoKeyDataRSAComponents):
        Added a structure to hold RSA key components, extracted from JWK or another format.

        * crypto/keys/CryptoKeyRSA.h: Added.
        * crypto/mac/CryptoKeyRSAMac.cpp: Added.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        Register RSASSA_PKCS1_v1_5.

        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added a constructor to make
        sure that hasLength is never left uninitialized, even when reading formats that
        don't contain a length.

        * crypto/parameters/CryptoAlgorithmRsaKeyGenParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmRsaSsaParams.h: Added.
        Added parameter structures that are needed for RSASSA_PKCS1_v1_5.

2013-11-12  Bem Jones-Bey  <bjonesbe@adobe.com>

        Move ValueToString out to its own header file to remove duplication
        https://bugs.webkit.org/show_bug.cgi?id=124237

        Reviewed by Alexandru Chiculita.

        The ValueToString struct is used in many places for debugging. Move it
        out to its own header file to remove all the duplicated definitions
        and make it possible for the specializations to be placed in the
        header files with the implementation of the classes they print.

        No new tests, no behavior change.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.h:
        * platform/LayoutUnit.h:
        * platform/PODInterval.h:
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        * platform/ValueToString.h: Added.
        * platform/graphics/FloatPolygon.h:
        * rendering/FloatingObjects.cpp:
        * rendering/FloatingObjects.h:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderFlowThread.h:

2013-11-11  David Hyatt  <hyatt@apple.com>

        Make RenderBlockRareData be in a hashtable instead of being a member variable.
        https://bugs.webkit.org/show_bug.cgi?id=124056

        Reviewed by Anders Carlsson.

        Right now RenderBlock has 4 bytes taken up by a m_rareData member that is almost
        never allocated. This is better off in a separate hash, so that RenderBlock can
        get 4 bytes back.
        
        Since RenderBlockFlow's rare data member was recently removed and folded into
        RenderBlock, we need to undo that change and put the rare data member back in
        RenderBlockFlow. RenderBlockFlowRareData inheriting from RenderBlockRareData
        was not a good idea anyway, since RenderBlockFlows also very rarely need the
        RenderBlockRareData members, and were thus paying a heavier cost when the rare
        data was created than was necessary.
 
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::hasRareData):
        (WebCore::getRareData):
        (WebCore::ensureRareData):
        (WebCore::RenderBlock::ensureShapeInsideInfo):
        (WebCore::RenderBlock::shapeInsideInfo):
        (WebCore::RenderBlock::setShapeInsideInfo):
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::pageLogicalOffset):
        (WebCore::RenderBlock::setPaginationStrut):
        (WebCore::RenderBlock::setPageLogicalOffset):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::setMaxMarginBeforeValues):
        (WebCore::RenderBlockFlow::setMaxMarginAfterValues):
        (WebCore::RenderBlockFlow::setMustDiscardMarginBefore):
        (WebCore::RenderBlockFlow::setMustDiscardMarginAfter):
        (WebCore::RenderBlockFlow::mustDiscardMarginBefore):
        (WebCore::RenderBlockFlow::mustDiscardMarginAfter):
        (WebCore::RenderBlockFlow::setBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::setDidBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::clearDidBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::clearShouldBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        (WebCore::RenderBlockFlow::ensureRareBlockFlowData):
        (WebCore::RenderBlockFlow::materializeRareBlockFlowData):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::shouldBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::lineBreakToAvoidWidow):
        (WebCore::RenderBlockFlow::didBreakAtLineToAvoidWidow):
        (WebCore::RenderBlockFlow::lineGridBox):
        (WebCore::RenderBlockFlow::setLineGridBox):
        (WebCore::RenderBlockFlow::renderNamedFlowFragment):
        (WebCore::RenderBlockFlow::maxPositiveMarginBefore):
        (WebCore::RenderBlockFlow::maxNegativeMarginBefore):
        (WebCore::RenderBlockFlow::maxPositiveMarginAfter):
        (WebCore::RenderBlockFlow::maxNegativeMarginAfter):
        (WebCore::RenderBlockFlow::initMaxMarginValues):
        (WebCore::RenderBlockFlow::hasRareBlockFlowData):
        (WebCore::RenderBlockFlow::rareBlockFlowData):

2013-11-12  Alex Christensen  <achristensen@webkit.org>

        Build GStreamer files on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=124180

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        Include gstreamer files in WinCairo build.

2013-11-12  Brady Eidson  <beidson@apple.com>

        Introduce IDBServerConnection (and start moving things to it).
        https://bugs.webkit.org/show_bug.cgi?id=124193

        Reviewed by Alexey Proskuryakov.

        IDBServerConnection will be a purely asynchronous interface for database connections, transactions, and cursors.
        Its interface will be 100% asynchronous and callback based - Perfect for an IPC divide.
        Eventually none of the IDB<Foo>Backend classes will need IDBBackingStore<Foo> classes at all, 
        and they’ll all use IDBServerConnection directly.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBServerConnection.h: Added.
        (WebCore::IDBServerConnection::~IDBServerConnection):

        Concrete implementation that - for now - wraps an IDBBackingStoreLevelDB:
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp: Added.
        (WebCore::IDBServerConnectionLevelDB::IDBServerConnectionLevelDB):
        (WebCore::IDBServerConnectionLevelDB::deprecatedBackingStore):
        (WebCore::IDBServerConnectionLevelDB::isClosed):
        (WebCore::IDBServerConnectionLevelDB::getOrEstablishIDBDatabaseMetadata):
        (WebCore::IDBServerConnectionLevelDB::deleteDatabase):
        (WebCore::IDBServerConnectionLevelDB::close):
        * Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h: Added.

        LevelDB created databases get LevelDB server connections:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):

        Replace most uses of IDBBackingStore with server connection:
        * Modules/indexeddb/IDBDatabaseBackend.cpp:
        (WebCore::IDBDatabaseBackend::create):
        (WebCore::IDBDatabaseBackend::IDBDatabaseBackend):
        (WebCore::IDBDatabaseBackend::openInternalAsync):
        (WebCore::IDBDatabaseBackend::setIndexKeys):
        (WebCore::IDBDatabaseBackend::openConnectionInternal):
        (WebCore::IDBDatabaseBackend::deleteDatabaseAsync):
        (WebCore::IDBDatabaseBackend::close):
        * Modules/indexeddb/IDBDatabaseBackend.h:
        (WebCore::IDBDatabaseBackend::serverConnection):

        Change all the operations to access their DatabaseBackend’s server connection instead
        if hanging on to a backing store directly:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::IDBTransactionBackend):
        (WebCore::IDBTransactionBackend::scheduleCreateObjectStoreOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteObjectStoreOperation):
        (WebCore::IDBTransactionBackend::scheduleCreateIndexOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteIndexOperation):
        (WebCore::IDBTransactionBackend::scheduleGetOperation):
        (WebCore::IDBTransactionBackend::schedulePutOperation):
        (WebCore::IDBTransactionBackend::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackend::scheduleCountOperation):
        (WebCore::IDBTransactionBackend::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackend::scheduleClearOperation):
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):
        * Modules/indexeddb/IDBTransactionCoordinator.h:

2013-11-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed gardening.

        * WebCore.vcxproj/WebCore.vcxproj.filters: Correct filter file so that source
        files show up in their proper directories in Visual Studio.

2013-11-12  Alex Christensen  <achristensen@webkit.org>

        [WinCairo] Preparation for ENABLE(VIDEO).
        https://bugs.webkit.org/show_bug.cgi?id=57420

        Reviewed by Martin Robinson.

        * platform/FileSystem.h:
        * platform/graphics/MediaPlayer.cpp:
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSliderThumbSize):
        Separated CG code from GStreamer code.

2013-11-12  Tibor Meszaros  <mtibor@inf.u-szeged.hu>

        Fix reported build warnings for GTK
        https://bugs.webkit.org/show_bug.cgi?id=123439

        Reviewed by Carlos Garcia Campos.

        There was a void method, that has return value in it's documentation, so I removed it.

        * bindings/gobject/WebKitDOMCustom.h:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Manage StorageThread through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=124197

        Reviewed by Anders Carlsson.

        New StorageThread objects are crafted through std::make_unique. This removes the need for the static
        StorageThread::create() method but requires that the StorageThread constructor is made public.

        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::StorageSyncManager):
        * storage/StorageSyncManager.h:
        * storage/StorageThread.cpp:
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        * storage/StorageTracker.h:

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        Remove unnecessary PassOwnPtr.h header includes under Source/WebCore/fileapi
        https://bugs.webkit.org/show_bug.cgi?id=124196

        Reviewed by Anders Carlsson.

        PassOwnPtr is not used anywhere under Source/WebCore/fileapi/, so PassOwnPtr.h inclusions can be removed.

        * fileapi/Blob.h:
        * fileapi/FileThread.h:
        * fileapi/FileThreadTask.h:

2013-11-12  Antti Koivisto  <antti@apple.com>

        Text on simple lines sometimes paints one pixel off
        https://bugs.webkit.org/show_bug.cgi?id=124200

        Reviewed by Andreas Kling.

        Test: fast/text/line-runs-simple-lines.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::adjustRunOffsets):
        
            Don't round on run construction time.

        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        
            Instead round when generating rects.

        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        
            Provide the baseline (used by painting) as unrounded FloatPoint.

2013-11-11  Andreas Kling  <akling@apple.com>

        Elements with class names automatically get unique ElementData.
        <https://webkit.org/b/124184>

        We were calling Element::ensureUniqueElementData() for all Elements
        with a non-empty list of class names. Doing that on parser-fresh
        Elements caused us to upgrade them to UniqueElementData despite not
        needing it (ElementData::setClass() is a const function for caching
        the "cooked" class and can be called on ShareableElementData.)

        1.09 MB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Antti Koivisto.

2013-11-12  Zan Dobersek  <zdobersek@igalia.com>

        JSC bindings generator should generate deletable JSC functions
        https://bugs.webkit.org/show_bug.cgi?id=122422

        Reviewed by Geoffrey Garen.

        The JSC functions that the JSC bindings generator generates should be deletable to conform to
        the WebIDL specification, which instructs that the WebIDL operations must be configurable (which
        translates to the JSC functions being deletable).

        The generator will still produce a non-deletable JSC function for operations under almost all
        Web-facing interfaces since they're annotated with the OperationsNotDeletable attribute. The
        exception here is the Node interface that is having the attribute removed, with the provided
        test case testing that all the functions on the Node prototype object are writable, enumerable
        and configurable. This behavior conforms to the WebIDL specification and the behaviors of IE
        and Firefox. Chrome at the moment still provides non-configurable functions.

        Test: fast/dom/webidl-operations-on-node-prototype.html

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation): Enforce the non-deletable behavior of the JSC function if either the
        operation's interface is annotated with the OperationsNotDeletable attribute or the operation itself
        is annotated with the NotDeletable attribute.
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp: Update the JSC generator test baselines.
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestEventTarget.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestInterface.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestTypedefs.cpp: Ditto.
        * dom/Node.idl: Remove the OperationsNotDeletable attribute.

2013-11-11  Brady Eidson  <beidson@apple.com>

        Make IDBTransaction tasks asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=124183

        Reviewed by Tim Horton.

        This is an almost zero-change in behavior.

        The one thing that is different is that previously, IDBTransactionBackends would synchronously
        run through their entire set of IDBOperation’s without ever returning control to the runloop.

        Now, they start one task and then wait for its completion to schedule the start of the next task.

        Change IDBOperation’s perform() to take a completion handler so it can be asynchronous.
        Add an IDBSynchronousOperation class to handle "Abort" tasks, which never need to perform i/o
        and therefore can be entirely synchronous.
        * Modules/indexeddb/IDBOperation.h:
        (WebCore::IDBSynchronousOperation::~IDBSynchronousOperation):

        * Modules/indexeddb/IDBTransactionBackend.cpp:
        (WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.
        (WebCore::IDBTransactionBackend::abort):
        (WebCore::IDBTransactionBackend::taskTimerFired): Instead of running through the entire set of tasks,
          perform a single task asynchronously. The completion handler for the task will reset the task timer
          to asynchronously start the next task.
        * Modules/indexeddb/IDBTransactionBackend.h:
        (WebCore::IDBTransactionBackend::scheduleTask): "Abort tasks" are now IDBSynchronousOperations.

        Update all operations to take completion handlers.
        For now, perform things synchronously like before, calling the completion handler when complete.
        * Modules/indexeddb/IDBCursorBackend.cpp:
        (WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called perform() exits.
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::IDBCursorBackend::CursorIterationOperation::create):
        (WebCore::IDBCursorBackend::CursorAdvanceOperation::create):
        (WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::create):
        (WebCore::IDBCursorBackend::CursorAdvanceOperation::perform):
        (WebCore::IDBCursorBackend::CursorIterationOperation::perform):
        (WebCore::IDBCursorBackend::CursorPrefetchIterationOperation::perform):

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::CallOnDestruct::CallOnDestruct): Helper class to make sure completion callbacks are always called when perform() exits.
        (WebCore::CallOnDestruct::~CallOnDestruct):
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::perform):

        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::IDBDatabaseBackend::VersionChangeAbortOperation::create):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::GetOperation::create):
        (WebCore::PutOperation::create):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::OpenCursorOperation::create):
        (WebCore::CountOperation::create):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::ClearOperation::create):

2013-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove some unused generated code
        https://bugs.webkit.org/show_bug.cgi?id=124179

        Reviewed by Timothy Hatcher.

        * inspector/CodeGeneratorInspectorStrings.py:

2013-11-11  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Clean up static_cast<Element*> usage
        https://bugs.webkit.org/show_bug.cgi?id=124133

        Reviewed by Andreas Kling.

        We need to use toFoo cast function instead of static_cast<>. Though there is toElement(),
        static_cast<Element*> is still being used.

        No new tests, no behavior changes.

        * bindings/gobject/WebKitDOMPrivate.cpp:
        (WebKit::wrap):
        * dom/ElementTraversal.h:
        (WebCore::::lastWithinTemplate):
        (WebCore::::nextTemplate):
        (WebCore::::previousTemplate):

2013-11-11  Anders Carlsson  <andersca@apple.com>

        FrameFilter can just be an std::function instead
        https://bugs.webkit.org/show_bug.cgi?id=124176

        Reviewed by Tim Horton.

        * WebCore.exp.in:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * loader/archive/cf/LegacyWebArchive.h:

2013-11-11  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r155660): box-shadow causes overlay scrollbars to be in the wrong position when element is composited (85647)
        https://bugs.webkit.org/show_bug.cgi?id=124090

        Reviewed by Beth Dakin.
        
        After r155660 we did fewer layouts, so were left with overlay scrollbars in the
        wrong locations because nothing would update them after RenderLayerBacking
        computed a new offsetFromRenderer.
        
        First part of the fix is to wean positionOverflowControlsLayers() off of
        an absolute offset from the root. Do this by not using Widget::frameRect()
        to position the layers, but instead RenderLayer::rectFor{Horizontal|Vertical}Scrollbar
        which is what we used to position the scrollbars in the first place.
        
        Second part of the fix is to call positionOverflowControlsLayers() from
        RenderLayerBacking::updateGraphicsLayerGeometry() if the offsetFromRenderer
        changed.

        Test: compositing/overflow/overflow-scrollbar-layer-positions.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::positionOverflowControls):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
        * rendering/RenderLayerBacking.h:

2013-11-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] m_isCompositeFontReference is uninitialized.
        https://bugs.webkit.org/show_bug.cgi?id=124170

        Reviewed by Tim Horton.

        Initialize value to false, as is done in the other constructors for this data type.

        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData): 
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/win/FontPlatformDataWin.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2013-11-11  Myles C. Maxfield  <mmaxfield@apple.com>

        [Mac] Characters too close together in complex Arabic text
        https://bugs.webkit.org/show_bug.cgi?id=124057

        Reviewed by Darin Adler.

        We weren't updating our total width variable with run's initial
        advance information, leading to widths that were too narrow.

        In addition, while initial advances for runs that aren't the first
        run are accounted for by baking in the initial advances into the
        previous character's advance, the initial advance for the first run
        has to be accounted for in ComplexTextController::offsetForPosition.

        Test: fast/text/complex-grapheme-cluster-with-initial-advance.html
        Test: fast/text/selection-in-initial-advance-region.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Update
        total width variable
        (WebCore::ComplexTextController::offsetOfPosition): Account for
        the first run's initial advance.

2013-11-11  Brady Eidson  <beidson@apple.com>

        Make IDBBackingStoreTransaction be RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=124168

        Reviewed by Tim Horton.

        This is necessarily to safely add a fully asynchronous interface into the IDB mechanism.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h:
        * Modules/indexeddb/IDBTransactionBackend.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

2013-11-11  Antti Koivisto  <antti@apple.com>

        End of line whitespace should collapse with white-space:pre-wrap; overflow-wrap:break-word in all cases
        https://bugs.webkit.org/show_bug.cgi?id=124158

        Reviewed by Dave Hyatt.
        
        If a word just fits the line but the following space overflows we fail to collapse whitespaces 
        at the end of the line. This happens because with break-word we end up taking word breaking
        code path that does not have pre-wrap whitespace handling.
        
        This patch makes the behavior consistent and also matches Firefox.

        Test: fast/text/break-word-pre-wrap.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::BreakingContext::handleText):
        
            Don't take the word break code path if we are pre-wrap and the current character is space.
            Instead proceed to break the line normally as this is a valid break position.

2013-11-11  Bear Travis  <betravis@adobe.com>

        Web Inspector: [CSS Shapes] Highlight shape-outside when its element is selected in the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=124071

        Reviewed by Timothy Hatcher.

        Adding code to pass computed shape information (path and bounds) to the Inspector overlay
        canvas, and the code to display it. The code creates a path based on ShapeInfo's computed
        shape. The shape highlight draws whenever an element is highlighted, via selection in
        the Inspector elements view.

        Test: inspector-protocol/model/highlight-shape-outside.html

        * inspector/InspectorOverlay.cpp:
        (WebCore::localPointToRoot): Convert a local point to be relative to the root view.
        (WebCore::appendPathCommandAndPoints): Helper for building a single segment's worth
        of the overall path.
        (WebCore::appendPathSegment): Build a single segment's worth of the overall path.
        (WebCore::buildObjectForShapeOutside): Build an object to pass to the Inspector overlay
        that represents the shape.
        (WebCore::buildObjectForElementInfo): Call buildObjectForShapeOutside and pass the
        resulting object along.
        * inspector/InspectorOverlayPage.js:
        (pathCommand): Draw a single path command.
        (drawPath): Draw the overall path.
        (_drawShapeHighlight): Draw the highlight for the given shapeInfo.
        (drawNodeHighlight): Call _drawShapeHighlight.
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::polygon): Expose the underlying vertex information for a
        PolygonShape.
        * rendering/shapes/RasterShape.h:
        * rendering/shapes/RectangleShape.h:
        (WebCore::RectangleShape::logicalRx): Expose the logical radii for a shape.
        (WebCore::RectangleShape::logicalRy): Ditto.
        * rendering/shapes/Shape.h:
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::computedShapePhysicalBoundingBox): The physical bounds of a
        shape in renderer coordinates.
        (WebCore::ShapeInfo::shapeToRendererPoint): Convert shape coordinates to renderer
        coordinates.
        (WebCore::ShapeInfo::shapeToRendererSize): Ditto.
        (WebCore::ShapeInfo::ShapeInfo):

2013-11-11  Alexey Proskuryakov  <ap@apple.com>

        Support WebCrypto KeyPair interface
        https://bugs.webkit.org/show_bug.cgi?id=124161

        Reviewed by Geoffrey Garen.

        No new tests yet, will be tested once generateKey is implemented for any RSA algorithms.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        Added new files.

        * bindings/js/JSDOMPromise.h: Support returning a key pair via a promise.

        * bindings/js/JSCryptoKeyPairCustom.cpp: Added.
        (WebCore::JSCryptoKeyPair::visitChildren):
        * crypto/CryptoKey.idl:
        CryptoKey wrapper is reachable through KeyPair, but it doesn't have (or need)
        a back pointer.

        * crypto/CryptoKeyPair.cpp: Added.
        (WebCore::CryptoKeyPair::CryptoKeyPair):
        (WebCore::CryptoKeyPair::~CryptoKeyPair):
        * crypto/CryptoKeyPair.h: Added.
        (WebCore::CryptoKeyPair::create):
        (WebCore::CryptoKeyPair::publicKey):
        (WebCore::CryptoKeyPair::privateKey):
        * crypto/CryptoKeyPair.idl: Added.

2013-11-11  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Fix build after r158967
        https://bugs.webkit.org/show_bug.cgi?id=124160

        Reviewed by Anders Carlsson.

        After r158967, gcc debug builds with "-Werror=type-limits" enabled
        fail. This patch fixes it.

        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::intervalsAt):

2013-11-11  Zan Dobersek  <zdobersek@igalia.com>

        Remove the OperationsNotDeletable attribute from most of the WebIDL interfaces
        https://bugs.webkit.org/show_bug.cgi?id=124151

        Reviewed by Geoffrey Garen.

        The OperationsNotDeletable attribute currently doesn't have any effect, but will soon enforce
        non-configurability of operations on the interface that uses the attribute. Non-configurability
        of operations is the default behavior at the moment, but will be changed to follow the WebIDL
        specification which requires that the operations are configurable (i.e. -- in JSC terms -- deletable).
        IE and Firefox already exhibit this behavior in the majority of cases, while Chrome and Opera don't.

        The attribute remains in use on the Location interface to mimic the Unforgeable attribute which
        also makes operations of an interface non-configurable. Unforgeable attribute will be used instead
        when support for it will be added to the JSC bindings generator.

        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/indexeddb/IDBCursor.idl:
        * Modules/indexeddb/IDBDatabase.idl:
        * Modules/indexeddb/IDBFactory.idl:
        * Modules/indexeddb/IDBIndex.idl:
        * Modules/indexeddb/IDBKeyRange.idl:
        * Modules/indexeddb/IDBObjectStore.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/indexeddb/IDBVersionChangeEvent.idl:
        * Modules/mediacontrols/MediaControlsHost.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/proximity/DeviceProximityEvent.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/speech/SpeechSynthesis.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/websockets/WebSocket.idl:
        * crypto/CryptoKey.idl:
        * crypto/SubtleCrypto.idl:
        * css/CSSHostRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPrimitiveValue.idl:
        * css/CSSRuleList.idl:
        * css/CSSStyleDeclaration.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSSupportsRule.idl:
        * css/CSSValueList.idl:
        * css/DOMWindowCSS.idl:
        * css/FontLoader.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheet.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSFilterValue.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * css/WebKitCSSTransformValue.idl:
        * dom/CharacterData.idl:
        * dom/ChildNode.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMCoreException.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringList.idl:
        * dom/DOMStringMap.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/DocumentType.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventException.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/MutationObserver.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeIterator.idl:
        * dom/NodeList.idl:
        * dom/Range.idl:
        * dom/RangeException.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/TreeWalker.idl:
        * dom/UIEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/FileException.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMSettableTokenList.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLMarqueeElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLVideoElement.idl:
        * html/MediaController.idl:
        * html/RadioNodeList.idl:
        * html/TimeRanges.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLLoseContext.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackCueList.idl:
        * html/track/TextTrackList.idl:
        * html/track/TextTrackRegionList.idl:
        * html/track/VideoTrackList.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/Console.idl:
        * page/Crypto.idl:
        * page/DOMSecurityPolicy.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Navigator.idl:
        * page/Performance.idl:
        * page/PerformanceEntryList.idl:
        * page/SpeechInputResultList.idl:
        * page/WindowBase64.idl:
        * page/WindowTimers.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/SVGAngle.idl:
        * svg/SVGAnimationElement.idl:
        * svg/SVGColor.idl:
        * svg/SVGCursorElement.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElement.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGException.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGGraphicsElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMaskElement.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPatternElement.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * workers/DedicatedWorkerGlobalScope.idl:
        * workers/Worker.idl:
        * workers/WorkerGlobalScope.idl:
        * workers/WorkerLocation.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathException.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2013-11-11  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Regions] Selection focusNode set to the "region" block, instead of the "source" block
        https://bugs.webkit.org/show_bug.cgi?id=120769

        Reviewed by David Hyatt.

        When a point hits a Region block, current positionForPoint algorithm determines its
        position in the DOM and returns either the start or end offset for such block, since
        Region blocks have no children in the DOM.

        It's necessary to map the point into Flow Thread coordinates in order to determine
        the DOM position of the specific element rendered by the Region.

        Top margin, padding and border points should be mapped to the beginning of the Region
        block, while bottom points are mapped to the block end. The Left coordinate its just
        adjusted to fit in the Flow Thread boundaries, since its not affected by the Flow
        direction.

        Besides, when inspecting the Flow Thread blocks looking for the last candidate box,
        the Region originally associated to the point might be taken into account. Only the
        blocks/boxes rendered by the Region are potential candidates.

        Tests: fast/regions/selection/position-for-point-1-vert-lr.html
               fast/regions/selection/position-for-point-1-vert-rl.html
               fast/regions/selection/position-for-point-1.html
               fast/regions/selection/position-for-point-vert-lr.html
               fast/regions/selection/position-for-point-vert-rl.html
               fast/regions/selection/position-for-point.html

        * rendering/RenderBlock.cpp:
        (WebCore::isChildHitTestCandidate):
        (WebCore::RenderBlock::positionForPoint):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::positionForPoint): Added.
        It just redirects the call to the associated RenderNamedFlowFragment instance.
        * rendering/RenderBlockFlow.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::mapRegionPointIntoFlowThreadCoordinates): Added.
        It performs the coordinates mapping.
        (WebCore::RenderRegion::positionForPoint): Added.
        It determines the corresponding LayoutPoint in the FlowThread the Region
        is associated to, forwarding the call to the RenderBlock class using the
        FlowThread's first child block and such new point.
        * rendering/RenderRegion.h:

2013-11-11  Gergo Balogh  <geryxyz@inf.u-szeged.hu>

        [curl] Remove unused includes.
        https://bugs.webkit.org/show_bug.cgi?id=120415

        Reviewed by Csaba Osztrogonác.

        Original patch by 2013-08-28  Tamas Czene  <tczene@inf.u-szeged.hu>

        * platform/network/curl/ProxyServerCurl.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/curl/ResourceHandleManager.cpp:

2013-11-11  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r159027 to make Apple Windows build happy.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::sharedBufferGetBytesAtPosition):

2013-11-11  Andreas Kling  <akling@apple.com>

        Kill InlineFlowBox::rendererLineBoxes().
        <https://webkit.org/b/124141>

        We only ever used this to access the RenderLineBoxList for non-root
        boxes, and those always have a RenderInline renderer.

        Tighten things up by losing the virtual rendererLineBoxes() and
        calling RenderInline::lineBoxes() directly.

        Reviewed by Antti Koivisto.

2013-11-11  Andreas Kling  <akling@apple.com>

        Bring the LineFragmentationData back to RootInlineBox.
        <https://webkit.org/b/124136>

        Now that we have the simple line layout path, almost all the root
        line boxes end up with some kind of fragmentation data, so we might
        as well put the members back on RootInlineBox and avoid the extra
        allocation (and indirection.)

        1.74 MB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Shrink RenderInline.
        <https://webkit.org/b/124134>

        Move the "always create line boxes" bit from RenderInline up to
        RenderElement. I didn't do this earlier because there were no bits
        free on RenderObject but thanks to RenderElement we now have tons!

        540 kB progression on HTML5 spec at <http://whatwg.org/c>

        Reviewed by Anders Carlsson.

2013-11-10  Sam Weinig  <sam@webkit.org>

        Make childShouldCreateRenderer() take a Node reference
        https://bugs.webkit.org/show_bug.cgi?id=124132

        Reviewed by Andreas Kling.

        The Node passed to childShouldCreateRenderer() is never null.

2013-11-10  Frédéric Wang  <fred.wang@free.fr>

        CSS direction must be reset to ltr on <math> element.
        <https://webkit.org/b/124121>

        Reviewed by Darin Adler.

        Test: mathml/presentation/direction.html

        * css/mathml.css:
        (math): set direction: ltr; on the <math> element.

2013-11-10  Sam Weinig  <sam@webkit.org>

        Reduce the size of RenderBlockFlow by making its rare data inherit from RenderBlockRareData
        https://bugs.webkit.org/show_bug.cgi?id=124124

        Reviewed by Anders Carlsson.

        Reduce RenderBlockFlow by one word.

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:

2013-11-10  Antti Koivisto  <antti@apple.com>

        Use start/end instead of textOffset/textLength for simple text runs
        https://bugs.webkit.org/show_bug.cgi?id=124130

        Reviewed by Oliver Hunt.
        
        The code reads better this way.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::text):

2013-11-10  Antti Koivisto  <antti@apple.com>

        Implement white-space property on simple line layout path
        https://bugs.webkit.org/show_bug.cgi?id=124122

        Reviewed by Andreas Kling.
        
        Support all values of the white-space property and the tab-size property.

        Tests: fast/forms/basic-textareas-simple-lines.html
               fast/text/embed-at-end-of-pre-wrap-line-simple-lines.html
               fast/text/whitespace/pre-wrap-line-test-simple-lines.html
               fast/text/whitespace/pre-wrap-long-word-simple-lines.html
               fast/text/whitespace/pre-wrap-spaces-after-newline-simple-lines.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::isWhitespace):
        (WebCore::SimpleLineLayout::skipWhitespaces):
        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::measureWord):
        (WebCore::SimpleLineLayout::createTextRuns):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        (WebCore::SimpleLineLayout::paintFlow):

2013-11-10  Sergio Correia  <sergio.correia@openbossa.org>

        Fix EFL build after r159027
        https://bugs.webkit.org/show_bug.cgi?id=124127

        Reviewed by Anders Carlsson.

        No new tests, build fix.

        * page/Settings.in: Add std to numeric_limits, since we don't have
        'using std' directives anymore.

2013-11-10  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::computeColumnCountAndWidth):
        (WebCore::RenderMultiColumnBlock::checkForPaginationLogicalHeightChange):

2013-11-10  Anders Carlsson  <andersca@apple.com>

        Remove all 'std' using directives from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124125

        Reviewed by Sam Weinig.

        As per the coding style guidelines.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::appendEntry):
        (WebCore::CrossOriginPreflightResultCache::canSkipPreflight):
        * loader/WorkerThreadableLoader.cpp:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadCache):
        * loader/appcache/ManifestParser.cpp:
        (WebCore::parseManifest):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::deadCapacity):
        (WebCore::MemoryCache::lruListFor):
        * page/CaptionUserPreferencesMediaAF.cpp:
        * page/Chrome.cpp:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::intervalClampedToMinimum):
        * page/FocusController.cpp:
        * page/Frame.cpp:
        (WebCore::Frame::resizePageRectsKeepingRatio):
        * page/PageGroupLoadDeferrer.cpp:
        * page/Settings.cpp:
        * page/animation/AnimationBase.cpp:
        (WebCore::solveStepsFunction):
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):
        (WebCore::AnimationBase::timeToNextService):
        (WebCore::AnimationBase::fractionalTime):
        (WebCore::AnimationBase::getTimeToNextEvent):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):
        * platform/DateComponents.cpp:
        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::handleWheelEvent):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::unscaledVisibleContentSize):
        (WebCore::ScrollView::setScrollOffset):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::scrollContents):
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::moveThumb):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::usedTotalSize):
        (WebCore::ScrollbarThemeComposite::thumbPosition):
        (WebCore::ScrollbarThemeComposite::thumbLength):
        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::append):
        (WebCore::SharedBuffer::copyBufferAndClear):
        (WebCore::SharedBuffer::getSomeData):
        * platform/ThreadTimers.cpp:
        (WebCore::ThreadTimers::updateSharedTimer):
        * platform/Timer.cpp:
        (WebCore::TimerHeapLessThanFunction::operator()):
        (WebCore::TimerBase::heapPop):
        (WebCore::TimerBase::nextUnalignedFireInterval):
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::portAllowed):
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::setRate):
        * platform/audio/AudioResamplerKernel.cpp:
        (WebCore::AudioResamplerKernel::process):
        * platform/audio/Distance.cpp:
        (WebCore::DistanceEffect::gain):
        * platform/audio/DynamicsCompressorKernel.cpp:
        (WebCore::DynamicsCompressorKernel::process):
        * platform/audio/EqualPowerPanner.cpp:
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/HRTFDatabase.cpp:
        (WebCore::HRTFDatabase::indexFromElevationAngle):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::createForSubject):
        * platform/audio/HRTFKernel.cpp:
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFPanner.cpp:
        (WebCore::HRTFPanner::calculateDesiredAzimuthIndexAndBlend):
        * platform/audio/Reverb.cpp:
        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::process):
        * platform/cf/URLCF.cpp:
        * platform/graphics/Color.cpp:
        (WebCore::makeRGB):
        (WebCore::makeRGBA):
        (WebCore::colorFloatToRGBAByte):
        (WebCore::Color::light):
        (WebCore::Color::dark):
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        * platform/graphics/FloatQuad.cpp:
        (WebCore::min4):
        (WebCore::max4):
        (WebCore::withinEpsilon):
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::isZero):
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::floatWidthForSimpleText):
        * platform/graphics/FontPlatformData.cpp:
        * platform/graphics/GraphicsContext.cpp:
        * platform/graphics/RoundedRect.cpp:
        (WebCore::RoundedRect::Radii::expand):
        * platform/graphics/ShadowBlur.cpp:
        (WebCore::calculateLobes):
        (WebCore::computeSliceSizesFromRadii):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::initCharWidths):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator):
        (WebCore::WidthIterator::advanceInternal):
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCue):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformDuration):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::currentTime):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setOpacity):
        (WebCore::GraphicsLayerCA::setNeedsDisplay):
        (WebCore::GraphicsLayerCA::setupAnimation):
        (WebCore::clampedContentsScaleForScale):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::getTileIndexRangeForRect):
        (WebCore::TileController::computeTileCoverageRect):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::computeLineBoundsAndAntialiasingModeForText):
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/filters/FEDropShadow.cpp:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::platformApplyGeneric):
        (WebCore::FEGaussianBlur::calculateUnscaledKernelSize):
        (WebCore::FEGaussianBlur::calculateStdDeviation):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/TilingData.cpp:
        (WebCore::computeNumTiles):
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::offsetForPosition):
        (WebCore::ComplexTextController::advance):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::floatWidthForComplexText):
        * platform/graphics/mac/FontMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::duration):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/transforms/Matrix3DTransformOperation.cpp:
        * platform/graphics/transforms/MatrixTransformOperation.cpp:
        * platform/graphics/transforms/PerspectiveTransformOperation.cpp:
        * platform/graphics/transforms/RotateTransformOperation.cpp:
        * platform/graphics/transforms/TransformOperations.cpp:
        (WebCore::TransformOperations::blendByMatchingOperations):
        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::clampEdgeValue):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::adjustScrollPositionIfNecessary):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollPosition):
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/ThemeMac.mm:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        (-[WebVideoFullscreenHUDWindowController incrementVolume]):
        (timeToString):
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::copyData):
        * platform/network/ResourceRequestBase.cpp:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse):
        * platform/text/TextBreakIteratorICU.cpp:
        (WebCore::textClone):
        (WebCore::textLatin1MoveInPrimaryContext):
        (WebCore::textLatin1MoveInPriorContext):
        (WebCore::textInChunkOrOutOfRange):
        (WebCore::textOpenLatin1):
        (WebCore::textUTF16MoveInPrimaryContext):
        (WebCore::textUTF16MoveInPriorContext):
        (WebCore::textOpenUTF16):
        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::encode):
        * platform/text/TextCodecUTF8.cpp:
        (WebCore::TextCodecUTF8::encode):
        * platform/text/TextStream.cpp:
        * platform/text/mac/LocaleMac.mm:
        * platform/text/mac/TextCodecMac.cpp:
        (WebCore::TextCodecMac::decode):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computeIntrinsicLogicalWidths):
        (WebCore::AutoTableLayout::applyPreferredLogicalWidthQuirks):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::applyPreferredLogicalWidthQuirks):
        * rendering/FloatingObjects.cpp:
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffset):
        * rendering/InlineBox.cpp:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::computeMaxLogicalTop):
        (WebCore::InlineFlowBox::addBoxShadowVisualOverflow):
        (WebCore::InlineFlowBox::addBorderOutsetVisualOverflow):
        (WebCore::InlineFlowBox::addTextBoxVisualOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::constrainToLineTopAndBottomIfNeeded):
        (WebCore::InlineFlowBox::computeOverAnnotationAdjustment):
        (WebCore::InlineFlowBox::computeUnderAnnotationAdjustment):
        (WebCore::InlineFlowBox::collectLeafBoxesInLogicalOrder):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::isSelected):
        (WebCore::InlineTextBox::localSelectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::applyShadowToGraphicsContext):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::selectionStartEnd):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::computeUnderlineOffset):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintDocumentMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeOverflow):
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        (WebCore::RenderBlock::paintChild):
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::RenderBlock::calcColumnWidth):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::computeIntrinsicLogicalWidths):
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        (WebCore::RenderBlock::adjustIntrinsicLogicalWidthsForColumns):
        (WebCore::updatePreferredWidth):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::clearFloats):
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::layoutBlockChild):
        (WebCore::RenderBlockFlow::collapseMargins):
        (WebCore::RenderBlockFlow::clearFloatsIfNeeded):
        (WebCore::RenderBlockFlow::marginBeforeEstimateForChild):
        (WebCore::RenderBlockFlow::estimateLogicalTopPosition):
        (WebCore::RenderBlockFlow::setCollapsedBottomMargin):
        (WebCore::RenderBlockFlow::handleAfterSideOfBlock):
        (WebCore::calculateMinimumPageHeight):
        (WebCore::RenderBlockFlow::adjustLinePositionForPagination):
        (WebCore::RenderBlockFlow::removeFloatingObject):
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat):
        (WebCore::RenderBlockFlow::positionNewFloats):
        (WebCore::RenderBlockFlow::lowestFloatLogicalBottom):
        (WebCore::RenderBlockFlow::addOverhangingFloats):
        (WebCore::RenderBlockFlow::getClearDelta):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        (WebCore::RenderBlockFlow::updateLogicalHeight):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::updateLogicalWidthForLeftAlignedBlock):
        (WebCore::updateLogicalWidthForRightAlignedBlock):
        (WebCore::updateLogicalWidthForCenterAlignedBlock):
        (WebCore::setLogicalWidthForTextRun):
        (WebCore::RenderBlockFlow::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange):
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        (WebCore::RenderBlockFlow::checkFloatsInCleanLine):
        (WebCore::RenderBlockFlow::checkPaginationAndFloatsAtEndLine):
        (WebCore::tryHyphenating):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::scrollHeight):
        (WebCore::RenderBox::constrainLogicalWidthInRegionByMinMax):
        (WebCore::RenderBox::constrainLogicalHeightByMinMax):
        (WebCore::RenderBox::constrainContentBoxLogicalHeightByMinMax):
        (WebCore::RenderBox::adjustBorderBoxLogicalWidthForBoxSizing):
        (WebCore::RenderBox::adjustBorderBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::adjustContentBoxLogicalWidthForBoxSizing):
        (WebCore::RenderBox::adjustContentBoxLogicalHeightForBoxSizing):
        (WebCore::RenderBox::repaintLayerRectsForImage):
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::containingBlockLogicalWidthForContentInRegion):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeLogicalWidthInRegion):
        (WebCore::RenderBox::computeIntrinsicLogicalWidthUsing):
        (WebCore::RenderBox::computeLogicalWidthInRegionUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalWidthRespectingMinMaxWidth):
        (WebCore::RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::containingBlockLogicalWidthForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::applyVisualEffectOverflow):
        (WebCore::RenderBox::addLayoutOverflow):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::calculateFillTileSize):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
        (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
        (WebCore::RenderBoxModelObject::paintNinePieceImage):
        (WebCore::RenderBoxModelObject::paintOneBorderSide):
        (WebCore::calculateAdjustedInnerBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        (WebCore::RenderBoxModelObject::localCaretRectForEmptyElement):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::next):
        (WebCore::RenderDeprecatedFlexibleBox::computeIntrinsicLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::computePreferredLogicalWidths):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::allowedChildFlex):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::maxFilenameWidth):
        (WebCore::RenderFileUploadControl::computeIntrinsicLogicalWidths):
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::setImageSizeForAltText):
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        (WebCore::RenderInline::linesVisualOverflowBoundingBox):
        (WebCore::RenderInline::paintOutline):
        (WebCore::RenderInline::paintOutlineForLine):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::clampScrollOffset):
        (WebCore::RenderLayer::scrollRectToVisible):
        (WebCore::RenderLayer::visibleContentRect):
        (WebCore::RenderLayer::updateScrollbarsAfterLayout):
        (WebCore::RenderLayer::hitTestOverflowControls):
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::calculateLayerBounds):
        * rendering/RenderLayerBacking.cpp:
        * rendering/RenderLayerModelObject.cpp:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::layout):
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        (WebCore::RenderListBox::size):
        (WebCore::RenderListBox::numVisibleItems):
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::scrollHeight):
        * rendering/RenderListItem.cpp:
        * rendering/RenderListMarker.cpp:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::marqueeSpeed):
        (WebCore::RenderMarquee::computePosition):
        (WebCore::RenderMarquee::timerFired):
        * rendering/RenderMediaControls.cpp:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::updateOptionsWidth):
        (WebCore::RenderMenuList::computeIntrinsicLogicalWidths):
        (WebCore::RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderMeter.cpp:
        * rendering/RenderMultiColumnBlock.cpp:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::heightAdjustedForSetOffset):
        (WebCore::RenderMultiColumnSet::calculateBalancedHeight):
        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
        * rendering/RenderNamedFlowFragment.cpp:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawLineForBoxSide):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::caretMaxOffset):
        * rendering/RenderProgress.cpp:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::overflowRectForFlowThreadPortion):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::shouldPaint):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderRubyBase.cpp:
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::getOverhang):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::computeScrollbarWidth):
        (WebCore::RenderScrollbarPart::computeScrollbarHeight):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::computeControlLogicalHeight):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::updateLogicalWidth):
        (WebCore::RenderTable::convertStyleLogicalHeightToComputedHeight):
        (WebCore::RenderTable::layout):
        (WebCore::RenderTable::computePreferredLogicalWidths):
        (WebCore::RenderTable::calcBorderStart):
        (WebCore::RenderTable::calcBorderEnd):
        (WebCore::RenderTable::outerBorderBefore):
        (WebCore::RenderTable::outerBorderAfter):
        (WebCore::RenderTable::outerBorderStart):
        (WebCore::RenderTable::outerBorderEnd):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::parseColSpanFromDOM):
        (WebCore::RenderTableCell::parseRowSpanFromDOM):
        (WebCore::RenderTableCell::logicalWidthFromColumns):
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        (WebCore::RenderTableCell::layout):
        (WebCore::RenderTableCell::setOverrideLogicalContentHeightFromRowHeight):
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::alignLeftRightBorderPaintRect):
        (WebCore::RenderTableCell::alignTopBottomBorderPaintRect):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        (WebCore::RenderTableSection::distributeExtraLogicalHeightToPercentRows):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::firstLineBaseline):
        (WebCore::RenderTableSection::removeCachedCollapsedBorders):
        (WebCore::RenderTableSection::setCachedCollapsedBorder):
        (WebCore::RenderTableSection::cachedCollapsedBorder):
        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::maxWordFragmentWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButton):
        * rendering/RenderWidget.cpp:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):
        (WebCore::RootInlineBox::blockDirectionPointInLine):
        (WebCore::RootInlineBox::paddedLayoutOverflowRect):
        (WebCore::setAscentAndDescent):
        (WebCore::RootInlineBox::ascentAndDescentForBox):
        * rendering/mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::calcConstraintScaleFor):
        (WebCore::RenderStyle::setFontSize):
        (WebCore::RenderStyle::getShadowExtent):
        (WebCore::RenderStyle::getShadowInsetExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/ShadowData.cpp:
        (WebCore::calculateShadowExtent):
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGRoot.cpp:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::localSelectionRect):
        * svg/SVGAnimatedNumber.cpp:
        * svg/SVGAnimatedNumberOptionalNumber.cpp:
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::startTimer):
        (WebCore::SMILTimeContainer::updateAnimations):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::simpleDuration):
        (WebCore::SVGSMILElement::repeatingDuration):
        (WebCore::SVGSMILElement::resolveActiveEnd):
        (WebCore::SVGSMILElement::resolveInterval):
        (WebCore::SVGSMILElement::resolveFirstInterval):
        (WebCore::SVGSMILElement::resolveNextInterval):
        (WebCore::SVGSMILElement::calculateAnimationPercentAndRepeat):
        * xml/XMLTreeViewer.cpp:
        * xml/parser/XMLDocumentParser.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::OffsetBuffer::readOutBytes):

2013-11-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Clean up static_cast<> to cast from AccessibilityObject 
        https://bugs.webkit.org/show_bug.cgi?id=124032

        Reviewed by Mario Sanchez Prada.

        ACCESSIBILITY_OBJECT_TYPE_CASTS can support more helpful casting functions.
        So, we need to use them as much as possible. This patch cleans up all static_cast<> in accessibility.

        This patch generates toAccessibilityFoo() in order to replace static_cast<> with it. Below toAccessibilityFoo()
        are generated.

        - toAccessibilityARIAGridRow()
        - toAccessibilityImageMapLink()
        - toAccessibilityListBox()
        - toAccessibilityListBoxOption()
        - toAccessibilityMenuListOption()
        - toAccessibilityMenuListPopup()
        - toAccessibilityScrollbar()
        - toAccessibilitySlider()

        No new tests, no behavior changes.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::focusedImageMapUIElement):
        * accessibility/AccessibilityARIAGridRow.h:
        * accessibility/AccessibilityImageMapLink.h:
        * accessibility/AccessibilityListBox.cpp:
        (WebCore::AccessibilityListBox::setSelectedChildren):
        (WebCore::AccessibilityListBox::selectedChildren):
        (WebCore::AccessibilityListBox::listBoxOptionAccessibilityObject):
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::addChildren):
        (WebCore::AccessibilityMenuList::didUpdateActiveOption):
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListPopup.cpp:
        (WebCore::AccessibilityMenuListPopup::menuListOptionAccessibilityObject):
        * accessibility/AccessibilityMenuListPopup.h:
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isListBoxOption):
        (WebCore::AccessibilityObject::isSliderThumb):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::getDocumentLinks):
        (WebCore::AccessibilityRenderObject::addImageMapChildren):
        (WebCore::AccessibilityRenderObject::addTextFieldChildren):
        * accessibility/AccessibilityScrollView.cpp:
        (WebCore::AccessibilityScrollView::addChildScrollbar):
        * accessibility/AccessibilityScrollbar.h:
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::addChildren):
        * accessibility/AccessibilitySlider.h:
        * accessibility/AccessibilitySpinButton.cpp:
        (WebCore::AccessibilitySpinButton::addChildren):
        * accessibility/atk/WebKitAccessibleInterfaceSelection.cpp:
        (webkitAccessibleSelectionClearSelection):
        (webkitAccessibleSelectionSelectAllSelection):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::didUpdateActiveOption):

2013-11-10  Andreas Kling  <akling@apple.com>

        Rebaseline bindings tests after r158997.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:

2013-11-10  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Consolidate more code into TrackPrivateBaseGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=124020

        Reviewed by Philippe Normand.

        No new tests because this is just refactoring.

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp:
        (WebCore::AudioTrackPrivateGStreamer::AudioTrackPrivateGStreamer): Don't pass playbin to TrackPrivateBaseGStreamer, and do pass a pointer to "this".
        (WebCore::AudioTrackPrivateGStreamer::disconnect): Clear m_playbin().
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Move labelChanged() and languageChanged() to TrackPrivateBaseGStreamer. Move m_playbin to this class (along with disconnect() to clear it).
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp: Move tag handling, pad and index to TrackPrivateBaseGStreamer.
        (WebCore::textTrackPrivateEventCallback):
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer):
        (WebCore::InbandTextTrackPrivateGStreamer::disconnect):
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h:
        * platform/graphics/gstreamer/TextCombinerGStreamer.cpp: Add WebKitTextCombinerPad with "tags" property, set in the same was as input-selector's pads.
        (webkit_text_combiner_pad_init): Initialize tags to 0.
        (webkitTextCombinerPadFinalize): Clear tags.
        (webkitTextCombinerPadGetProperty): Handling "tags" property.
        (webkitTextCombinerPadEvent): Changed to be a pad event function instead of a pad probe, and now intercepts tags and merges them (like input-selector pads do).
        (webkitTextCombinerRequestNewPad): Using WebKitTextCombinerPad instead of just GhostPad.
        (webkit_text_combiner_pad_class_init): Setup WebKitTextCombinerPad.
        * platform/graphics/gstreamer/TextCombinerGStreamer.h: Remove superfluous code.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp:
        (WebCore::TrackPrivateBaseGStreamer::TrackPrivateBaseGStreamer): Use "notify::active" so we don't need a playbin, and immediately check for tags after the constructor.
        (WebCore::TrackPrivateBaseGStreamer::disconnect): Remove m_playbin.
        (WebCore::TrackPrivateBaseGStreamer::getTag): Refactored out from notifyTrackOfTagsChanged.
        (WebCore::TrackPrivateBaseGStreamer::notifyTrackOfTagsChanged): Simplify using m_owner (so we can call labelChanged() and languageChanged() directly), and use getTag() above.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Add m_owner to we can access the owning track, and change some functions to match our needs better.
        (WebCore::TrackPrivateBaseGStreamer::setActive): Add empty default since InbandTextTrackPrivateGStreamer doesn't need this.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Same as AudioTrackPrivateGStreamer.
        (WebCore::VideoTrackPrivateGStreamer::VideoTrackPrivateGStreamer):
        (WebCore::VideoTrackPrivateGStreamer::disconnect):
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Same as AudioTrackPrivateGStreamer.

2013-11-10  Andreas Kling  <akling@apple.com>

        Generate type casting helpers for Widget classes.
        <https://webkit.org/b/124120>

        Add a WIDGET_TYPE_CASTS macro and replace all the hand-written
        toFoo() helpers we had for Widget subclasses. Fixed up a handful
        of places that were still using static_cast.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Remove unused FragmentationDisabler class.
        <https://webkit.org/b/124118>

        This RAII object was added in r144744 to avoid a crash when using
        MathML inside CSS regions. Its only user was removed in r157070.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Simplify some is-this-a-MathML-element? checks.
        <https://webkit.org/b/124119>

        As of r158198, the MathML-ness of an Element is determined by
        a Node flag, so there's no need to cast to Element before checking
        on this. Simplify accordingly.

        Reviewed by Antti Koivisto.

2013-11-10  Andreas Kling  <akling@apple.com>

        Remove RenderTheme::shouldOpenPickerWithF4Key().

        Rubber-stamped by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        CSSValuePool::createFontFamilyValue() should return PassRef.
        <https://webkit.org/b/124114>

        Unlike createFontFaceValue(), createFontFamilyValue() can never
        fail to return an object and thus should return PassRef.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        RenderIFrame should display its name correctly in DRT output.
        <https://webkit.org/b/124117>

        Nuke an age-old FIXME about making RenderIFrame show its true name
        in DRT output. No more "RenderPartObject {IFRAME}"!

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        SVGTextMetricsBuilder::walkTree() should take a RenderElement.
        <https://webkit.org/b/124105>

        Make walkTree() take a RenderElement so we can use the non-virtual
        firstChild() internally. All call sites had pointers to compatible
        objects already.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        RenderMathMLFenced should pass around operators in tighter types.
        <https://webkit.org/b/124115>

        Store operator renderers in RenderMathMLOperator pointers instead
        of passing them around as RenderObject.

        Reviewed by Martin Robinson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Use RENDER_OBJECT_TYPE_CASTS for more types.
        <https://webkit.org/b/124112>

        Generate toRenderFoo() type casting helpers for these classes:

            - RenderCombineText
            - RenderDetailsMarker
            - RenderListMarker
            - RenderVideo
            - RenderView

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Move MathML type checking virtuals to RenderObject.
        <https://webkit.org/b/124111>

        Previously, checking the type of a MathML renderer would require
        that you first check if it's a RenderMathMLBlock, and then casting
        to that type to access the check you really wanted.

        This change moves all the isRenderMathMLFoo() virtual functions
        to RenderObject. I also made sure all the overloads were private
        and marked them OVERRIDE/FINAL as appropriate.

        Finally I replaced all the hand-written casting functions with
        autogenerated ones using RENDER_OBJECT_TYPE_CASTS.

        Reviewed by Anders Carlsson.

2013-11-09  Martin Robinson  <mrobinson@igalia.com>

        [MathML] Poor spacing around delimiters in MathML Torture Test 14
        https://bugs.webkit.org/show_bug.cgi?id=122837

        Reviewed by Brent Fulgham.

        Instead of stretching the vertical bar with the stretchable version, just repeat
        the normal vertical bar. This follows what Gecko does when rendering tall vertical
        bars and also works around an issue with STIX fonts leading to poor spacing in
        formulas.

        * rendering/mathml/RenderMathMLOperator.cpp: Stretch the vertical bar with the
        normal variant.

2013-11-09  Anders Carlsson  <andersca@apple.com>

        Encode form data using the KeyedEncoder
        https://bugs.webkit.org/show_bug.cgi?id=124107

        Reviewed by Sam Weinig.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeEnum):
        * platform/network/FormData.cpp:
        (WebCore::encodeElement):
        (WebCore::FormData::encode):
        * platform/network/FormData.h:

2013-11-09  Sam Weinig  <sam@webkit.org>

        Modernize CanvasObserverProxy
        https://bugs.webkit.org/show_bug.cgi?id=124106

        Reviewed by Anders Carlsson.

        * css/CSSCanvasValue.h:

2013-11-09  Patrick Gansterer  <paroga@webkit.org>

        Move RunLoop from WebCore to WTF
        https://bugs.webkit.org/show_bug.cgi?id=116606

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake:
        * PlatformWin.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.h:

2013-11-09  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGResourcesCycleSolver a bit.
        <https://webkit.org/b/124104>

        Make the SVGResourcesCycleSolver constructor take a RenderElement&
        and a SVGResources&.

        While I was in the neighborhood, also converted one loop to use a
        renderer iterator instead of walking siblings manually.

        Finally used "auto" to clean up some overly wordy loops.

        Reviewed by Anders Carlsson.

2013-11-09  Andreas Kling  <akling@apple.com>

        Beat SVGRenderSupport with the RenderElement stick.
        <https://webkit.org/b/124102>

        Tighten up all the SVGRenderSupport helper functions by making them
        take const RenderElements references instead of raw RenderObject
        pointers as much as possible.

        This tunes up a bunch of branchy style() calls.

        The patch looks big but it's mostly mechanical. I just changed the
        signatures and then worked backwards until everything built again.

        Reviewed by Antti Koivisto.

2013-11-09  Andreas Kling  <akling@apple.com>

        SVGTextLayoutAttributes always has a RenderSVGInlineText.
        <https://webkit.org/b/124101>

        No SVGTextLayoutAttributes object is without a RenderSVGInlineText
        "context" so make context() return a reference.

        Reviewed by Antti Koivisto.

2013-11-09  Andreas Kling  <akling@apple.com>

        Move BindingSecurity stuff under JSDOMBinding umbrella.
        <https://webkit.org/b/124099>

        We are hitting shouldAllowAccessToDOMWindow() pretty hard on the
        demo here: <http://www.jasondavies.com/maps/rotate/>

        Putting it together with the rest of the JSDOMBinding code takes
        CPU time spent in there from 8.7% to 6.5%. The abstraction was
        only used to support alternate JS engines in the past.

        Reviewed by Antti Koivisto.

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBDatabaseBackendInterface and IDBDatabaseBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124088

        Reviewed by Tim Horton.
+
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendInterface.h: Removed.

        * Modules/indexeddb/IDBDatabaseBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp.
        * Modules/indexeddb/IDBDatabaseBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBDatabase.cpp:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBIndex.cpp:
        * Modules/indexeddb/IDBIndex.h:
        * Modules/indexeddb/IDBIndexWriter.h:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBOpenDBRequest.cpp:
        * Modules/indexeddb/IDBOpenDBRequest.h:
        * Modules/indexeddb/IDBPendingDeleteCall.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransaction.cpp:
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/indexeddb/IDBTransactionBackend.cpp:
        * Modules/indexeddb/IDBTransactionBackend.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.h:

2013-11-08  Andreas Kling  <akling@apple.com>

        Reindent JSDOMBinding.h (finally.)

        Rubber-stamped by Sam Weinig.

2013-11-08  Sam Weinig  <sam@webkit.org>

        Change collectStyleForPresentationAttribute and related functions to take a MutableStylePropertySet by reference
        https://bugs.webkit.org/show_bug.cgi?id=124096

        Reviewed by Andreas Kling.

        Pass MutableStylePropertySet by reference. It is never null.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Implement encoding of arrays of objects
        https://bugs.webkit.org/show_bug.cgi?id=124091

        Reviewed by Beth Dakin.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        Encode the rest of the members.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeObjects):
        Call beginArray, then beginArrayElement/endArrayElement for every element and lastly endArray.

2013-11-08  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: RemoteLayerBackingStore partial repaint is broken for the tile cache
        https://bugs.webkit.org/show_bug.cgi?id=123944

        Reviewed by Simon Fraser.

        Ensure that the tile cache retrieves repaint rects from the tile layer,
        not from the tiled backing layer.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::enumerateRectsBeingDrawn):
        Allow the PlatformCALayer to decide how to enumerate rects to paint.

        * WebCore.exp.in:
        * platform/graphics/mac/WebLayer.h:
        Add RepaintRectList, remove some unnecessary WebCore::s.

        * platform/graphics/mac/WebLayer.mm:
        (WebCore::collectRectsToPaint):
        Factor collectRectsToPaint out; it just grabs the rects from
        the layer and makes the decision whether to repaint the bounds
        of the dirty region or just the subregions.

        Move calls to collectRectsToPaint() to callers of drawLayerContents(),
        so that TileController can collect rects from the appropriate source
        (the Tile layer) and other layers just continue grabbing them from
        their relevant layers.

        Make sure that the list that comes from collectRectsToPaint() always
        has at least one rect in it (appending the clip bounds if we don't
        want to repaint subregions) so we can simplify logic in drawLayerContents.

        (WebCore::drawLayerContents):
        Remove code to support CompositingCoordinatesBottomUp, as it's only
        used on Windows, so this Mac-specific code doesn't need to support it.

        Simplify logic given that dirtyRects will always be non-empty.

        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer setNeedsDisplayInRect:]):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerPaintContents):
        Adopt collectRectsToPaint.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Implement more KeyedEncoder functionality
        https://bugs.webkit.org/show_bug.cgi?id=124089

        Reviewed by Beth Dakin.

        * bindings/js/SerializedScriptValue.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeConditionalObject):

2013-11-08  Eric Carlson  <eric.carlson@apple.com>

        getCueAsHTML() on an empty cue should return a document fragment
        https://bugs.webkit.org/show_bug.cgi?id=124084

        Reviewed by Darin Adler.

        Test: media/track/track-cue-empty-cue-text.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::createDocumentFragmentFromCueText): Don't return early when the
            passed an empty string.

2013-11-08  Anders Carlsson  <andersca@apple.com>

        KeyedEncoder should be able to encoder objects
        https://bugs.webkit.org/show_bug.cgi?id=124085

        Reviewed by Sam Weinig.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree):
        Encode the root object.

        (WebCore::HistoryItem::encodeBackForwardTreeNode):
        Encode the target.

        * history/HistoryItem.h:
        Add new members.

        * platform/KeyedCoding.h:
        (WebCore::KeyedEncoder::encodeObject):
        Call beginObject, call the functor and then call endObject().

2013-11-08  Sam Weinig  <sam@webkit.org>

        Teach CanvasObserver about references
        https://bugs.webkit.org/show_bug.cgi?id=124082

        Reviewed by Anders Carlsson.

        * css/CSSCanvasValue.cpp:
        * css/CSSCanvasValue.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:

2013-11-08  Anders Carlsson  <andersca@apple.com>

        Begin stubbing out a KeyedEncoder class in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=124079

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        Add symbol needed by WebCore.

        * WebCore.xcodeproj/project.pbxproj:
        Add new header file.

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::encodeBackForwardTree):
        * history/HistoryItem.h:
        Add an encodeBackForwardTree overload that takes a KeyedEncoder object. Encode the version.

        * platform/KeyedCoding.h:
        Add a KeyedEncoder class that just has a single encodeUInt32 member function for now.

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBTransactionBackendInterface and IDBTransactionBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124077

        Reviewed by Alexey Proskuryakov.

        The abstraction is no longer needed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBTransactionBackendInterface.h: Removed.

        * Modules/indexeddb/IDBTransactionBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.cpp.
        * Modules/indexeddb/IDBTransactionBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBTransactionBackendImpl.h.

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBCursorBackend.cpp:
        * Modules/indexeddb/IDBCursorBackend.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.h:
        * Modules/indexeddb/IDBTransactionCoordinator.cpp:
        * Modules/indexeddb/IDBTransactionCoordinator.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-08  Simon Fraser  <simon.fraser@apple.com>

        REGRESSION (r155660): Some Etherpad pages not scrollable with overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=124075

        Reviewed by Beth Dakin.
        
        In r155660 I removed some scrollbar-related layouts when scrollbars
        are in overlay mode.
        
        However, ScrollView::updateScrollbars() has a case where we still need
        to do multiple pases, related to its "Never ever try to both gain/lose a
        scrollbar in the same pass" comment. When we avoid making a new scrollbar
        because the other was removed, we need to do another pass to bring the
        correct scrollbar back.

        Can't test overlay scrollbars in tests.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2013-11-08  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape-outside that extends vertically into the margin-box is top-clipped
        https://bugs.webkit.org/show_bug.cgi?id=123769

        Reviewed by Dirk Schulze.

        Remove the assumption that Y coordinates are >= 0 from the RasterShapeIntervals class
        and correct its computeShapeMarginIntervals() method. The computeShapeMarginIntervals()
        method now generates intervals with Y coordinates that begin at the image shape's
        bounds.y - shape-margin, which may be less than 0.

        The RasterShapeIntervals::intervalsAt() method now offsets its Y coordinate parameter
        by the shape-margin. A non-const overload of the method was added to centralize all
        access to m_intervalLists.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-image-margin-004.html
              fast/shapes/shape-outside-floats/shape-outside-floats-image-margin-005.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::MarginIntervalGenerator::intervalAt): Don't clip X coordinates to 0 since they can extend into the margin-box.
        (WebCore::RasterShapeIntervals::appendInterval): Use the non-const intervalsAt() method.
        (WebCore::RasterShapeIntervals::uniteMarginInterval): Ditto.
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals): See above.
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::RasterShapeIntervals): Added a field for the margin.
        (WebCore::RasterShapeIntervals::intervalsAt): Offset y coordinates by the margin; added a non-const overload.

2013-11-08  Piotr Grad  <p.grad@samsung.com>

        Ended event should work also when playback rate is negative
        https://bugs.webkit.org/show_bug.cgi?id=123879

        Reviewed by Eric Carlson.

        According to W3C specification playback is ended also when playback rate is
        negative and position is the earliest possible position.

        Test: media/video-ended-event-negative-playback.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):

2013-11-08  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Checking for TypeError in RTCPeerConnection object creation
        https://bugs.webkit.org/show_bug.cgi?id=124049

        Reviewed by Eric Carlson.

        If invalid parameters are passed on RTCPeerConnection creation we must throw a TypeError exception.
        According to the spec it requires a Dictionary argument, the RTCConfiguration, which is mandatory.

        Please notice that this patch does not make every tests run as expected,
        RTCPeerConnectionHandlerMock needs to be update to deal with contraints.

        Existing tests were updated.

        * GNUmakefile.list.am:
        * Modules/mediastream/RTCPeerConnection.idl:
        * UseJSC.cmake:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSRTCPeerConnectionCustom.cpp: Added.
        (WebCore::JSRTCPeerConnectionConstructor::constructJSRTCPeerConnection):

2013-11-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        Use references instead of pointers to RenderBlockFlow in FloatingObjects and ComputeFloatOffsetAdapter
        https://bugs.webkit.org/show_bug.cgi?id=124074

        Reviewed by Sam Weinig.

        Just a straightforward conversion from const pointers to const references.

        Also, remove unneeded argument from FloatingObjects constructor.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::FloatingObjects):
        (WebCore::FloatingObjects::clearLineBoxTreePointers):
        (WebCore::FloatingObjects::computePlacedFloatsTree):
        (WebCore::shapeInfoForFloat):
        (WebCore::::updateOffsetIfNeeded):
        (WebCore::::collectIfNeeded):
        (WebCore::::heightRemaining):
        * rendering/FloatingObjects.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createFloatingObjects):

2013-11-08  Sam Weinig  <sam@webkit.org>

        Teach SubframeLoader a bit about references
        https://bugs.webkit.org/show_bug.cgi?id=124076

        Reviewed by Anders Carlsson.

        * html/HTMLAppletElement.cpp:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLMediaElement.cpp:
        * loader/SubframeLoader.cpp:
        * loader/SubframeLoader.h:

2013-11-08  Brady Eidson  <beidson@apple.com>

        Blind Windows build-fix attempt after r158959

        * WebCore.vcxproj/WebCore.vcxproj:

2013-11-08  Brady Eidson  <beidson@apple.com>

        Merge IDBCursorBackendInterface and IDBCursorBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=124068

        Reviewed by Anders Carlsson.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCursorBackendInterface.h: Removed.

        * Modules/indexeddb/IDBCursorBackend.cpp: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp.
        * Modules/indexeddb/IDBCursorBackend.h: Renamed from Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.h.

        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBCursor.cpp:
        * Modules/indexeddb/IDBCursor.h:
        * Modules/indexeddb/IDBCursorWithValue.cpp:
        * Modules/indexeddb/IDBCursorWithValue.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBRequest.cpp:
        * Modules/indexeddb/IDBRequest.h:
        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-08  Sam Weinig  <sam@webkit.org>

        Modernize FrameLoader a bit
        https://bugs.webkit.org/show_bug.cgi?id=124073

        Reviewed by Anders Carlsson.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        Use std::unique_ptrs rather than OwnPtrs.

        * loader/MixedContentChecker.cpp:
        * loader/MixedContentChecker.h:
        Switch to hold a Frame& rather than Frame*.

2013-11-08  Zan Dobersek  <zdobersek@igalia.com>

        Remove code guarded with ENABLE(STREAM)
        https://bugs.webkit.org/show_bug.cgi?id=123667

        Reviewed by Anders Carlsson.

        Remove ENABLE(STREAM)-guarded code. This was added in the effort to provide Stream API support, but
        no port enables the feature and the work on this feature has wound down after the Chromium port forked,
        leaving this code unmaintained.

        * fileapi/FileReaderLoader.cpp:
        * fileapi/FileReaderLoader.h:

2013-11-08  Bem Jones-Bey  <bjonesbe@adobe.com>

        RenderBlockFlow::nextFloatLogicalBottomBelow should not use ShapeOutsideFloatOffsetMode
        https://bugs.webkit.org/show_bug.cgi?id=123931

        Reviewed by Sam Weinig.

        Rewrite nextFloatLogicalBottomBelow to use the placed floats tree for
        the search and to not need ShapeOutsideFloatOffsetMode anymore. This
        moves almost all of the logic into FloatingObjects, making a small
        reduction in the amount that RenderBlockFlow needs to know about the
        implementation of FloatingObjects.

        In addition, change ComputeFloatOffsetAdapter to take in LayoutUnits
        and roundToInt itself so that all of it's callers can be simplified.

        No new tests, no new behavior.

        * rendering/FloatingObjects.cpp:
        (WebCore::rangesIntersect):
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter):
        (WebCore::FindNextFloatLogicalBottomAdapter::lowValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::highValue):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::nextShapeLogicalBottom):
        (WebCore::FindNextFloatLogicalBottomAdapter::collectIfNeeded):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelow):
        (WebCore::FloatingObjects::findNextFloatLogicalBottomBelowForBlock):
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat):
        (WebCore::FloatingObjects::logicalLeftOffset):
        (WebCore::FloatingObjects::logicalRightOffset):
        * rendering/FloatingObjects.h:
        * rendering/LineWidth.cpp:
        (WebCore::LineWidth::fitBelowFloats):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlockFlow::nextFloatLogicalBottomBelowForBlock):
        (WebCore::RenderBlockFlow::getClearDelta):
        * rendering/RenderBlockFlow.h:

2013-11-08  Alexey Proskuryakov  <ap@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=124064
        Some WebCrypto files are not in correct directories

        Rubber-stamped by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj:
        * crypto/CryptoAlgorithmAesCbcParams.h: Removed.
        * crypto/CryptoAlgorithmAesKeyGenParams.h: Removed.
        * crypto/CryptoKeyAES.cpp: Removed.
        * crypto/CryptoKeyAES.h: Removed.
        * crypto/CryptoKeyMac.cpp: Removed.
        * crypto/keys/CryptoKeyAES.cpp: Copied from Source/WebCore/crypto/CryptoKeyAES.cpp.
        * crypto/keys/CryptoKeyAES.h: Copied from Source/WebCore/crypto/CryptoKeyAES.h.
        * crypto/mac/CryptoKeyMac.cpp: Copied from Source/WebCore/crypto/CryptoKeyMac.cpp.
        * crypto/parameters/CryptoAlgorithmAesCbcParams.h: Copied from Source/WebCore/crypto/CryptoAlgorithmAesCbcParams.h.
        * crypto/parameters/CryptoAlgorithmAesKeyGenParams.h: Copied from Source/WebCore/crypto/CryptoAlgorithmAesKeyGenParams.h.

2013-11-08  Alexey Proskuryakov  <ap@apple.com>

        Implement JWK key import for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=124059

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-import-jwk.html
               crypto/subtle/hmac-import-jwk.html
               crypto/subtle/import-jwk.html

        WebCrypto supports multiple key formats - raw, pkcs8, spki, jwk. The design is that
        we'll transform these into parsed KeyData subclasses before passing to algorithms.

        CryptoKeySerialization is a base class for handling all these formats.

        * WebCore.xcodeproj/project.pbxproj: Added new files. Removed CryptoKeyFormat.h.
        
        * bindings/js/JSCryptoKeySerializationJWK.h: Added.
        * bindings/js/JSCryptoKeySerializationJWK.cpp: Added.
        (WebCore::getStringFromJSON): A helper. Note that we can rely on the object being
        a nice freshly parsed JSON, no getters or anything.
        (WebCore::getBooleanFromJSON): Ditto.
        (WebCore::JSCryptoKeySerializationJWK::JSCryptoKeySerializationJWK):
        (WebCore::JSCryptoKeySerializationJWK::~JSCryptoKeySerializationJWK):
        (WebCore::createHMACParameters): A simple helper.
        (WebCore::JSCryptoKeySerializationJWK::reconcileAlgorithm): WebCrypto API is weird,
        you can have algorithm parameters both inside a JWK key and passed as importKey()
        arguments. They need to agree, whatever that means for specific serialization's
        algorithm options (not all necessarily have a 1-1 matching to WebCrypto).
        (WebCore::JSCryptoKeySerializationJWK::reconcileUsages): Take an intersection of usages.
        (WebCore::JSCryptoKeySerializationJWK::reconcileExtractable): Only extractable if
        both JWK and the caller agree.
        (WebCore::JSCryptoKeySerializationJWK::keySizeIsValid): Verify validity of JWK key.
        (WebCore::JSCryptoKeySerializationJWK::keyData): Return an appropriate KeyData
        subclass.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::ENUM_CLASS): Moved CryptoKeyFormat here.
        (WebCore::cryptoKeyFormatFromJSValue): Added a human readable string to an exception.
        (WebCore::JSSubtleCrypto::importKey): Support multiple key formats, not just raw.

        * crypto/CryptoAlgorithm.cpp: (WebCore::CryptoAlgorithm::importKey):
        * crypto/CryptoAlgorithm.h:
        Updated signature for importKey to one that makes more sense. Decoding formats all
        the way from a binary blob is not something that CryptoAlgorithm subclasses should
        do, we now pass a KeyData subclass instead.
        Removed exportKey/wrapKey/unwrapKey altogether, because I don't yet know what the
        signatures will be.

        * crypto/CryptoKeyData.h: Added.
        (WebCore::CryptoKeyData::ENUM_CLASS):
        (WebCore::CryptoKeyData::CryptoKeyData):
        (WebCore::CryptoKeyData::~CryptoKeyData):
        (WebCore::CryptoKeyData::format):
        A base class for passing key material to algorithms. Currently, only one type is
        supported, that being OctetSequence for secret keys. Keys for RSA and EC are more
        complicated, and secret/public ones are different too.

        * crypto/CryptoKeyFormat.h: Removed. There are too many key format classes
        confusingly floating around, and this was only needed in one file for parsing.

        * crypto/CryptoKeySerialization.h: Added.
        Base class for handling raw/pkcs8/spki/jwk keys.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h:
        Updated to use CryptoKeyData.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::importKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h:
        Updated to use CryptoKeyData.

        * crypto/keys/CryptoKeyDataOctetSequence.cpp: Added.
        (WebCore::CryptoKeyDataOctetSequence::CryptoKeyDataOctetSequence):
        (WebCore::CryptoKeyDataOctetSequence::~CryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeyDataOctetSequence.h: Added.
        (WebCore::asCryptoKeyDataOctetSequence):
        * crypto/keys/CryptoKeySerializationRaw.cpp: Added.
        (WebCore::CryptoKeySerializationRaw::CryptoKeySerializationRaw):
        (WebCore::CryptoKeySerializationRaw::~CryptoKeySerializationRaw):
        (WebCore::CryptoKeySerializationRaw::reconcileAlgorithm):
        (WebCore::CryptoKeySerializationRaw::reconcileUsages):
        (WebCore::CryptoKeySerializationRaw::reconcileExtractable):
        (WebCore::CryptoKeySerializationRaw::keyData):
        * crypto/keys/CryptoKeySerializationRaw.h: Added.
        Much code to pass around a Vector<char>.

2013-11-08  Mark Lam  <mark.lam@apple.com>

        Move breakpoint (and exception break) functionality into JSC::Debugger.
        https://bugs.webkit.org/show_bug.cgi?id=121796.

        Reviewed by Geoffrey Garen.

        No new tests.

        - In ScriptDebugServer and JSC::Debugger, SourceID and BreakpointID are
          now numeric tokens.

        - JSC::Debugger now tracks user defined breakpoints in a JSC::Breakpoint
          record. Previously, this info is tracked in the ScriptBreakpoint record
          in ScriptDebugServer. The only element of ScriptBreakpoint that is not
          being tracked by JSC::Breakpoint is the ScriptBreakpointAction.
             The ScriptBreakpointAction is still tracked by the ScriptDebugServer
          in a list keyed on the corresponding BreakpointID.
             The ScriptBreakpoint record is now only used as a means of passing
          breakpoint paramaters to the ScriptDebugServer.

        - ScriptDebugServer now no longer accesses the JSC::CallFrame* directly.
          It always goes through the DebuggerCallFrame.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/BreakpointID.h: Added.
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::dispatchDidPause):
        (WebCore::ScriptDebugServer::dispatchDidContinue):
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        (WebCore::ScriptDebugServer::notifyDoneProcessingDebuggerEvents):
        (WebCore::ScriptDebugServer::needPauseHandling):
        (WebCore::ScriptDebugServer::handleBreakpointHit):
        (WebCore::ScriptDebugServer::handleExceptionInBreakpointCondition):
        (WebCore::ScriptDebugServer::handlePause):
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/SourceID.h: Added.
        * bindings/js/WorkerScriptDebugServer.cpp:
        (WebCore::WorkerScriptDebugServer::WorkerScriptDebugServer):
        * bindings/js/WorkerScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-11-08  László Langó  <lango@inf.u-szeged.hu>

        InspectorConsoleAgent::didFinishXHRLoading ConsoleMessage should include a column number
        https://bugs.webkit.org/show_bug.cgi?id=114316

        Reviewed by Timothy Hatcher.

        InspectorConsoleAgent::didFinishXHRLoading creates a ConsoleMessage with a line number, 
        but it should also include a column number. It looks like ultimately the line number comes from
        JSXMLHttpRequest::send, it should also be possible to get the column number at the time.
        The column number would be needed by the Web Inspector to jump to the proper place in source code 
        to show where the XHR originated from.

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::SendFunctor::SendFunctor):
        (WebCore::SendFunctor::column):
        (WebCore::SendFunctor::operator()):
        (WebCore::JSXMLHttpRequest::send):
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didFinishXHRLoadingImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didFinishXHRLoading):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::setLastSendLineAndColumnNumber):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2013-11-08  Simon Fraser  <simon.fraser@apple.com>

        Left sidebar on cubic-bezier.com flickers
        https://bugs.webkit.org/show_bug.cgi?id=123128

        Reviewed by Dean Jackson.
        
        The logic that determined whether position:fixed elements outside the viewport
        should be composited was incorrect if the fixed element also had a transform.
        
        layer.calculateLayerBounds() only takes into account painted transforms (since they
        affect layer bounds). So we need to compute the bounds relative to the layer
        itself, then use localToContainerQuad() to map them to document coordinates,
        but only to the RenderView so that we don't hit the page scale transform.

        Tests: compositing/layer-creation/fixed-position-transformed-into-view.html
               compositing/layer-creation/fixed-position-transformed-outside-view.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPosition):

2013-11-08  Martin Robinson  <mrobinson@igalia.com>

        [MathML] Center of stretched curly bracket not always vertically centered
        https://bugs.webkit.org/show_bug.cgi?id=123715

        Reviewed by Brent Fulgham.

        * rendering/mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::fillWithExtensionGlyph): Update an assertion and
        handle the case where two glyph pieces abut.
        (WebCore::RenderMathMLOperator::paint): Do not offset the center glyph by y().

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Bring SourceBuffer.append up to the most recent spec.
        https://bugs.webkit.org/show_bug.cgi?id=123377

        Reviewed by Eric Carlson.

        Test: media/media-source/media-source-append-failed.html

        Bring the MediaSource append() implementation up to the current spec.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::appendBufferInternal):
        (WebCore::SourceBuffer::appendBufferTimerFired):
        * platform/graphics/SourceBufferPrivate.h:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp:
        (WebCore::MockSourceBufferPrivate::append):
        (WebCore::MockSourceBufferPrivate::evictCodedFrames):
        (WebCore::MockSourceBufferPrivate::isFull):
        * platform/mock/mediasource/MockSourceBufferPrivate.h:

2013-11-07  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash at com.apple.WebCore: WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange + 26
        https://bugs.webkit.org/show_bug.cgi?id=124031

        Reviewed by Eric Carlson.

        WTF::bind() causes errors when given a bare id pointer as a parameter,
        when that parameter is casted to a specific NS type pointer (in this
        case, a NSArray*) in order to pass it as a parameter to the bound
        function.

        Instead of passing around bare id pointers, wrap them in RetainPtr<>
        objects before passing them to WTF::bind().

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2013-11-08  Antti Koivisto  <antti@apple.com>

        Templated LChar/UChar paths for simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=124035

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseForText):
        (WebCore::SimpleLineLayout::canUseFor):
        
            Use a templated function to check for illegal characters.

        (WebCore::SimpleLineLayout::skipWhitespaces):
        
            Make a template function.

        (WebCore::SimpleLineLayout::textWidth):
        
            Make a template function plus some argument changes.

        (WebCore::SimpleLineLayout::createTextRuns):
        
            Template function for creating runs while operating with either LChars or UChar.
            Also simplified line breaking and text width measuring logic.

        (WebCore::SimpleLineLayout::create):
        
            Pick the template.

        * rendering/break_lines.cpp:
        * rendering/break_lines.h:
        
            Move the implementation to the header (except for the table) so we can use the template
            versions directly.

        (WebCore::isBreakableSpace):
        (WebCore::shouldBreakAfter):
        (WebCore::needsLineBreakIterator):
        (WebCore::nextBreakablePosition):
        (WebCore::nextBreakablePositionIgnoringNBSP):

2013-11-08  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: [ATK] <span> elements exposed through ATK when not needed
        https://bugs.webkit.org/show_bug.cgi?id=123885

        Reviewed by Chris Fleizach.

        As per SVN r158195, the way it's decided whether <span> elements
        should be ignored or not has slightly changed, causing that the
        GTK/EFL ports expose them in cases that they should be ignored,
        such as for text elements that neither are focusable (e.g. by
        explicitly setting tabindex) nor have a meaningful accessible name
        suggesting they should be exposed.

        As a result, the flattening that ATK based ports normally do for
        this kind of elements (by folding them into their parents) do not
        work correctly anymore, making two tests to fail:

            platform/gtk/accessibility/spans-paragraphs-and-divs.html
            platform/gtk/accessibility/spans.html

        This patch encapsulates the part of the logic that affects this in
        the computeAccessibilityIsIgnored() method, placing it in a
        new method of AccessibilityObject that we can call from ATK's
        accessibilityPlatformIncludesObject() to ensure we hide those
        <span> elements when they don't fulfill those requirements.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::hasAttributesRequiredForInclusion):
        New virtual method encapsulating part of the logic from the function
        that computes whether accessibility should be ignored or not.
        * accessibility/AccessibilityObject.h:

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::hasAttributesRequiredForInclusion):
        Override of the new method adding additional checks, as extracted from
        the original bits in computeAccessibilityIsIgnored().
        * accessibility/AccessibilityNodeObject.h:

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        Use the newly added function where we had the original code before.

        * accessibility/atk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Make sure <span> elements are ignored if they are not focusable
        and they don't have a meaningful accessible name.

2013-11-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Add missing symbols to WebKitDOMEventTarget.symbols
        https://bugs.webkit.org/show_bug.cgi?id=123990

        Reviewed by Philippe Normand.

        Add webkit_dom_event_target_add_event_listener_with_closure and
        webkit_dom_event_target_remove_event_listener_with_closure to the
        symbols files.

        * bindings/gobject/WebKitDOMEventTarget.symbols:
        * bindings/gobject/webkitdom.symbols:

2013-11-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use deprecation guards around deprecated API in GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=123899

        Reviewed by Martin Robinson.

        Do not include deprecated API when compiling with
        WEBKIT_DISABLE_DEPRECATED option.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:

2013-11-07  Brady Eidson  <beidson@apple.com>

        Enhance SQL journal_mode setting code to be less likely to log an error.
        <rdar://problem/15418577> and https://bugs.webkit.org/show_bug.cgi?id=124018

        Reviewed by Anders Carlsson.

        Even though the docs says SQLITE_ROW will always be returned, apparently SQLITE_OK is sometimes returned.
        Change the code to handle that.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Save the statement result value, and accept SQLITE_OK as a non-error condition.

2013-11-07  Brady Eidson  <beidson@apple.com>

        Update an out-dated ASSERT in IconDatabase code.
        <rdar://problem/15171118> and https://bugs.webkit.org/show_bug.cgi?id=124030.

        Reviewed by Andreas Kling.

        With the asynchronous interfaces that have been added and the support for WK2 that has been added, 
        this ASSERT can incorrectly fire if an icon is asked for before database cleanup is allowed.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL): Update an invalid ASSERT.

2013-11-07  Andreas Kling  <akling@apple.com>

        RenderSVGResource helpers should take RenderStyle by const reference.
        <https://webkit.org/b/124029>

        Take const RenderStyle& instead of RenderStyle* in a few more places
        so we can get rid of some ampersands and assertions.

        Reviewed by Anders Carlsson.

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Generate toAccessibilityTableRow|Column|Cell to detect bad type casts
        https://bugs.webkit.org/show_bug.cgi?id=123984

        Reviewed by Mario Sanchez Prada.

        As a step to let static_cast<> use TYPE_CASTS_BASE, AccessibilityTableRow|Column|Cell use
        ACCESSIBILITY_OBJECT_TYPE_CASTS which can support more helper functions rather than manual
        static_cast<>. This change will help to detect bad type casts further.

        No new tests, no behavior changes.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::rowIndexRange):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::rowHeaders):
        (WebCore::AccessibilityTable::columnHeaders):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.h:
        * accessibility/AccessibilityTableColumn.h:
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::headerObject):
        * accessibility/AccessibilityTableRow.h:
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (cellAtIndex):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper tableCellParent]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        REGRESSION (r154375): Image is oriented incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=123831

        Reviewed by Antonio Gomes.

        r154375 made that shouldRespectImageOrientation() isn't used by drawImage().
        It causes an image isn't oriented correctly. This patch sets shouldRespectImageOrientation()
        value by default.

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):

2013-11-07  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image shape-outside with vertical gaps is handled incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=123934

        Reviewed by Andreas Kling.

        RasterShapeIntervals::getExcludedIntervals() was returning an empty
        list when the line overlapped any vertical gap in the image. This short-circuit
        had been mistakenly copied from getIncludedIntervals(), where it makes sense.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-image-vgap.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::getExcludedIntervals):

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Make contents layer borders more visible
        https://bugs.webkit.org/show_bug.cgi?id=124025

        Reviewed by Tim Horton.

        Layer borders for contents layers are impossible to see when the
        contentsLayer has the same bounds as its parent; make the contents
        layer border 4px thick to make it more visible.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setupContentsLayer):

2013-11-07  Andreas Kling  <akling@apple.com>

        InlineFlowBox always has a RenderBoxModelObject, take advantage.
        <https://webkit.org/b/124024>

        Since InlineFlowBox already has the branch-less renderer() returning
        a RenderBoxModelObject&, avoid using InlineBox::boxModelObject()
        wherever we have a tightly-typed box. One branch disappears from
        every call site.

        Deleted boxModelObject() on InlineFlowBox to prevent new code from
        calling the less efficient function.

        Reviewed by Anders Carlsson.

2013-11-07  Andreas Kling  <akling@apple.com>

        CTTE: Scrolling tree nodes should always have a ScrollingTree&.
        <https://webkit.org/b/124022>

        Let ScrollingTreeNode and subclasses store the backpointer to the
        tree as a ScrollingTree& reference.

        Reviewed by Anders Carlsson.

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Lots of layers get solid color but transparent contents layers now
        https://bugs.webkit.org/show_bug.cgi?id=123537

        Reviewed by Tim Horton.
        
        We call rendererBackgroundColor() to determine the layer's background color,
        but on most elements this returns the transparent color (a valid color).
        This caused us to allocate a contentsLayer, and use the transparent color as its
        backgroundColor, which was wasteful.
        
        Fix by only making a background-color layer if the color is not transparent (zero alpha).
        
        Also avoid making a new contents layer on every color change, and make sure that
        we don't do implicit animations for backgroundColor, and some other properties
        that were omitted by mistake.

        Layer tree dumps don't dump content layers, so no way to test easily.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (nullActionsDictionary):

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        DOMTokenList::add can add duplicated values if arguments had duplicated values
        https://bugs.webkit.org/show_bug.cgi?id=123962

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/bd3822ad4ae3fc5d8f89f433a7bf04f697334305

        In case we do element.classList.add('a', 'a') we need to ensure that we do not add the same token twice.
        See http://dom.spec.whatwg.org/#dom-domtokenlist-add

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::add): Make sure filtered tokens are unique among themselves.

2013-11-07  Eric Carlson  <eric.carlson@apple.com>

        Remove npr.org specific hack in HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=123859

        Reviewed by Jer Noble.

        Remove the site specific hack added in r57820, it is no longer necessary.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Remove m_dispatchingCanPlayEvent.
        (HTMLMediaElement::play): Don't special case npr.org.
        * html/HTMLMediaElement.h:

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix the 32-bit build. Virtual thunks seem to have different
        symbol names between 32- and 64-bit.
        
        * WebCore.exp.in:

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in HTMLMediaElement::contextDestroyed
        https://bugs.webkit.org/show_bug.cgi?id=123963

        Reviewed by Eric Carlson.

        Merge https://chromium.googlesource.com/chromium/blink/+/177999cdb34b707465670f0feff723922939f278

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement):

2013-11-07  Jer Noble  <jer.noble@apple.com>

        [Mac] Crash at com.apple.WebCore: -[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:] + 2084 
        https://bugs.webkit.org/show_bug.cgi?id=124012

        Reviewed by Eric Carlson.

        The value of the 'duration' key is a NSConcreteValue wrapping a CMTime, not a NSNumber.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Crash when submitting form in a document with null encoding
        https://bugs.webkit.org/show_bug.cgi?id=123975

        Reviewed by Alexey Proskuryakov.

        Merge https://chromium.googlesource.com/chromium/blink/+/bba01a7fff09e3053ada96ababac2a6e4261fe5f
        
        The CString object which is passed to normalizeLineEndingsToCRLF() can be
        a null string. It is created in FormDataList::appendString(), and it
        produces a null CString if FormDataList::m_encoding is a null encoding.

        Test: fast/forms/form-submit-in-image-document.html

        * platform/text/LineEnding.cpp:
        (internalNormalizeLineEndingsToCRLF):

2013-11-07  Anders Carlsson  <andersca@apple.com>

        Use std::function for all policy continuation functions
        https://bugs.webkit.org/show_bug.cgi?id=124011

        Reviewed by Sam Weinig.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::willSendRequest):
        (WebCore::DocumentLoader::responseReceived):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::load):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        (WebCore::FrameLoader::loadPostRequest):
        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::clear):
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::clearRequest):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNavigationPolicy):
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        (WebCore::PolicyChecker::checkContentPolicy):
        * loader/PolicyChecker.h:

2013-11-07  Brady Eidson  <beidson@apple.com>

        Use SQLite journal mode WAL (WriteAheadLogging)
        https://bugs.webkit.org/show_bug.cgi?id=124009

        Reviewed by Anders Carlsson.

        WriteAheadLogging journalling is better than the traditional rollback model.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open): Use a PRAGMA to set journal_mode to WAL.

2013-11-07  Mark Lam  <mark.lam@apple.com>

        Cosmetic: rename xxxId to xxxID for ScriptId, SourceId, and BreakpointId.
        https://bugs.webkit.org/show_bug.cgi?id=123945.

        Reviewed by Geoffrey Garen.

        No new tests.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::functionDetails):
        * bindings/js/JavaScriptCallFrame.h:
        (WebCore::JavaScriptCallFrame::sourceID):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::hasBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::updateCallFrame):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::parseLocation):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::continueToLocation):
        (WebCore::InspectorDebuggerAgent::resolveBreakpoint):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::compileScript):
        (WebCore::InspectorDebuggerAgent::runScript):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::clear):
        (WebCore::InspectorDebuggerAgent::reset):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        * inspector/InspectorInstrumentation.h:
        * inspector/ScriptDebugListener.h:

2013-11-07  Cidorvan Leite  <cidorvan.leite@openbossa.org>

        Avoid invalid cairo matrix when drawing surfaces too small
        https://bugs.webkit.org/show_bug.cgi?id=123810

        Drawing surfaces too small makes inverse matrix with values too big,
        when this happen, cairo context is not valid anymore and it stops to draw anything.

        Reviewed by Martin Robinson.

        Test: fast/canvas/drawImage-with-small-values.html

        * platform/graphics/cairo/PlatformContextCairo.cpp:
        (WebCore::PlatformContextCairo::drawSurfaceToContext):

2013-11-07  Antti Koivisto  <antti@apple.com>

        Simple line layout crashes with SVG fonts
        https://bugs.webkit.org/show_bug.cgi?id=124002

        Reviewed by Simon Fraser.
        
        Don't use simple line layout for flows using SVG fonts. They crash if kerning is enabled.

        Test: fast/text/svg-font-simple-line-crash.html

        * platform/graphics/Font.h:
        (WebCore::Font::isSVGFont):
        
            Add isSVGFont() so callers don't need to go via primaryFont().

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::constructTextRun):
        * rendering/RenderBlock.cpp:
        (WebCore::constructTextRunInternal):
        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Disallow SVG fonts.

        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::constructTextRun):
        * rendering/svg/SVGTextMetrics.cpp:
        (WebCore::SVGTextMetrics::constructTextRun):
        (WebCore::SVGTextMetrics::SVGTextMetrics):
        * rendering/svg/SVGTextRunRenderingContext.h:
        
            Get rid of the abstract textRunNeedsRenderingContext in favor of just testing isSVGFont().

2013-11-07  Simon Fraser  <simon.fraser@apple.com>

        Allow customization of the contentsScale of TileController tiles
        https://bugs.webkit.org/show_bug.cgi?id=124004

        Reviewed by Tim Horton.

        On some platorms, zooming out on pages with TiledBacking compositing
        layers can cause very high memory use, because the TiledBacking retains
        the original page scale while the zoom is in flight, but can be asked
        to cover a large area.
        
        Make it possible to reduce memory use in this case by allowing RenderLayerCompositor
        to provide an additional scale factor for newly created tiles. Platforms can
        then customize this to create low-res tiles when necessary.

        * WebCore.exp.in:
        * platform/graphics/GraphicsLayerClient.h:
        (WebCore::GraphicsLayerClient::contentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerContentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        (WebCore::PlatformCALayerClient::platformCALayerContentsScaleMultiplierForNewTiles):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::setScale):
        (WebCore::TileController::createTileLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::contentsScaleMultiplierForNewTiles):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::contentsScaleMultiplierForNewTiles):
        * rendering/RenderLayerCompositor.h:

2013-11-07  Jer Noble  <jer.noble@apple.com>

        Unreviewed Win build fix after r158855; wrap shapeInfoForFloat() in an ENABLE(CSS_SHAPES) guard.

        * rendering/FloatingObjects.cpp:

2013-11-07  Bem Jones-Bey  <bjonesbe@adobe.com>

        Refactor logical left/right offset for line methods
        https://bugs.webkit.org/show_bug.cgi?id=123898

        Reviewed by David Hyatt.

        Simplify the logical left/right offset for line methods and their
        implementation, including the ComputeFloatOffsetAdapter. This also
        reduces the number of line offset methods in RenderBlock.

        No new tests, no behavior change.

        * rendering/FloatingObjects.cpp:
        (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter):
        (WebCore::ComputeFloatOffsetAdapter::offset): Add a method to return
            the offset instead of using a confusing out parameter.
        (WebCore::::shapeOffset): Method to return the offset modified by the
            shape delta. Moving the computation to this method allowed for
            simplification of the users of ComputeFloatOffsetAdapter.
        (WebCore::FloatingObjects::logicalLeftOffsetForPositioningFloat): Added this
            method so that ShapeOutsideFloatOffsetMode isn't needed. Returns the
            offset based on the float margin box.
        (WebCore::FloatingObjects::logicalRightOffsetForPositioningFloat): Ditto.
        (WebCore::FloatingObjects::logicalLeftOffset): This now only returns
            the offset based on the shape's contour.
        (WebCore::FloatingObjects::logicalRightOffset): Ditto.
        (WebCore::::heightRemaining): Rename to properly follow the getter
            naming convention.
        * rendering/FloatingObjects.h:
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalRightOffsetForLine): Update to remove
            use of ShapeOutsideFloatOffsetMode and heightRemaining.
        (WebCore::RenderBlock::logicalLeftOffsetForLine): Ditto.
        (WebCore::RenderBlock::logicalRightFloatOffsetForLine): Ditto.
        (WebCore::RenderBlock::logicalLeftFloatOffsetForLine): Ditto.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::logicalLeftOffsetForPositioningFloat):
            Positioning a float is the only case where the float margin box
            should be used, and also the only case where heightRemaining is
            needed. This handles that case.
        (WebCore::RenderBlockFlow::logicalRightOffsetForPositioningFloat):
            Ditto.
        (WebCore::RenderBlockFlow::computeLogicalLocationForFloat): Update to
            use logical(Left|Right)OffsetForPositioningFloatOnLine.
        (WebCore::RenderBlockFlow::logicalLeftFloatOffsetForLine): Update to
            remove use for ShapeOutsideFloatOffsetMode and heightRemaining.
        (WebCore::RenderBlockFlow::logicalRightFloatOffsetForLine): Ditto.
        * rendering/RenderBlockFlow.h:

2013-11-07  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Removing a content node of a ContentFlow from the DOM will send a 0 nodeId
        https://bugs.webkit.org/show_bug.cgi?id=123577

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/model/content-flow-content-removal.html

        Do not send unregister events for the content nodes of a flow when the element is not part of the DOM
        anymore. We already send an unbind event, so the inspector is already notified that the node was removed.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Add mock MediaSource classes for testing.
        https://bugs.webkit.org/show_bug.cgi?id=123322

        Reviewed by Eric Carlson.

        Tests: media/media-source/media-source-addsourcebuffer.html
               media/media-source/media-source-append-buffer.html
               media/media-source/media-source-canplaythrough.html
               media/media-source/media-source-closed.html
               media/media-source/media-source-play.html
               media/media-source/media-source-track-enabled.html
               media/media-source/media-source-tracks.html


        Add mock implementation of platform MediaSource classes, allowing ports to test the
        MediaSource API without having a platform implementation.

        The MockMediaSource will support a byteformat defined in MockBox.h: a simple box-style media
        format with an initialization segment containing a number of tracks, followed by a list of
        samples.

        Add a means to insert a new media engine factory at runtime, so the internals object can add
        a MockMediaSourceMediaPlayer:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayerFactorySupport::callRegisterMediaEngine):
        * platform/graphics/MediaPlayer.h:
        * testing/Internals.cpp:
        (WebCore::Internals::initializeMockMediaSource):
        * testing/Internals.h:
        * testing/Internals.idl:

        For non-media-source supporting media engines, fail immediately when asked to load a media
        source, so that the MockMediaSourceMediaPlayer will be instantiated as a fall-back:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::load):
        (WebCore::MediaPlayerPrivateQTKit::supportsType):

        Add new files to the project:
        * WebCore.xcodeproj/project.pbxproj:
        * Source/WebCore/WebCore.exp.in:

        Update the MediaSource implementation:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::monitorSourceBuffers): Add a link to the spec.
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::buffered): Ditto.
        (WebCore::SourceBuffer::setTimestampOffset): Ditto.
        (WebCore::SourceBuffer::validateInitializationSegment): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Ditto. Also,
            bring the implementation up to date with part of the spec.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Remove "Predicate" from
            SampleIsRandomAccessPredicate.

        Add utility classes to parse and represent the bytestream supported by the MockMediaSource:
        * platform/mock/mediasource/MockBox.cpp: Added.
        (WebCore::MockBox::MockBox):
        (WebCore::MockBox::peekType):
        (WebCore::MockBox::peekLength):
        (WebCore::MockTrackBox::MockTrackBox):
        (WebCore::MockTrackBox::type):
        (WebCore::MockInitializationBox::MockInitializationBox):
        (WebCore::MockInitializationBox::type):
        (WebCore::MockSampleBox::MockSampleBox):
        (WebCore::MockSampleBox::type):
        * platform/mock/mediasource/MockBox.h: Added.
        (WebCore::MockBox::length):
        (WebCore::MockBox::type):
        (WebCore::MockTrackBox::trackID):
        (WebCore::MockTrackBox::codec):
        (WebCore::MockTrackBox::kind):
        (WebCore::MockInitializationBox::duration):
        (WebCore::MockInitializationBox::tracks):
        (WebCore::MockSampleBox::presentationTimestamp):
        (WebCore::MockSampleBox::decodeTimestamp):
        (WebCore::MockSampleBox::duration):
        (WebCore::MockSampleBox::trackID):
        (WebCore::MockSampleBox::flags):
        (WebCore::MockSampleBox::isSync):

        Add a MediaPlayerPrivate implementation which uses MockMediaSource:
        * platform/mock/mediasource/MockMediaPlayerMediaSource.cpp: Added.
        (WebCore::MockMediaPlayerMediaSource::registerMediaEngine):
        (WebCore::MockMediaPlayerMediaSource::create):
        (WebCore::mimeTypeCache):
        (WebCore::MockMediaPlayerMediaSource::getSupportedTypes):
        (WebCore::MockMediaPlayerMediaSource::supportsType):
        (WebCore::MockMediaPlayerMediaSource::MockMediaPlayerMediaSource):
        (WebCore::MockMediaPlayerMediaSource::~MockMediaPlayerMediaSource):
        (WebCore::MockMediaPlayerMediaSource::load):
        (WebCore::MockMediaPlayerMediaSource::cancelLoad):
        (WebCore::MockMediaPlayerMediaSource::play):
        (WebCore::MockMediaPlayerMediaSource::pause):
        (WebCore::MockMediaPlayerMediaSource::naturalSize):
        (WebCore::MockMediaPlayerMediaSource::hasVideo):
        (WebCore::MockMediaPlayerMediaSource::hasAudio):
        (WebCore::MockMediaPlayerMediaSource::setVisible):
        (WebCore::MockMediaPlayerMediaSource::seeking):
        (WebCore::MockMediaPlayerMediaSource::paused):
        (WebCore::MockMediaPlayerMediaSource::networkState):
        (WebCore::MockMediaPlayerMediaSource::readyState):
        (WebCore::MockMediaPlayerMediaSource::buffered):
        (WebCore::MockMediaPlayerMediaSource::didLoadingProgress):
        (WebCore::MockMediaPlayerMediaSource::setSize):
        (WebCore::MockMediaPlayerMediaSource::paint):
        (WebCore::MockMediaPlayerMediaSource::currentTimeDouble):
        (WebCore::MockMediaPlayerMediaSource::durationDouble):
        (WebCore::MockMediaPlayerMediaSource::seekDouble):
        (WebCore::MockMediaPlayerMediaSource::advanceCurrentTime):
        (WebCore::MockMediaPlayerMediaSource::updateDuration):
        (WebCore::MockMediaPlayerMediaSource::setReadyState):
        * platform/mock/mediasource/MockMediaPlayerMediaSource.h: Added.

        Add a mock implementation of MediaSourcePrivate, which uses MockSourceBuffer:
        * platform/mock/mediasource/MockMediaSourcePrivate.cpp: Added.
        (WebCore::MockMediaSourcePrivate::create):
        (WebCore::MockMediaSourcePrivate::MockMediaSourcePrivate):
        (WebCore::MockMediaSourcePrivate::~MockMediaSourcePrivate):
        (WebCore::MockMediaSourcePrivate::addSourceBuffer):
        (WebCore::MockMediaSourcePrivate::removeSourceBuffer):
        (WebCore::MockMediaSourcePrivate::duration):
        (WebCore::MockMediaSourcePrivate::setDuration):
        (WebCore::MockMediaSourcePrivate::markEndOfStream):
        (WebCore::MockMediaSourcePrivate::unmarkEndOfStream):
        (WebCore::MockMediaSourcePrivate::readyState):
        (WebCore::MockMediaSourcePrivate::setReadyState):
        (WebCore::MockMediaSourcePrivate::sourceBufferPrivateDidChangeActiveState):
        (WebCore::MockSourceBufferPrivateHasAudio):
        (WebCore::MockMediaSourcePrivate::hasAudio):
        (WebCore::MockSourceBufferPrivateHasVideo):
        (WebCore::MockMediaSourcePrivate::hasVideo):
        * platform/mock/mediasource/MockMediaSourcePrivate.h: Added.
        (WebCore::MockMediaSourcePrivate::activeSourceBuffers):
        (WebCore::MockMediaSourcePrivate::player):

        Add a mock implementation of SourceBufferPrivate, which uses MockBoxes to parse the
        bytestream provided by SourceBuffer:
        * platform/mock/mediasource/MockSourceBufferPrivate.cpp: Added.
        (WebCore::MockMediaSample::create):
        (WebCore::MockMediaSample::~MockMediaSample):
        (WebCore::MockMediaSample::MockMediaSample):
        (WebCore::MockMediaSample::platformSample):
        (WebCore::MockMediaDescription::create):
        (WebCore::MockMediaDescription::~MockMediaDescription):
        (WebCore::MockMediaDescription::MockMediaDescription):
        (WebCore::MockSourceBufferPrivate::create):
        (WebCore::MockSourceBufferPrivate::MockSourceBufferPrivate):
        (WebCore::MockSourceBufferPrivate::~MockSourceBufferPrivate):
        (WebCore::MockSourceBufferPrivate::setClient):
        (WebCore::MockSourceBufferPrivate::append):
        (WebCore::MockSourceBufferPrivate::didReceiveInitializationSegment):
        (WebCore::MockSourceBufferPrivate::didReceiveSample):
        (WebCore::MockSourceBufferPrivate::abort):
        (WebCore::MockSourceBufferPrivate::removedFromMediaSource):
        (WebCore::MockSourceBufferPrivate::readyState):
        (WebCore::MockSourceBufferPrivate::setReadyState):
        (WebCore::MockSourceBufferPrivate::hasVideo):
        (WebCore::MockSourceBufferPrivate::hasAudio):
        * platform/mock/mediasource/MockSourceBufferPrivate.h: Added.

        Create mock implementations of AudioTrackPrivate, VideoTrackPrivate, and TextTrackPrivate
        which wrap the MockTrackBox class:
        * platform/mock/mediasource/MockTracks.cpp: Added.
        * platform/mock/mediasource/MockTracks.h: Added.
        (WebCore::MockAudioTrackPrivate::create):
        (WebCore::MockAudioTrackPrivate::~MockAudioTrackPrivate):
        (WebCore::MockAudioTrackPrivate::id):
        (WebCore::MockAudioTrackPrivate::MockAudioTrackPrivate):
        (WebCore::MockTextTrackPrivate::create):
        (WebCore::MockTextTrackPrivate::~MockTextTrackPrivate):
        (WebCore::MockTextTrackPrivate::id):
        (WebCore::MockTextTrackPrivate::MockTextTrackPrivate):
        (WebCore::MockVideoTrackPrivate::create):
        (WebCore::MockVideoTrackPrivate::~MockVideoTrackPrivate):
        (WebCore::MockVideoTrackPrivate::id):
        (WebCore::MockVideoTrackPrivate::MockVideoTrackPrivate):

2013-11-07  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Changing MediaStreamDescriptor to MediaStreamPrivate
        https://bugs.webkit.org/show_bug.cgi?id=123935

        Reviewed by Eric Carlson.

        No new tests needed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::MediaStream):
        (WebCore::MediaStream::~MediaStream):
        (WebCore::MediaStream::ended):
        (WebCore::MediaStream::setEnded):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::removeRemoteSource):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.cpp:
        (WebCore::MediaStreamRegistry::registerURL):
        (WebCore::MediaStreamRegistry::unregisterURL):
        (WebCore::MediaStreamRegistry::lookupMediaStreamPrivate):
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::addStream):
        (WebCore::RTCPeerConnection::removeStream):
        (WebCore::RTCPeerConnection::didAddRemoteStream):
        (WebCore::RTCPeerConnection::didRemoveRemoteStream):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::didCreateStream):
        (WebCore::UserMediaRequest::callSuccessHandler):
        * Modules/mediastream/UserMediaRequest.h:
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::loadResource):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::toWebMediaStreamPrivate):
        (WebCore::MediaPlayerPrivate::lookupMediaStream):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        * platform/mediastream/MediaStreamCenter.cpp:
        * platform/mediastream/MediaStreamCreationClient.h:
        * platform/mediastream/MediaStreamPrivate.cpp: Renamed from Source/WebCore/platform/mediastream/MediaStreamDescriptor.cpp.
        (WebCore::MediaStreamPrivate::create):
        (WebCore::MediaStreamPrivate::addSource):
        (WebCore::MediaStreamPrivate::removeSource):
        (WebCore::MediaStreamPrivate::addRemoteSource):
        (WebCore::MediaStreamPrivate::removeRemoteSource):
        (WebCore::MediaStreamPrivate::addRemoteTrack):
        (WebCore::MediaStreamPrivate::removeRemoteTrack):
        (WebCore::MediaStreamPrivate::MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::setEnded):
        (WebCore::MediaStreamPrivate::addTrack):
        (WebCore::MediaStreamPrivate::removeTrack):
        * platform/mediastream/MediaStreamPrivate.h: Renamed from Source/WebCore/platform/mediastream/MediaStreamDescriptor.h.
        (WebCore::MediaStreamPrivateClient::~MediaStreamPrivateClient):
        (WebCore::MediaStreamPrivate::~MediaStreamPrivate):
        (WebCore::MediaStreamPrivate::client):
        (WebCore::MediaStreamPrivate::setClient):
        (WebCore::MediaStreamPrivate::id):
        (WebCore::MediaStreamPrivate::numberOfAudioSources):
        (WebCore::MediaStreamPrivate::audioSources):
        (WebCore::MediaStreamPrivate::numberOfVideoSources):
        (WebCore::MediaStreamPrivate::videoSources):
        (WebCore::MediaStreamPrivate::numberOfAudioTracks):
        (WebCore::MediaStreamPrivate::audioTracks):
        (WebCore::MediaStreamPrivate::numberOfVideoTracks):
        (WebCore::MediaStreamPrivate::videoTracks):
        (WebCore::MediaStreamPrivate::ended):
        * platform/mediastream/MediaStreamSource.cpp:
        * platform/mediastream/MediaStreamSource.h:
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.cpp:
        * platform/mediastream/blackberry/MediaStreamCenterBlackBerry.h:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.cpp:
        * platform/mediastream/gstreamer/MediaStreamCenterGStreamer.h:
        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::createMediaStream):
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::createMediaStream):
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::addStream):
        (WebCore::RTCPeerConnectionHandlerMock::removeStream):
        * platform/mock/RTCPeerConnectionHandlerMock.h:

2013-11-07  Denis Nomiyama  <d.nomiyama@samsung.com>

        [GTK] Glyphs in vertical text tests are rotated 90 degrees clockwise
        https://bugs.webkit.org/show_bug.cgi?id=50619

        Reviewed by Martin Robinson.

        Implemented the OPENTYPE_VERTICAL feature for the GTK+ port. It resolves
        the 90 degrees rotation problem of CJK characters when displaying
        vertical text.

        New tests are not required as the existing tests for vertical text will
        work properly now.

        * GNUmakefile.list.am: Added OpenTypeVerticalData.cpp and
        OpenTypeVerticalData.h to platformgtk_sources.
        * PlatformEfl.cmake: Added OpenTypeVerticalData.cpp.
        * PlatformGTK.cmake: Added OpenTypeVerticalData.cpp.
        * platform/graphics/FontCache.cpp: Originally the HashMap for
        OpenTypeVerticalData was designed with FontFileKey as integer in the
        Chromium port, which was an unique number provided by Skia. Since other
        ports use FontFileKey as string, new generic hash functions had to be
        implemented instead of using the specific ones for integers.
        (WebCore::FontVerticalDataCacheKeyHash::hash): New hash function for
        HashMap of OpenTypeVerticalData.
        (WebCore::FontVerticalDataCacheKeyHash::equal): New function for
        comparing hash indexes in the HashMap of OpenTypeVerticalData.
        (WebCore::FontVerticalDataCacheKeyTraits::emptyValue): New function for
        giving an empty FontFileKey.
        (WebCore::FontVerticalDataCacheKeyTraits::constructDeletedValue): New
        function to create a FontFileKey for deleted values.
        (WebCore::FontVerticalDataCacheKeyTraits::isDeletedValue): New function
        to check if a HashMap entry is available.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Added font
        orientation as a parameter to the FontPlatformData constructor.
        * platform/graphics/freetype/FontPlatformData.h: Added m_orientation to
        store the font orientation and m_horizontalOrientationMatrix to store
        the Cairo matrix for horizontal orientation, which can be restored in
        setOrientation().
        (WebCore::FontPlatformData::FontPlatformData): Added font orientation as
        a parameter.
        (WebCore::FontPlatformData::orientation): Implemented this function
        based on m_orientation.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Added new
        helper function rotateCairoMatrixForVerticalOrientation() to rotate the
        Cairo matrix in case of vertical orientation.
        (WebCore::FontPlatformData::FontPlatformData): Initialized
        m_orientation.
        (WebCore::FontPlatformData::operator=): Added m_orientation and
        m_horizontalOrientationMatrix to the assignment operator.
        (WebCore::FontPlatformData::operator==): Added m_orientation to the
        equal operator.
        (WebCore::FontPlatformData::initializeWithFontFace): Rotated and
        translated fonts if orientation is vertical. Also stored the horizontal
        Cairo matrix.
        (WebCore::FontPlatformData::verticalData): Returned the vertical data
        from the font cache.
        (WebCore::FontPlatformData::openTypeTable): Loaded the font table into
        a shared buffer.
        (WebCore::FontPlatformData::setOrientation): Replaced the scaled font
        data by rotating fonts according to the new orientation.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformInit): Set the glyph's height and
        width according to the font orientation. It also sets EM.
        (WebCore::SimpleFontData::platformCreateScaledFontData): Added
        orientation to the FontPlatformData constructor.
        (WebCore::SimpleFontData::platformWidthForGlyph): Returned the glyph's
        width according the orientation.
        * platform/graphics/harfbuzz/HarfBuzzFaceCairo.cpp:
        (WebCore::CairoGetGlyphWidthAndExtents): Obtained the character advance
        and extents according to the font orientation.

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Use toAccessibilityRenderObject() instead of using static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=123986

        Reviewed by Mario Sanchez Prada.

        Though there is toAccessibilityRenderObject(), static_cast<> are being used by many places.
        To use toAccessibilityRenderObject() is more helpful to find bad type cast.

        No new tests, no behavior changes.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::notificationPostTimerFired):
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::imageMapLinkRenderer):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleActiveDescendantChanged):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        * accessibility/ios/AccessibilityObjectIOS.mm:
        (WebCore::AccessibilityObject::accessibilityPasswordFieldLength):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (AXAttributeStringSetElement):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-11-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [AX] Use toAccessibilityTable() instead of using manual static_cast<>
        https://bugs.webkit.org/show_bug.cgi?id=123982

        Reviewed by Mario Sanchez Prada.

        Though there is toAccessibilityTable(), static_cast<> are being used by many places.
        We need to use toAccessibilityTable().

        No new tests, no behavior changes.

        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows):
        (WebCore::AccessibilityARIAGridRow::disclosedByRow):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren):
        * accessibility/atk/WebKitAccessibleInterfaceTable.cpp:
        (cell):
        (cellAtIndex):
        (webkitAccessibleTableGetIndexAt):
        (webkitAccessibleTableGetNColumns):
        (webkitAccessibleTableGetNRows):
        (webkitAccessibleTableGetColumnHeader):
        (webkitAccessibleTableGetRowHeader):
        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper tableParent]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-11-07  Andreas Kling  <akling@apple.com>

        Use tighter InlineBox subtypes in some places.
        <https://webkit.org/b/123980>

        RenderLineBreak and RenderBox line box wrappers are always going to
        be InlineElementBox, so codify this with tighter types. Also made
        the various positionLine() functions take tighter reference types.

        All the casting to renderer-appropriate box types happens inside of
        RenderBlockFlow::computeBlockDirectionPositionsForLine() and
        propagates from there.

        Reviewed by Antti Koivisto.

2013-11-07  Mario Sanchez Prada  <mario.prada@samsung.com>

        AX: [ATK] Video and audio elements are not properly exposed
        https://bugs.webkit.org/show_bug.cgi?id=123894

        Reviewed by Chris Fleizach.

        Expose <audio> and <video> elements with ATK_ROLE_EMBEDDED, so we
        can identify them properly from ATK/AT-SPI based ATs.

        Tests: platform/gtk/accessibility/media-controls-panel-title.html
               platform/efl/accessibility/media-emits-object-replacement.html
               platform/gtk/accessibility/media-emits-object-replacement.html

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (atkRole): Add the new mapping.

2013-11-07  Laszlo Vidacs  <lac@inf.u-szeged.hu>
        
        Fix crash in BitmapImage::destroyDecodedData()
        https://bugs.webkit.org/show_bug.cgi?id=116494

        Reviewed by Csaba Osztrogonác.

        Merge from https://chromium.googlesource.com/chromium/blink/+/6b6887bf53068f8537908e501fdc7317ad2c6d86

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::destroyDecodedData):

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] CSSParser should reject <track-list> without a <track-size>
        https://bugs.webkit.org/show_bug.cgi?id=118025

        Reviewed by Andreas Kling.

        From Blink r152914 by <jchaffraix@chromium.org>

        Make sure that we parse at least 1 <track-size> inside each
        <track-list>. The old parser code allowed track-lists exclusively
        made of <track-name>. The way it was implemented eases the future
        addition of parsing for the repeat() function.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseGridTrackList):
        * css/StyleResolver.cpp:
        (WebCore::createGridTrackList): ASSERT if we don't find any
        <track-size> now that we detect their absence in the parser.

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Fix handling of 'inherit' and 'initial' for grid lines
        https://bugs.webkit.org/show_bug.cgi?id=115401

        Reviewed by Andreas Kling.

        From Blink r150585 by <jchaffraix@chromium.org>

        Added support for 'inherit' and 'initial' special values to
        grid-auto-{columns|rows} and grid-definition-{columns|rows}.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty): Resolve 'initial' and 'inherit'.
        * rendering/style/RenderStyle.h: Added initialNamedGrid{Column|Row}Lines().
        * rendering/style/StyleGridData.cpp:
        (WebCore::StyleGridData::StyleGridData): Initialize m_namedGrid{Column|Row}Lines.

2013-11-07  Andreas Kling  <akling@apple.com>

        Clean up BidiRun a little bit.
        <https://webkit.org/b/123964>

        Make BidiRun's member variables private and add accessors for them.
        In doing so, codify the following:

            - BidiRun always has a corresponding RenderObject.
            - The inline box is never cleared after being set.

        Reviewed by Antti Koivisto.

2013-11-07  Andreas Kling  <akling@apple.com>

        More CSSPrimitiveValue constructors should return PassRef.
        <https://webkit.org/b/123953>

        Make some more CSSPrimitiveValue constructor helpers (that are
        known to never return null) return PassRef instead of PassRefPtr.

        Reviewed by Antti Koivisto.

2013-11-07  Andreas Kling  <akling@apple.com>

        Generate type casting helpers for line boxes and use them.
        <https://webkit.org/b/123976>

        Semi-automatically generate the full set of toFooInlineBox()
        helpers with macros instead of having them (partially) hand-coded.
        Replaced static_casts with the new helpers across the codebase.

        Also made the isFooInlineBox() overrides private since they should
        never be called when the type is already known.

        Reviewed by Antti Koivisto.

2013-11-07  Ryosuke Niwa  <rniwa@webkit.org>

        Simplify Attr by removing m_specified member variable and setter
        https://bugs.webkit.org/show_bug.cgi?id=123965

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/597f44ec928e08820574728889adabc6d8ecd746

        m_specified is always true in WebKit so simply return true in Attr::specified().

        * dom/Attr.cpp:
        (WebCore::Attr::Attr):
        * dom/Attr.h:
        * dom/Document.cpp:
        (WebCore::Document::adoptNode):

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Add MediaSource extensions to AudioTrack, VideoTrack, and TextTrack.
        https://bugs.webkit.org/show_bug.cgi?id=123374

        Reviewed by Eric Carlson.

        No tests added; tests will be added when Mock implementations are added in a future patch.

        Add new partial interfaces for added methods on AudioTrack, TextTrack, and VideoTrack:
        * Modules/mediasource/AudioTrackMediaSource.idl: Add read-only sourceBuffer attribute.
        * Modules/mediasource/TextTrackMediaSource.idl: Ditto.
        * Modules/mediasource/VideoTrackMediaSource.idl: Ditto.
        * Modules/mediasource/AudioTrackMediaSource.h:
        (WebCore::AudioTrackMediaSource::sourceBuffer): Added static wrapper around non-static sourceBuffer().
        * Modules/mediasource/TextTrackMediaSource.h:
        (WebCore::TextTrackMediaSource::sourceBuffer): Ditto.
        * Modules/mediasource/VideoTrackMediaSource.h:
        (WebCore::VideoTrackMediaSource::sourceBuffer): Ditto.

        Add support for writable kind & language attributes through a custom setter:
        * bindings/js/JSAudioTrackCustom.cpp:
        (WebCore::JSAudioTrack::setKind):
        (WebCore::JSAudioTrack::setLanguage):
        * bindings/js/JSTextTrackCustom.cpp:
        (WebCore::JSTextTrack::setKind):
        (WebCore::JSTextTrack::setLanguage):
        * bindings/js/JSVideoTrackCustom.cpp:
        (WebCore::JSVideoTrack::setKind):
        (WebCore::JSVideoTrack::setLanguage):
        * html/track/AudioTrack.idl:
        * html/track/TextTrack.idl:
        * html/track/VideoTrack.idl:

        Add setter methods to the implementation classes:
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::TextTrack):
        (WebCore::TextTrack::setKind):
        (WebCore::TextTrack::setLanguage):
        * html/track/TextTrack.h:
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase):
        (WebCore::TrackBase::setKind):
        (WebCore::TrackBase::setKindInternal):
        * html/track/TrackBase.h:
        (WebCore::TrackBase::setLanguage):
        (WebCore::TrackBase::sourceBuffer):
        (WebCore::TrackBase::setSourceBuffer):
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack):
        (WebCore::VideoTrack::setKind):
        (WebCore::VideoTrack::setLanguage):
        * html/track/VideoTrack.h:

        Implement the unimplemented portions of MediaSource and SourceBuffer:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::removeSourceBuffer):
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::MediaSourceBase):
        (WebCore::MediaSourceBase::setPrivateAndOpen):
        (WebCore::MediaSourceBase::setReadyState):
        (WebCore::MediaSourceBase::attachToElement):
        * Modules/mediasource/MediaSourceBase.h:
        (WebCore::MediaSourceBase::mediaElement):
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::videoTracks):
        (WebCore::SourceBuffer::audioTracks):
        (WebCore::SourceBuffer::textTracks):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddAudioTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddVideoTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidAddTextTrack):
        (WebCore::SourceBuffer::sourceBufferPrivateDidChangeActiveState):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/SourceBuffer.idl:

        Add new files to the project:
        * DerivedSources.make:
        * WebCore.xcodeproj/project.pbxproj:

        And a smorgasbord of other utility changes:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource): Pass this when attaching.
        (WebCore::HTMLMediaElement::mediaPlayerDidAddTextTrack): Ditto.
        * html/HTMLMediaSource.h:
        * html/track/TextTrackList.cpp:
        (TextTrackList::item): Make const.
        * html/track/TextTrackList.h:
        (WebCore::TextTrackList::lastItem): Added.
        * platform/graphics/InbandTextTrackPrivate.h:
        (WebCore::InbandTextTrackPrivate::create): Added.
        (WebCore::MockSourceBufferPrivate::trackDidChangeEnabled):

2013-11-06  Vani Hegde  <vani.hegde@samsung.com>

        Applied background color is not retained after typing a characters
        https://bugs.webkit.org/show_bug.cgi?id=117337

        Reviewed by Ryosuke Niwa.

        While deleting a selection, only the inheritable style properties
        applied on the selection were saved.
        Since background color is considered as noninheritable style property,
        on deleting the selection, background color set on it was being lost.
        Hence on typing in new text, it would not have the applied
        background color set.
        Fixed by saving editing preoperties that are already in effect
        on a selection before deleting it.

        Test: editing/style/background-color-retained.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState):
        Modified as to save EditingPropertiesInEffect on a selection before
        deleting it.

2013-11-06  Andreas Kling  <akling@apple.com>

        InlineBox: Make paint() and nodeAtPoint() pure virtuals.
        <https://webkit.org/b/123937>

        ...and move the current implementations to InlineElementBox.
        All subclasses were already overriding these functions so the move
        is completely natural.

        Reviewed by Anders Carlsson.

2013-11-06  Andreas Kling  <akling@apple.com>

        Nothing should return std::unique_ptr<InlineBox>.
        <https://webkit.org/b/123936>

        Made RenderBox, RenderLineBreak and RenderListMarker return tightly
        typed InlineElementBoxes instead.

        Reviewed by Anders Carlsson.

2013-11-06  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream Letterpress effect
        https://bugs.webkit.org/show_bug.cgi?id=123932

        Reviewed by Sam Weinig.

        Test: platform/iphone-simulator/iphone/getComputedStyle-text-decoration-letterpress.html

        * Configurations/FeatureDefines.xcconfig: Add feature define ENABLE_LETTERPRESS disabled
        by default. We only enable letterpress on iOS.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationFlagsToCSSValue): Add support for CSS value -webkit-letterpress.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTextDecoration): Ditto.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator TextDecoration): Ditto.
        * css/CSSValueKeywords.in: Added CSS value -webkit-letterpress.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/mac/FontMac.mm:
        (WebCore::fillVectorWithHorizontalGlyphPositions): Added.
        (WebCore::shouldUseLetterpressEffect): Added.
        (WebCore::showLetterpressedGlyphsWithAdvances): Added.
        (WebCore::showGlyphsWithAdvances): Modified to call showLetterpressedGlyphsWithAdvances()
        to show a letterpressed glyph. I also included additional iOS-specific changes.
        (WebCore::Font::drawGlyphs):
        * rendering/TextPaintStyle.cpp:
        (WebCore::TextPaintStyle::TextPaintStyle): 
        (WebCore::computeTextPaintStyle): Modified to compute letterpress effect style.
        (WebCore::updateGraphicsContext): Modified to apply/unapply letterpress effect drawing mode.
        * rendering/TextPaintStyle.h:
        * rendering/style/RenderStyleConstants.h:

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in SliderThumbElement::dragFrom
        https://bugs.webkit.org/show_bug.cgi?id=123873

        Reviewed by Sam Weinig.

        Moved Ref.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::dragFrom):

2013-11-06  Daniel Bates  <dabates@apple.com>

        Cleanup FontMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=123928

        Reviewed by Andy Estes.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances): Inline the value of variable isVertical as we
        reference it exactly once and its value is sufficiently clear.
        (WebCore::Font::drawGlyphs): Remove default case in switch block so that the compiler
        checks that all cases are covered. Move definition of platformData to the top of the
        function and use it whenever we want to access the platform font data

2013-11-06  Brent Fulgham  <bfulgham@apple.com>

        [WebGL] We should not allow generateMipMap on compressed textures
        https://bugs.webkit.org/show_bug.cgi?id=123915
        <rdar://problem/15201274>

        Reviewed by Dean Jackson.

        Found by existing conformance/extensions/webgl-compressed-texture-s3tc.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::compressedTexImage2D): Set compressed flag.
        (WebCore::WebGLRenderingContext::compressedTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::generateMipmap): For Apple builds, check state
        of compressed flag and generate appropriate WebGL error if necessary.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture): Set compressed flag to false by default
        (WebCore::WebGLTexture::isCompressed): Added
        (WebCore::WebGLTexture::setCompressed): Added
        * html/canvas/WebGLTexture.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        (WebCore::GraphicsContext3D::generateMipmap): Switch implementation to use proper
        glGenerateMipmaps, rather than the glGenerateMipmapsEXT method.

2013-11-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Changes to CodeGeneratorInspectorStrings.py should rebuild inspector generated files
        https://bugs.webkit.org/show_bug.cgi?id=123925

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:

2013-11-06  Bem Jones-Bey  <bjonesbe@adobe.com>

        Rename region line offset methods
        https://bugs.webkit.org/show_bug.cgi?id=123897

        Reviewed by Sam Weinig.

        Because of the large number of overloads on the line offset methods,
        it is very hard to read code using them, which also makes it harder to
        move them out of RenderBlock. This patch renames the methods that take
        a region as an argument to make it clearer when looking at the code
        how the differ from the ones that don't.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeStartPositionDeltaForChildAvoidingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLineInRegion):
        (WebCore::RenderBlock::logicalRightOffsetForLineInRegion):
        (WebCore::RenderBlock::logicalLeftOffsetForLineInRegion):
        (WebCore::RenderBlock::startOffsetForLineInRegion):
        (WebCore::RenderBlock::endOffsetForLineInRegion):
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::shrinkLogicalWidthToAvoidFloats):
        (WebCore::RenderBox::containingBlockAvailableLineWidthInRegion):

2013-11-06  Antti Koivisto  <antti@apple.com>

        HTMLCollection should use CollectionIndexCache
        https://bugs.webkit.org/show_bug.cgi?id=123906

        Reviewed by Ryosuke Niwa.
        
        More code sharing.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::nameGetter):
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h:
        (WebCore::::nodeBeforeCached):
        (WebCore::::nodeAfterCached):
        (WebCore::::nodeAt):
            
            Add a mechanism for disabling use of backward traversal.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::collectionCanTraverseBackward):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::isMatchingElement):
        (WebCore::HTMLCollection::iterateForPreviousElement):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::nameShouldBeVisibleInDocumentAll):
        (WebCore::firstMatchingChildElement):
        (WebCore::nextMatchingSiblingElement):
        (WebCore::HTMLCollection::firstElement):
        (WebCore::HTMLCollection::traverseForward):
        (WebCore::HTMLCollection::collectionFirst):
        (WebCore::HTMLCollection::collectionLast):
        (WebCore::HTMLCollection::collectionTraverseForward):
        (WebCore::HTMLCollection::collectionTraverseBackward):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::collectionCanTraverseBackward):
        
            Disable use of backward traversal for collections that use custom traversal.

2013-11-06  Brendan Long  <b.long@cablelabs.com>

        Add "id" attribute to TextTrack
        https://bugs.webkit.org/show_bug.cgi?id=123825

        Reviewed by Eric Carlson.

        Test: media/track/track-id.html

        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::addTextTrack): Add emptyString() for track id.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::AudioTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::AudioTrack::idChanged): Added, set id.
        * html/track/AudioTrack.h: Move m_id to TrackBase.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::InbandTextTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::InbandTextTrack::idChanged): Added, set id.
        * html/track/InbandTextTrack.h: Add idChanged().
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::LoadableTextTrack): Add emptyString() for track id.
        (WebCore::LoadableTextTrack::id): Override to return the track element's id.
        * html/track/TextTrack.cpp:
        (WebCore::TextTrack::captionMenuOffItem): Add empty string for track id.
        (WebCore::TextTrack::captionMenuAutomaticItem): Add empty string for track id.
        (WebCore::TextTrack::TextTrack): Pass id to TrackBase.
        * html/track/TextTrack.h:
        (WebCore::TextTrack::create): Add id parameter.
        * html/track/TextTrack.idl: Add id attribute.
        * html/track/TrackBase.cpp:
        (WebCore::TrackBase::TrackBase): Add m_id.
        * html/track/TrackBase.h: Add id attribute / m_id.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::VideoTrack): Pass trackPrivate->id() to TrackBase.
        (WebCore::VideoTrack::idChanged): Added, set id.
        * html/track/VideoTrack.h: Move m_id to TrackBase.
        * platform/graphics/TrackPrivateBase.h: Add idChanged() callback.

2013-11-06  Antti Koivisto  <antti@apple.com>

        Move array position caching out from HTMLCollection
        https://bugs.webkit.org/show_bug.cgi?id=123895

        Reviewed by Darin Adler.

        This caching complicates the logic but is used by a single subclass
        (HTMLFormControlsCollection) only. The subclass can do the caching itself.

        * html/HTMLAllCollection.cpp:
        (WebCore::HTMLAllCollection::HTMLAllCollection):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::create):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::elementBeforeOrAfterCachedElement):
        (WebCore::HTMLCollection::firstElement):
        
            Renamed from traverseFirstElement.

        (WebCore::HTMLCollection::traverseForwardToOffset):
        (WebCore::HTMLCollection::invalidateCache):
        
            Make cache invalidation virtual so we can clear HTMLTableRowsCollection index cache.

        (WebCore::HTMLCollection::namedItem):
        (WebCore::HTMLCollection::updateNameCache):
        
            Use traverseForwardToOffset instead traverseNextElement. This allows removal of traverseNextElement.

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::usesCustomForwardOnlyTraversal):
        
            Renamed the enum and the accessor to be more informative.

        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::customElementAfter):
        
            Renamed from virtualItemAfter.

        * html/HTMLFormControlsCollection.cpp:
        (WebCore::HTMLFormControlsCollection::HTMLFormControlsCollection):
        (WebCore::findFormAssociatedElement):
        (WebCore::HTMLFormControlsCollection::customElementAfter):
        
            Move the array position caching logic here.

        (WebCore::HTMLFormControlsCollection::invalidateCache):
        * html/HTMLFormControlsCollection.h:
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection):
        * html/HTMLOptionsCollection.cpp:
        (WebCore::HTMLOptionsCollection::HTMLOptionsCollection):
        * html/HTMLTableRowsCollection.cpp:
        (WebCore::HTMLTableRowsCollection::HTMLTableRowsCollection):
        (WebCore::HTMLTableRowsCollection::customElementAfter):
        * html/HTMLTableRowsCollection.h:

2013-11-06  Michał Pakuła vel Rutka  <m.pakula@samsung.com>

        [ATK] accessibility/title-ui-element-correctness.html fails
        https://bugs.webkit.org/show_bug.cgi?id=99825

        Reviewed by Mario Sanchez Prada.

        When calling setAtkRelationSetFromCoreObject a new ATK_LABELLED_BY_RELATION
        is added, adding proper label element as a relation. When the document structure
        has been changed and a different label should be linked as a relation, current ATK
        implementation adds it as a next target on relation's target list, while
        WTR/DumpRenderTree implementation takes only first one into account.
        This patch adds a new function removing current relations before adding new ones.

        Covered by existing tests.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (removeAtkRelationFromRelationSetByType):
        (setAtkRelationSetFromCoreObject):

2013-11-06  Daniel Bates  <dabates@apple.com>

        Add ENABLE(TEXT_SELECTION)
        https://bugs.webkit.org/show_bug.cgi?id=123827

        Reviewed by Ryosuke Niwa.

        Add compile-time guard, ENABLE(TEXT_SELECTION), to enable or
        disable selection painting in WebCore (enabled by default).

        On iOS we disable WebCore selection painting and have UIKit
        paint the selection.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSelection): Only paint selection when
        TEXT_SELECTION is enabled.
        * rendering/LogicalSelectionOffsetCaches.h:
        (WebCore::LogicalSelectionOffsetCaches::LogicalSelectionOffsetCaches):
        For now, add a ENABLE(TEXT_SELECTION)-guard around an assertion. Added
        a FIXME comment to investigate the callers and either move the assertion
        to the appropriate callers or structure the code such that we can remove
        the assertion.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintSelection): Only paint selection when
        TEXT_SELECTION is enabled.
        * rendering/TextPaintStyle.cpp:
        (WebCore::computeTextSelectionPaintStyle): Only compute the selection
        paint style when TEXT_SELECTION is enabled. Otherwise, return a paint
        style identical to the text paint style. Also, substitute nullptr for 0.

2013-11-06  Jer Noble  <jer.noble@apple.com>

        Unrevewied Windows build fix after r158736; add InlineElementBox.cpp to the RenderingAllInOne.cpp file.

        * rendering/RenderingAllInOne.cpp:

2013-11-06  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix, style() return type is now a reference.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionFromStyle):

2013-11-06  Jer Noble  <jer.noble@apple.com>

        Unreviewed 32-bit Mac build fix; use an explicit FloatSize -> IntSize conversion function.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):

2013-11-04  Jer Noble  <jer.noble@apple.com>

        Playing many sounds with HTML5 Audio makes WebKit unresponsive
        https://bugs.webkit.org/show_bug.cgi?id=116145

        Reviewed by Eric Carlson.

        Cache as much information as possible from AVPlayerItem to eliminate unneccesary
        calls into AVFoundation.

        Add WillChange/DidChange functions to handle the results of KVO notifications
        from AVPlayerItem and AVPlayer:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPlay):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformPause):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateRate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatusDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackLikelyToKeepUpDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferEmptyDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferFullWillChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playbackBufferFullDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::seekableTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::loadedTimeRangesDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasEnabledAudioDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::presentationSizeDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::durationDidChange):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rateDidChange):
        (WebCore::itemKVOProperties):
        (-[WebCoreAVFMovieObserver observeValueForKeyPath:ofObject:change:context:]):

        Instruct the HTMLMediaElement to cache the currentTime value for 5 seconds:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::maximumDurationToCacheMediaTime):

        Add and initialize member variables to hold these cached values:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad):

        Add a new Notification type which can take (and call) a Function object:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::Notification):
        (WebCore::MediaPlayerPrivateAVFoundation::Notification::function):

        Implement queries in terms of the cached values of AVPlayerItem and AVPlayer
        properties:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::playerItemStatus):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::rate):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformBufferedTimeRanges):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMinTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::platformMaxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::totalBytes):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateAudioTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::updateVideoTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::sizeChanged):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):

        Invalidate the cached currentTime before calling scheduleTimeUpdate so that the
        correct movieTime is saved in m_clockTimeAtLastUpdateEvent:
        * html/HTMLMediaElement.cpp:
        (HTMLMediaElement::setReadyState):

2013-10-24  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add support for named grid areas
        https://bugs.webkit.org/show_bug.cgi?id=120045

        Reviewed by Andreas Kling.

        From Blink r155555, r155850 and r155889 by <jchaffraix@chromium.org>

        Added support for named grid areas. Basically a named grid area is
        now a valid grid position. The shorthand parsing of grid-area was
        split from the grid-{row|column} as the rules for expanding are
        slightly different.

        Unknown grid area names are treated as 'auto' as per the
        specification. This means that for those cases we need to trigger
        the auto-placement algorithm.

        Tests: fast/css-grid-layout/grid-item-bad-named-area-auto-placement.html
               fast/css-grid-layout/grid-item-named-grid-area-resolution.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridPosition):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseGridPosition):
        (WebCore::gridMissingGridPositionValue):
        (WebCore::CSSParser::parseGridItemPositionShorthand):
        (WebCore::CSSParser::parseGridAreaShorthand):
        (WebCore::CSSParser::parseSingleGridAreaLonghand):
        * css/CSSParser.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        (WebCore::StyleResolver::adjustGridItemPosition):
        (WebCore::createGridPosition):
        * css/StyleResolver.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionFromStyle):
        * rendering/style/GridPosition.h:
        (WebCore::GridPosition::isNamedGridArea):
        (WebCore::GridPosition::setNamedGridArea):
        (WebCore::GridPosition::namedGridLine):

2013-11-06  Chris Fleizach  <cfleizach@apple.com>

        AX: Audio and Video attachments are not output to VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=123479

        Reviewed by Mario Sanchez Prada.

        Video and audio elements don't appear as distinct objects in the AX hierarchy,
        nor are they treated as replaceable objects when emitting the text. We should
        treat these characters like attachments, for one. On the Mac platform, we should
        also identify them with special subroles.

        Tests: platform/mac/accessibility/media-emits-object-replacement.html
               platform/mac/accessibility/media-role-descriptions.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isGenericFocusableElement):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (createAccessibilityRoleMap):
        (-[WebAccessibilityObjectWrapper subrole]):
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):


2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Notify nodes removal to Range/Selection after dispatching blur and mutation event
        https://bugs.webkit.org/show_bug.cgi?id=123880

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/b60576a0560d14f8757e58d55d37b7cefa48a6ac

        In willRemoveChildren in ContainerNode.cpp, call Document::nodeChildrenWillBeRemoved after instead of
        before dispatching mutation events because we need to update ranges created by those mutation event
        listeners. willRemoveChild was fixed in r115686.

        Tests: editing/selection/selection-change-in-blur-event-by-remove-children.html
               editing/selection/selection-change-in-mutation-event-by-remove-children.html
               fast/dom/Range/range-created-during-remove-children.html

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChildren):

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Fix out-of-date offset in selection range code in range.surroundContents
        https://bugs.webkit.org/show_bug.cgi?id=123871

        Reviewed by Andreas Kling.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/c89b413ff0fc4aafa0c71d180b0b1e131bb37707

        The code in Range::insertNode assumeed that the start offset of the selection range within its container
        doesn't change across a call to insertBefore on the container but this is wrong. This patch recomputes
        the start offset when it is used after the insertBefore call.

        Test: editing/selection/range-surroundContents-with-preceding-node.html

        * dom/Range.cpp:
        (WebCore::Range::insertNode):

2013-11-06  Andreas Kling  <akling@apple.com>

        Add InlineElementBox and stop instantiating InlineBox directly.
        <https://webkit.org/b/123882>

        Make the InlineBox constructors protected and add a new class
        called InlineElementBox on top. This is somewhat analogous to the
        split between RenderText and RenderElement, and allows us to make
        renderer() return a far tighter RenderBoxModelObject& instead
        of a RenderObject&.

        Moved over attachLine(), deleteLine() and extractLine() to start
        things off. More things will follow.

        Reviewed by Antti Koivisto.

2013-11-06  Piotr Grad  <p.grad@samsung.com>

        Seek for video doesn't work when playback rate is negative
        https://bugs.webkit.org/show_bug.cgi?id=123791

        In MediaPlayerPrivateGStreamer::seek negative playback rate was not taken to account.

        Reviewed by Philippe Normand.

        Test: media/video-seek-with-negative-playback.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::seek):

2013-11-06  Andreas Kling  <akling@apple.com>

        Reinstate an annoying assertion that I accidentally commented out.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::synchronousIconForPageURL):

2013-11-06  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Override label() and language() in Audio and VideoTrackPrivateGStreamer
        https://bugs.webkit.org/show_bug.cgi?id=123836

        The tests are currently flakey because we only get the label and language if we get
        tags after the track client is set.

        Reviewed by Philippe Normand.

        No new tests because the tests already exist (this fixes flakeyness).

        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Override label() and language() to use m_label and m_language.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Same.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Make m_label and m_language protected so they can be used in the functions above.

2013-11-05  Andreas Kling  <akling@apple.com>

        RenderBlockFlow should only expose its line boxes as RootInlineBox.
        <https://webkit.org/b/123878>

        The line boxes attached directly to a RenderBlockFlow are always
        RootInlineBox objects, so call sites should always use the tightly
        typed firstRootBox() and lastRootBox().

        This allows the compiler to devirtualize calls to member functions
        of RootInlineBox that are marked FINAL.

        Reviewed by Antti Koivisto.

2013-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure end < m_runCount in WebCore::BidiRunList<WebCore::BidiRun>::reverseRuns
        https://bugs.webkit.org/show_bug.cgi?id=123863

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/cbaa92c763a37d89eeabd01658e522219299290c

        Test: fast/text/bidi-reverse-runs-crash.html

        * platform/text/BidiResolver.h:
        (WebCore::BidiResolver<Iterator, Run>::createBidiRunsForLine): Don't reverse the runs if there's
        nothing to be reversed.

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Address the review comment after r158724.

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):

2013-11-05  Zalan Bujtas  <zalan@apple.com>

        Widget's position change should not initiate layout, only when its size changes.
        https://bugs.webkit.org/show_bug.cgi?id=123860

        Reviewed by Andreas Kling.

        RenderWidgets initiate unnecessary layouts while scrolling when they are embedded to
        overflow:scroll containers. Scroll position change doesn't dirty the render tree
        so it should not trigger layout either.

        Manual test added. Unfortunately we can't test against the number of layouts yet.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetGeometry):
        (WebCore::RenderWidget::updateWidgetPosition):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Use-after-free in SliderThumbElement::dragFrom
        https://bugs.webkit.org/show_bug.cgi?id=123873

        Reviewed by Andreas Kling.

        Ref the SliderThumbElement since it could go away inside dragFrom.

        Test: fast/forms/range/range-type-change-onchange-2.html

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleMouseDownEvent):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Change the order of conditions to avoid computing rendererIsEditable()
        https://bugs.webkit.org/show_bug.cgi?id=123868

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/c89b413ff0fc4aafa0c71d180b0b1e131bb37707

        When we need both Node::renderer() and Node::rendererIsEditable() conditions to be true to perform
        some operation, it is more effective to check for renderer() first, so that if this condition fails
        we can avoid unnecessary computation of rendererIsEditable().

        * dom/Position.cpp:
        (WebCore::nextRenderedEditable):
        (WebCore::previousRenderedEditable):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMouseReleaseEvent):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        simpleUserAgentStyleSheet doesn't have focus ring on anchor element
        https://bugs.webkit.org/show_bug.cgi?id=123867

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/08ecc23c4d80be9969918c4baf0ac83dc6cb6cbd

        * css/CSSDefaultStyleSheets.cpp:

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        valueForBorderRadiusShorthand returns wrong values in some case
        https://bugs.webkit.org/show_bug.cgi?id=123866

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/0933728126f2db06ab8e945efc98bffa2d42af1c

        Because valueForBorderRadiusShorthand misses the followings:
        - showHorizontalBottomRight depends on showHorizontalBottomLeft.
        - showHorizontalTopRight depends on showHorizontalBottomRight (including showHorizontalBottomLeft).

        See also http://dev.w3.org/csswg/css-backgrounds/#the-border-radius

        Test: fast/css/getComputedStyle/getComputedStyle-borderRadius-2.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusShorthandValue):

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Protect DOM nodes in IndentOutdentCommand::tryIndentingAsListItem()
        https://bugs.webkit.org/show_bug.cgi?id=123861

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/297442eb539a2b764fdad323de79099a70179186 partially.

        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Make selectedListItem, previousList, and nextList
        RefPtr since they're are used after calling insertNodeBefore.

2013-11-05  Andreas Kling  <akling@apple.com>

        Apply more unique_ptr to line box management.
        <https://webkit.org/b/123857>

        Make all of the functions that return newly-created line boxes
        return them packed up in std::unique_ptrs.

        There is one exception in RenderBlockLineLayout where the function
        createInlineBoxForRenderer() is inconsistent about the ownership of
        the returned object. This will be addressed by a subsequent patch.

        We now "release" the line boxes into their various home structures,
        so the pointer smartness doesn't go end-to-end just yet.

        Reviewed by Anders Carlsson.

2013-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        getComputedStyle(x).lineHeight is affected by zooming
        https://bugs.webkit.org/show_bug.cgi?id=123847

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/7957097afbab2899ababd0d9c8acbf6e3eddb870

        Test: fast/css/line-height-zoom-get-computed-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::lineHeightFromStyle): Don't round line-height values.
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyLineHeight::applyValue): Use the computed value instead of the used value.

2013-11-05  James Craig  <jcraig@apple.com>

        AX: media controls accessibility needs more work
        https://bugs.webkit.org/show_bug.cgi?id=123749

        Reviewed by Jer Noble.

        Updated some of the control labels/roles to improve accessibility.
          - Volume slider is now keyboard/screenreader accessible.
          - muteButton was a checkbox toggling checked state, now a button that toggles label "mute/unmute"
          - fullscreenButton was a checkbox toggling checked state, now a button that toggles label "display/exit full screen"
          - captionButton was a checkbox, now a popup button that launches the newly accessible menu.
        Subtitles menu is now keyboard/screenreader accessible (uses roaming tabindex).
        Render dump expectations changed because volume slider is now hidden via... 
        ...opacity/size (to make accessible without hover) instead of display:none.

        Updated existing test coverage.

        * Modules/mediacontrols/mediaControlsApple.css:
        (audio::-webkit-media-controls-panel .volume-box):
        (audio::-webkit-media-controls-panel .volume-box:active):
        (audio::-webkit-media-controls-toggle-closed-captions-button):
        (audio::-webkit-media-controls-closed-captions-container .list):
        (audio::-webkit-media-controls-closed-captions-container li:focus):
        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.createControls):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.handleMuteButtonClicked):
        (Controller.prototype.handleMinButtonClicked):
        (Controller.prototype.handleMaxButtonClicked):
        (Controller.prototype.handleVolumeSliderChange):
        (Controller.prototype.buildCaptionMenu):
        (Controller.prototype.focusSiblingCaptionItem):
        (Controller.prototype.handleCaptionItemKeyUp):

2013-11-05  Andreas Kling  <akling@apple.com>

        Move some plugin-specific code from RenderWidget to RenderEmbeddedObject.
        <https://webkit.org/b/123845>

        All RenderWidgets representing plugins will be RenderEmbeddedObjects.
        Move some of the plugin-specific logic to RenderEmbeddedObject since it
        doesn't make sense for all RenderWidgets (frames, embedded documents)
        to care about this.

        Reviewed by Anders Carlsson.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        Fix the 32-bit build.

        * WebCore.exp.in:

2013-11-05  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: Moving an element while in the DOMNodeRemoved handler will hide it in the inspector
        https://bugs.webkit.org/show_bug.cgi?id=123516

        Reviewed by Timothy Hatcher.

        InspectorInstrumentation::willRemoveDOMNode was actually calling both willRemoveDOMNodeImpl and
        didRemoveDOMNodeImpl, making the DOMAgent unbind the element even if it was still part of the DOM.

        Because of that the DOMAgent was sending two events:
        1. When the element was about to be removed, just before JS "DOMNodeRemoved" was triggered.
        2. When the element was actually removed.

        Note that inspector's event #2 will not know about the node, as it just removed it from the
        internal hashmap, so it will just use a nodeID == 0 for it.

        This patch adds a separate call to InspectorInstrumentation::didRemoveDOMNode, just before the
        element is about to be removed. The InspectorInstrumentation::willRemoveDOMNode call is now only used
        by the DOMDebugger to trigger the DOM breakpoints in the Web Inspector. That feature is not exposed
        in the new Inspector UI, but can be used/tested using the protocol directly.

        Tests: inspector-protocol/dom-debugger/node-removed.html
               inspector-protocol/dom/dom-remove-events.html
               inspector-protocol/dom/remove-multiple-nodes.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeBetween):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::didRemoveDOMNode):

2013-11-05  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on CMake based ports with GLES.

        * CMakeLists.txt:
        Added OPENGLES2_LIBRARIES and OPENGLES2_INCLUDE_DIR into the includes and
        libraries list.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        platformCALayerDeviceScaleFactor should be const
        https://bugs.webkit.org/show_bug.cgi?id=123842

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerDeviceScaleFactor):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerDeviceScaleFactor):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCALayerClient.h:
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::platformCALayerDeviceScaleFactor):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerDeviceScaleFactor):
        Constify PlatformCALayerClient::platformCALayerDeviceScaleFactor.

2013-11-05  Gavin Barraclough  <barraclough@apple.com>

        Subresource loads should not prevent page throttling
        https://bugs.webkit.org/show_bug.cgi?id=123757

        Reviewed by Alexey Proskuryakov.

        The page-is-loading test for inhibiting process supression is currently
        too conservative, preventing supression of pages with infinitely loading
        resources (commonly XHRs). Instead, just rely on the FrameLoader being
        active (with hysteresis).

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::init):
        (WebCore::SubresourceLoader::checkForHTTPStatusCodeError):
        (WebCore::SubresourceLoader::didFinishLoading):
        (WebCore::SubresourceLoader::didFail):
        (WebCore::SubresourceLoader::willCancel):
        * loader/SubresourceLoader.h:
            - remove m_activityAssertion from SubresourceLoader.

2013-11-05  Tim Horton  <timothy_horton@apple.com>

        [mac] PDFDocumentImage is too big if PDF has a crop box smaller than the media box
        https://bugs.webkit.org/show_bug.cgi?id=123840
        <rdar://problem/15308765>

        Reviewed by Alexey Proskuryakov.

        Test: fast/images/pdf-as-image-crop-box.html

        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::size):
        Use the crop box when determining the size of the image.

        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/mac/PDFDocumentImageMac.mm:
        (WebCore::PDFDocumentImage::computeBoundsForCurrentPage):
        Get rid of m_mediaBox, since we don't need it anymore.

        (WebCore::PDFDocumentImage::drawPDFPage):
        PDFKit does the translation by the crop box origin for us;
        if we do it additionally, we'll be painting the wrong part of the image.
        So, don't do the translation here.

2013-11-05  Antti Koivisto  <antti@apple.com>

        Factor index cache for NodeLists and HTMLCollections to a class
        https://bugs.webkit.org/show_bug.cgi?id=123823

        Reviewed by Ryosuke Niwa.

        Implement index cache class that can used by NodeLists and HTMLCollections that currently
        each have implementations of their own.
        
        This patch also implements ChildNodeList and LiveNodeList using CollectionIndexCache.
        HTMLCollection is will be transitioned later.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ChildNodeList.cpp:
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::ChildNodeList::item):
        
            The client calls to cache to for indexed and size access.

        (WebCore::ChildNodeList::collectionFirst):
        (WebCore::ChildNodeList::collectionLast):
        (WebCore::ChildNodeList::collectionTraverseForward):
        (WebCore::ChildNodeList::collectionTraverseBackward):
        
            Cache calls back to these as needed to do the actual traversal.

        (WebCore::ChildNodeList::invalidateCache):
        * dom/ChildNodeList.h:
        * dom/CollectionIndexCache.h: Added.
        
            Templated cache class itself.

        (WebCore::::CollectionIndexCache):
        (WebCore::::nodeCount):
        (WebCore::::nodeBeforeCached):
        (WebCore::::nodeAfterCached):
        (WebCore::::nodeAt):
        (WebCore::::invalidate):
        * dom/LiveNodeList.cpp:
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForward):
        (WebCore::LiveNodeList::collectionFirst):
        (WebCore::LiveNodeList::collectionLast):
        (WebCore::LiveNodeList::collectionTraverseForward):
        (WebCore::LiveNodeList::collectionTraverseBackward):
        (WebCore::LiveNodeList::length):
        (WebCore::LiveNodeList::item):
        (WebCore::LiveNodeList::invalidateCache):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):

2013-11-05  Enrica Casucci  <enrica@apple.com>

        Full width semicolon is wrong in vertical text.
        https://bugs.webkit.org/show_bug.cgi?id=123814
        <rdar://problem/15312541>

        Reviewed by Benjamin Poulain.

        The full width semicolon should always be upright.
        Adding it to the list of characters that should
        ignore rotation.

        * platform/graphics/FontGlyphs.cpp:
        (WebCore::shouldIgnoreRotation):

2013-11-05  Andreas Kling  <akling@apple.com>

        Remove unused RenderWidget::notifyWidget().

        Rubber-stamped by Anders Carlsson.

2013-11-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158678.
        http://trac.webkit.org/changeset/158678
        https://bugs.webkit.org/show_bug.cgi?id=123820

        Causes a new debug assertion failure on the Mavericks test
        system. (Requested by bfulgham on #webkit).

        * rendering/mathml/RenderMathMLOperator.cpp:

2013-11-05  Renata Hodovan  <reni@webkit.org>

        ASSERTION FAILED: isHTMLTitleElement(m_titleElement.get()) in WebCore::Document::setTitle
        https://bugs.webkit.org/show_bug.cgi?id=122092

        Reviewed by Darin Adler.

        Remove a bogus assert in Document::setTitle().
        m_titleElement can be either of HTMLTitleElement or SVGTitleElement. The assertion was wrong.
        
        Backported from Blink:
        https://src.chromium.org/viewvc/blink?revision=158620&view=revision

        Test: svg/custom/title-assertion.html

        * dom/Document.cpp:
        (WebCore::Document::setTitle):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::insertedInto):

2013-11-05  Martin Robinson  <mrobinson@igalia.com>

        [MathML] Poor spacing around delimiters in MathML Torture Test 14
        https://bugs.webkit.org/show_bug.cgi?id=122837

        Reviewed by Brent Fulgham.

        Instead of stretching the vertical bar with the stretchable version, just repeat
        the normal vertical bar. This follows what Gecko does when rendering tall vertical
        bars and also works around an issue with STIX fonts leading to poor spacing in
        formulas.

        * rendering/mathml/RenderMathMLOperator.cpp: Stretch the vertical bar with the
        normal variant.

2013-11-05  Daniel Bates  <dabates@apple.com>

        XSSAuditor should catch reflected srcdoc properties even without a <frame> tag injection

        From Blink r160615 by <tsepez@chromium.org>
        https://src.chromium.org/viewvc/blink?view=rev&revision=160615

        Test: http/tests/security/xssAuditor/iframe-srcdoc-property-blocked.html

        * html/parser/XSSAuditor.cpp:
        (WebCore::XSSAuditor::filterIframeToken):

2013-11-05  Éva Balázsfalvi  <balazsfalvi.eva@stud.u-szeged.hu>

        Delete maketokenizer.
        https://bugs.webkit.org/show_bug.cgi?id=115155

        Reviewed by Zoltan Herczeg.

        This script was used to generate the old flex based CSS tokenizer. It
        was replaced by a custom tokenizer in r106217 but the script wasn't
        removed. Since there is no mention of it in the original bug nor any
        reference to maketokenizer in our build files, it's probably an
        oversight.

        Merge from blink:
        https://chromium.googlesource.com/chromium/blink/+/2a1c8aaf867f707ccdcd8893446e907e2aa2e1c2

        * css/maketokenizer: Removed.

2013-11-05  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed. Unbreaking GCC builds.

        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement): This inline function is not a template anymore.

2013-11-05  Antti Koivisto  <antti@apple.com>

        Make it compile.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::adoptDocument):
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):

2013-11-05  Antti Koivisto  <antti@apple.com>

        HTMLCollection should not be NodeList
        https://bugs.webkit.org/show_bug.cgi?id=123794

        Reviewed by Andreas Kling.

        HTMLCollection and NodeList are unrelated types in DOM yet our HTMLCollection inherits NodeList
        for code sharing reasons. While some code does get shared the types are sufficiently different 
        that this results in lots of unnecessary branches, complexity and general awkwardness. Code sharing 
        can be better achieved by means other than inheritance.
        
        This patch splits HTMLCollection from NodeList by copy-pasting and eliminating resulting redundancies. 
        Sharing comes later.

        * dom/Attr.cpp:
        (WebCore::Attr::setValue):
        (WebCore::Attr::childrenChanged):
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::~ClassNodeList):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::childrenChanged):
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::registerNodeList):
        (WebCore::Document::unregisterNodeList):
        (WebCore::Document::registerCollection):
        (WebCore::Document::unregisterCollection):
        (WebCore::Document::ensureCachedCollection):
        
            Add separate functions and map for registering HTMLCollections.

        (WebCore::Document::all):
        (WebCore::Document::windowNamedItems):
        (WebCore::Document::documentNamedItems):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::ensureCachedHTMLCollection):
        (WebCore::Element::cachedHTMLCollection):
        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::rootNode):
        (WebCore::isMatchingElement):
        (WebCore::LiveNodeList::iterateForPreviousElement):
        (WebCore::LiveNodeList::itemBefore):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForwardToOffset):
        (WebCore::LiveNodeList::traverseLiveNodeListFirstElement):
        (WebCore::LiveNodeList::traverseLiveNodeListForwardToOffset):
        (WebCore::LiveNodeList::isLastItemCloserThanLastOrCachedItem):
        (WebCore::LiveNodeList::isFirstItemCloserThanCachedItem):
        (WebCore::LiveNodeList::length):
        (WebCore::LiveNodeList::item):
        (WebCore::LiveNodeList::elementBeforeOrAfterCachedElement):
        
            This code used to live in HTMLCollection.cpp. Copy-paste here and remove all branches not needed for NodeLists.

        (WebCore::LiveNodeList::invalidateCache):
        
            NodeLists have no name caches.

        * dom/LiveNodeList.h:
        (WebCore::LiveNodeList::LiveNodeList):
        (WebCore::LiveNodeList::~LiveNodeList):
        (WebCore::LiveNodeList::isRootedAtDocument):
        (WebCore::LiveNodeList::type):
        (WebCore::LiveNodeList::invalidateCache):
        (WebCore::LiveNodeList::setCachedElement):
        
            Merge LiveNodeListBase and LiveNodeList.
            Remove fields and code supporting HTMLCollection.

        (WebCore::shouldInvalidateTypeOnAttributeChange):
        
            Move to global scope. This function is used both HTMLCollections and LiveNodeLists.

        * dom/NameNodeList.cpp:
        (WebCore::NameNodeList::~NameNodeList):
        * dom/NameNodeList.h:
        (WebCore::NameNodeList::create):
        * dom/Node.cpp:
        (WebCore::shouldInvalidateNodeListCachesForAttr):
        (WebCore::Document::shouldInvalidateNodeListAndCollectionCaches):
        (WebCore::Document::invalidateNodeListAndCollectionCaches):
        (WebCore::Node::invalidateNodeListAndCollectionCachesInAncestors):
        (WebCore::NodeListsNodeData::invalidateCaches):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::addCacheWithAtomicName):
        (WebCore::NodeListsNodeData::addCacheWithName):
        (WebCore::NodeListsNodeData::addCacheWithQualifiedName):
        (WebCore::NodeListsNodeData::addCachedCollection):
        (WebCore::NodeListsNodeData::cachedCollection):
        (WebCore::NodeListsNodeData::removeCacheWithAtomicName):
        (WebCore::NodeListsNodeData::removeCacheWithName):
        (WebCore::NodeListsNodeData::removeCachedCollection):
        (WebCore::NodeListsNodeData::isEmpty):
        (WebCore::NodeListsNodeData::adoptDocument):
        (WebCore::NodeListsNodeData::namedCollectionKey):
        (WebCore::NodeListsNodeData::namedNodeListKey):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList):
        
            Add separate cache for HTMLCollections.

        * dom/TagNodeList.cpp:
        (WebCore::TagNodeList::TagNodeList):
        (WebCore::TagNodeList::~TagNodeList):
        * dom/TagNodeList.h:
        (WebCore::TagNodeList::create):
        (WebCore::HTMLTagNodeList::create):
        * html/CollectionType.h:
        
            Remove NodeList types.

        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::HTMLCollection::HTMLCollection):
        (WebCore::HTMLCollection::~HTMLCollection):
        (WebCore::HTMLCollection::rootNode):
        (WebCore::isMatchingElement):
        (WebCore::HTMLCollection::iterateForPreviousElement):
        (WebCore::HTMLCollection::itemBefore):
        (WebCore::firstMatchingElement):
        (WebCore::nextMatchingElement):
        (WebCore::traverseMatchingElementsForwardToOffset):
        (WebCore::HTMLCollection::isLastItemCloserThanLastOrCachedItem):
        (WebCore::HTMLCollection::isFirstItemCloserThanCachedItem):
        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::length):
        (WebCore::HTMLCollection::item):
        (WebCore::HTMLCollection::elementBeforeOrAfterCachedElement):
        (WebCore::HTMLCollection::traverseFirstElement):
        (WebCore::HTMLCollection::traverseNextElement):
        (WebCore::HTMLCollection::traverseForwardToOffset):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::invalidateIdNameCacheMaps):
        (WebCore::HTMLCollection::namedItem):
        
            Remove NodeList specific branches and functions.
            LiveNodeListBase functions are now HTMLCollection functions.

        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::isRootedAtDocument):
        (WebCore::HTMLCollection::invalidationType):
        (WebCore::HTMLCollection::type):
        (WebCore::HTMLCollection::ownerNode):
        (WebCore::HTMLCollection::invalidateCache):
        (WebCore::HTMLCollection::document):
        (WebCore::HTMLCollection::overridesItemAfter):
        (WebCore::HTMLCollection::isElementCacheValid):
        (WebCore::HTMLCollection::cachedElement):
        (WebCore::HTMLCollection::cachedElementOffset):
        (WebCore::HTMLCollection::isLengthCacheValid):
        (WebCore::HTMLCollection::cachedLength):
        (WebCore::HTMLCollection::setLengthCache):
        (WebCore::HTMLCollection::setCachedElement):
        (WebCore::HTMLCollection::isItemRefElementsCacheValid):
        (WebCore::HTMLCollection::setItemRefElementsCacheValid):
        (WebCore::HTMLCollection::rootType):
        (WebCore::HTMLCollection::hasNameCache):
        (WebCore::HTMLCollection::setHasNameCache):
        
            Copy-paste functions and fields from former LiveNodeListBase.

        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::~HTMLNameCollection):
        * html/LabelableElement.cpp:
        (WebCore::LabelableElement::labels):
        * html/LabelsNodeList.cpp:
        (WebCore::LabelsNodeList::~LabelsNodeList):
        * html/LabelsNodeList.h:
        * html/RadioNodeList.cpp:
        (WebCore::RadioNodeList::~RadioNodeList):
        * html/RadioNodeList.h:
        (WebCore::RadioNodeList::create):

2013-11-05  Emilio Pozuelo Monfort  <pochu27@gmail.com>

        [GTK] Add stubs for missing symbols in dom bindings
        https://bugs.webkit.org/show_bug.cgi?id=123663

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_head_element_get_profile):
        (webkit_dom_html_head_element_set_profile):
        (webkit_dom_processing_instruction_get_data):
        (webkit_dom_processing_instruction_set_data):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols:

2013-11-05  Zan Dobersek  <zdobersek@igalia.com>

        Main thread tasks in ThreadableBlobRegistry should use std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=122946

        Reviewed by Darin Adler.

        The new BlobRegistryContext objects don't have to be adopted into OwnPtr and then have OwnPtr's leaked pointer
        passed into the WTF::callOnMainThread call - the pointer to the new heap-allocated object is passed in directly,
        with the object ending up being managed by std::unique_ptr in the designated main thread task.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::registerBlobURLTask):
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::registerBlobURLFromTask):
        (WebCore::unregisterBlobURLTask):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):

2013-11-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CSS] Enable css-image-orientation on EFL and GTK ports.
        https://bugs.webkit.org/show_bug.cgi?id=123698

        Reviewed by Beth Dakin.

        r157909 added wrong early return for css-image-orientation. It causes about 20 regressions in layout test
        when enabling css-image-orientation. This fixes those wrong implementation as well as enables it on EFL
        and GTK ports by default.

        Test: fast/css/image-orientation/image-orientation.html

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateSize):

2013-11-05  Andreas Kling  <akling@apple.com>

        RenderEmbeddedObject shouldn't know about fallback content.
        <https://webkit.org/b/123781>

        Stop caching the presence of fallback (DOM) content in a flag on
        RenderEmbeddedObject and have SubframeLoader fetch it directly from
        HTMLObjectElement instead.

        Also made SubframeLoader::requestObject() take the owner element
        by reference since we don't support owner-less embedded objects.

        Reviewed by Antti Koivisto.

2013-11-05  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] Remove NATIVE_FULLSCREEN_VIDEO support
        https://bugs.webkit.org/show_bug.cgi?id=123437

        Reviewed by Philippe Normand.

        Removed some dead code as no GStreamer port is using the native
        fullscreen video support.

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * PlatformGTK.cmake: Removed compilation of deleted files.
        * platform/graphics/MediaPlayer.h: Removed structures related to
        GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.cpp: Removed.
        * platform/graphics/gstreamer/FullscreenVideoControllerGStreamer.h: Removed.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Removed.
        * platform/graphics/gstreamer/GStreamerGWorld.h: Removed.
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: Removed
        gst/video/video.h include.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::~MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::platformMedia):
        (WebCore::MediaPlayerPrivateGStreamerBase::createVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        Removed code related to GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gstreamer/PlatformVideoWindow.h: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowMac.mm: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowNix.cpp: Removed.
        * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h: Removed.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender):
        (webkitVideoSinkNew):
        * platform/graphics/gstreamer/VideoSinkGStreamer.h: Removed code
        related to GStreamer and NATIVE_FULLSCREEN_VIDEO.
        * platform/graphics/gtk/FullscreenVideoControllerGtk.cpp: Removed.
        * platform/graphics/gtk/FullscreenVideoControllerGtk.h: Removed.

2013-11-05  Andreas Kling  <akling@apple.com>

        Remove RenderWidget::viewCleared().
        <https://webkit.org/b/123777>

        This was some ancient hand-waving code from the KHTML era.

        It was obviously confused (e.g RenderEmbeddedObject trying to handle
        iframe owners, even though that setup is impossible.)

        Reviewed by Anders Carlsson.

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: Split backend Cursors and Transactions into their own files
        https://bugs.webkit.org/show_bug.cgi?id=123789

        Reviewed by Alexey Proskuryakov.

        No new tests (Rename, no change in behavior).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBBackingStoreCursorInterface.h:
        (WebCore::IDBBackingStoreCursorInterface::~IDBBackingStoreCursorInterface):

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBBackingStoreTransactionInterface.h: Added.
        (WebCore::IDBBackingStoreTransactionInterface::~IDBBackingStoreTransactionInterface):

        * Modules/indexeddb/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        * Modules/indexeddb/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/IDBIndexWriter.cpp:
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h:

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::createCursorBackend):
        * Modules/indexeddb/IDBTransactionBackendImpl.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::GetOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.cpp: Added.
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):
        (WebCore::IDBBackingStoreCursorLevelDB::firstSeek):
        (WebCore::IDBBackingStoreCursorLevelDB::advance):
        (WebCore::IDBBackingStoreCursorLevelDB::continueFunction):
        (WebCore::IDBBackingStoreCursorLevelDB::haveEnteredRange):
        (WebCore::IDBBackingStoreCursorLevelDB::isPastBounds):
        * Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h: Added.
        (WebCore::IDBBackingStoreCursorLevelDB::~IDBBackingStoreCursorLevelDB):
        (WebCore::IDBBackingStoreCursorLevelDB::IDBBackingStoreCursorLevelDB):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::compareIndexKeys):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::findGreatestKeyLessThanOrEqual):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::ObjectStoreKeyCursorImpl::create):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreKeyCursorImpl::ObjectStoreKeyCursorImpl):
        (WebCore::ObjectStoreCursorImpl::create):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::ObjectStoreCursorImpl):
        (WebCore::objectStoreCursorOptions):
        (WebCore::indexCursorOptions):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
 
       * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp: Added.
        (WebCore::IDBBackingStoreTransactionLevelDB::IDBBackingStoreTransactionLevelDB):
        (WebCore::IDBBackingStoreTransactionLevelDB::begin):
        (WebCore::IDBBackingStoreTransactionLevelDB::commit):
        (WebCore::IDBBackingStoreTransactionLevelDB::rollback):
        * Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-11-04  Zalan Bujtas  <zalan@apple.com>

        Do not call setFrameRect on Widget unless its boundaries changed.
        https://bugs.webkit.org/show_bug.cgi?id=123781

        Reviewed by Andreas Kling.

        Call Widget:setFrameRect only when the frame's rect actually changes. It also
        cleans up the related weak reference code a bit.
        
        Covered by existing tests.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): 

2013-11-04  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/html] remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123740

        Reviewed by Darin Adler.

        Removing redundant headers.

        * html/BaseDateAndTimeInputType.cpp:
        * html/ColorInputType.cpp:
        * html/DOMFormData.cpp:
        * html/DOMURL.cpp:
        * html/DateInputType.cpp:
        * html/DateTimeInputType.cpp:
        * html/DateTimeLocalInputType.cpp:
        * html/FTPDirectoryDocument.cpp:
        * html/FileInputType.cpp:
        * html/FormController.cpp:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLAreaElement.cpp:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCollection.cpp:
        * html/HTMLDetailsElement.cpp:
        * html/HTMLDocument.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLFormControlsCollection.cpp:
        * html/HTMLFormElement.cpp:
        * html/HTMLImageElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLLegendElement.cpp:
        * html/HTMLMapElement.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionsCollection.cpp:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/HTMLSummaryElement.cpp:
        * html/HTMLTemplateElement.cpp:
        * html/HTMLVideoElement.cpp:
        * html/HTMLViewSourceDocument.cpp:
        * html/MediaController.cpp:
        * html/MediaKeyEvent.cpp:
        * html/MonthInputType.cpp:
        * html/RangeInputType.cpp:
        * html/StepRange.cpp:
        * html/TextFieldInputType.cpp:
        * html/TimeInputType.cpp:
        * html/WeekInputType.cpp:
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/CanvasStyle.cpp:
        * html/canvas/OESVertexArrayObject.cpp:
        * html/parser/BackgroundHTMLParser.cpp:
        * html/parser/CSSPreloadScanner.cpp:
        * html/parser/CompactHTMLToken.cpp:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLElementStack.cpp:
        * html/parser/HTMLFormattingElementList.cpp:
        * html/parser/HTMLMetaCharsetParser.cpp:
        * html/parser/HTMLParserIdioms.cpp:
        * html/parser/HTMLPreloadScanner.cpp:
        * html/parser/HTMLTokenizer.cpp:
        * html/parser/HTMLTreeBuilder.cpp:
        * html/parser/HTMLTreeBuilderSimulator.cpp:
        * html/parser/HTMLViewSourceParser.cpp:
        * html/parser/TextDocumentParser.cpp:
        * html/parser/XSSAuditor.cpp:
        * html/shadow/ContentDistributor.cpp:
        * html/shadow/InsertionPoint.cpp:
        * html/shadow/MediaControlElements.cpp:
        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/MediaControlsBlackBerry.cpp:
        * html/shadow/MediaControlsGtk.cpp:
        * html/shadow/SliderThumbElement.cpp:
        * html/track/AudioTrack.cpp:
        * html/track/InbandGenericTextTrack.cpp:
        * html/track/InbandTextTrack.cpp:
        * html/track/InbandWebVTTTextTrack.cpp:
        * html/track/TextTrack.cpp:
        * html/track/TextTrackCueGeneric.cpp:
        * html/track/TextTrackList.cpp:
        * html/track/TextTrackRegion.cpp:
        * html/track/TrackListBase.cpp:
        * html/track/VideoTrack.cpp:
        * html/track/WebVTTParser.cpp:

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: deleteDatabase() interface should be asynchronous
        https://bugs.webkit.org/show_bug.cgi?id=123787

        Reviewed by Tim Horton.

        No new tests (No behavior change for a tested port).

        deleteDatabase now has no return value, but calls back to a bool function:
        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::deleteDatabase):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        Refactor to account for the new async deleteDatabase:
        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabaseAsync):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

2013-11-04  Brady Eidson  <beidson@apple.com>

        Add Modules/indexeddb/leveldb to the WebCore.xcodeproj

        Rubberstamped by Andreas Kling.

        This will make hacking on IDB much easier for Mac developers as they won’t have
        to constantly add and then subtract the leveldb subdirectory.

        The USE(LEVELDB) flag is still disabled so these files won’t actually build by default.

        * WebCore.xcodeproj/project.pbxproj:

2013-11-04  Brady Eidson  <beidson@apple.com>

        Address review feedback I forgot to commit in r158641

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingOpenCalls):

2013-11-04  Brady Eidson  <beidson@apple.com>

        IDB: Make opening/establishing a database asynchronous.
        https://bugs.webkit.org/show_bug.cgi?id=123775

        Reviewed by Andreas Kling.

        No new tests (No behavior change for a tested port).

        * Modules/indexeddb/IDBBackingStoreInterface.h: Add getOrEstablishIDBDatabaseMetadata with a callback,
          removing getIDBDatabaseMetaData, getObjectStores, and createIDBDatabaseMetaData in the process.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::getOrEstablishIDBDatabaseMetadata): Adapted from getIDBDatabaseMetaData,
          implement the asynchronous interface in terms of other LevelDB methods, always calling back synchronously.
        (WebCore::IDBBackingStoreLevelDB::createIDBDatabaseMetaData):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::create):
        (WebCore::IDBDatabaseBackendImpl::openInternalAsync): Broken off from openInternal.
        (WebCore::IDBDatabaseBackendImpl::didOpenInternalAsync): Broken off from openInternal.
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::processPendingOpenCalls): Broken off to allow didOpenInternalAsync
          to perform open callbacks in the failure case.
        (WebCore::IDBDatabaseBackendImpl::openConnection): Always queue open connection calls, then immediately processPendingCalls.
        (WebCore::IDBDatabaseBackendImpl::openConnectionInternal): Actually perform open connection calls.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:


2013-11-04  Andreas Kling  <akling@apple.com>

        CTTE: RenderFrameBase's widget is always a FrameView.
        <https://webkit.org/b/123771>

        Delete widget() from RenderFrameBase and supplant a childView()
        that returns FrameView*. Strip away unnecessary casts and asserts.

        Reviewed by Antti Koivisto.

2013-11-04  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Content in region doesn't respect shape-outside after initial layout pass
        <https://webkit.org/b/114829>

        Although we set the size of a shape for shape-outside in RenderBlockFlow::insertFloatingObject based on the
        float's size, the actual height of the float is not always resolved at that point. (Look at cases when the shape
        has percentage based height or percentage based radius.) ShapeInfo::setShapeSize triggers a layout for 0 height
        value, which will be overriden later, when RenderBlockFlow::positionNewFloats sets the actual size of the float (shape).
        Thus it doesn't make sense to set the shape's size in insertFloatingObject and run those extra unnecessary layout passes,
        since it'll be overriden anyways. I moved the shape size setting logic into RenderBlockFlow::positionNewFloats.

        The problem showed up when we had a shape-outside ellipse with percentage based radius, and we inserted the content
        with JavaScript into a region flow. The content has been layed out based on the 0 border radius, and relayout hasn't been
        triggered when it flew into the flow. This change sets the shape size only when we already have the height of the float,
        so the radius(es) can be resolved correctly, thus no unnecessary layout passes will happen and the layout will be correct as well.

        Reviewed by David Hyatt.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-layout-after-initial-layout-pass.html

        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertFloatingObject): Remove setting the size of the shape.
        (WebCore::RenderBlockFlow::positionNewFloats): Set the size of the shape here.

2013-11-04  Samuel White  <samuel_white@apple.com>

        AX: AXShowMenu doesn't always work.
        https://bugs.webkit.org/show_bug.cgi?id=123649

        Reviewed by Chris Fleizach.

        No new tests, the change occurs in a code path that forces the context menu to show which
        locks up DRT if we try to test it (platform menu is shown). The change itself gives the mouse
        event handler a chance to handle our platform mouse event BEFORE the event ends up in the show
        context menu machinery. This is necessary because without it, the element will not become
        focused. Without focus, accessibility shows different/less menu items than a mouse click. The
        end result is that context menus shown via accessibility are consistent with menus shown via click.

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::showContextMenuAt):

2013-11-04  Jeffrey Pfau  <jpfau@apple.com>

        SMIL timers can still fire after the containing document has been torn down
        <https://webkit.org/b/123291>

        Reviewed by Darin Adler.

        Ensure that the timers get paused when the document is preparing to be torn down.

        Test: svg/animations/smil-timers-not-disabled-crash.html

        * dom/Document.cpp:
        (WebCore::Document::dropChildren):
        (WebCore::Document::commonTeardown):
        (WebCore::Document::prepareForDestruction):
        * dom/Document.h:

2013-11-04  Brendan Long  <b.long@cablelabs.com>

        Move duplicate code in TrackPrivate classes to a common base class
        https://bugs.webkit.org/show_bug.cgi?id=123619

        Reviewed by Darin Adler.

        No new tests because this is just refactoring.

        * GNUmakefile.list.am: Add TrackPrivateBase.
        * WebCore.vcxproj/WebCore.vcxproj: Same.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Same.
        * WebCore.xcodeproj/project.pbxproj: Same.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::inbandTrackIndex): Renamed audioTrackIndex() to trackIndex().
        (WebCore::AudioTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::AudioTrack::languageChanged): Same.
        (WebCore::AudioTrack::willRemove): Same.
        * html/track/AudioTrack.h: Update TrackPrivateBaseClient function signatures.
        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::inbandTrackIndex): Renamed textTrackIndex() to trackIndex().
        (WebCore::InbandTextTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::InbandTextTrack::languageChanged): Same.
        (WebCore::InbandTextTrack::willRemove): Same.
        * html/track/InbandTextTrack.h: Update TrackPrivateBaseClient function signatures.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::inbandTrackIndex): Renamed videoTrackIndex() to trackIndex().
        (WebCore::VideoTrack::labelChanged): First argument is now a TrackPrivateBase*.
        (WebCore::VideoTrack::languageChanged): Same.
        (WebCore::VideoTrack::willRemove): Same.
        * html/track/VideoTrack.h: Update TrackPrivateBaseClient function signatures.
        * platform/graphics/AudioTrackPrivate.h: Remove code that was moved to TrackPrivateBase.
        * platform/graphics/InbandTextTrackPrivate.h: Same.
        * platform/graphics/InbandTextTrackPrivateClient.h: Same.
        * platform/graphics/VideoTrackPrivate.h: Same.
        * platform/graphics/TrackPrivateBase.h: Refactored out duplicate code in AudioTrackPrivate, InbandTextTrackPrivate and VideoTrackPrivate.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: Renamed textTrackIndex() to trackIndex().
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.h: Same.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Renamed audioTrackIndex() to trackIndex().
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Renamed videoTrackIndex() to trackIndex90.

2013-11-04  Andreas Kling  <akling@apple.com>

        FrameView destructor is worried about being retained by a renderer.
        <https://webkit.org/b/123763>

        There's no way we can be in ~FrameView() while also being owned by
        a RenderWidget. Remove some overly paranoid code that was making sure
        the renderer didn't have a reference on us.

        Reviewed by Anders Carlsson.

2013-11-04  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION(r158311): media/media-fragments/TC0054.html and TC0061.html hit assertions
        https://bugs.webkit.org/show_bug.cgi?id=123555

        Reviewed by Darin Adler.

        No new tests, covered by existing tests.

        * html/MediaFragmentURIParser.cpp:
        (WebCore::MediaFragmentURIParser::parseFragments): Don't add a fragment with empty key or value as
            they will not processed.
        (WebCore::MediaFragmentURIParser::parseNPTFragment): Remove excess whitespace.

2013-11-04  Patrick Gansterer  <paroga@webkit.org>

        Remove code duplications in createFontCustomPlatformData()
        https://bugs.webkit.org/show_bug.cgi?id=123706

        Reviewed by Darin Adler.

        Move OpenTypeSanitizer and WOFF handling from the port specific
        implementations in createFontCustomPlatformData() into the only
        caller of this function CachedFont::ensureCustomFontData().
        Also change the parameter passing the SharedBuffer from a
        pointer to a reference since it is never null.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        * platform/graphics/blackberry/FontCustomPlatformData.h:
        * platform/graphics/blackberry/FontCustomPlatformDataBlackBerry.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h:

2013-11-04  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing MediaStreamDescriptor addSource and addTrack methods
        https://bugs.webkit.org/show_bug.cgi?id=123755

        Reviewed by Eric Carlson.

        We must store the track and source that is passed as parameter in a RefPtr,
        otherwise we will refer to a null pointer.

        No new tests needed.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addSource):
        (WebCore::MediaStreamDescriptor::addTrack):

2013-11-04  Tim Horton  <timothy_horton@apple.com>

        Remove PlatformCALayer::playerLayer
        https://bugs.webkit.org/show_bug.cgi?id=123764

        Reviewed by Sam Weinig.

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::clone):
        Remove playerLayer(), fold it into clone().

2013-11-04  Chris Fleizach  <cfleizach@apple.com>

        AX: Mail attachments at the start of an email are not output by VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=123697

        Reviewed by Ryosuke Niwa.

        VoiceOver is expecting that "replaced elements" (attachments in a Mail message in this case) to be
        represented by the replacement character when asking for a stringForRange.

        However, when that replaced element is at the beginning of the document, the logic does not work because
        there is a few code places that will take that first Position and advance it forward, not accounting for replaced elements.
        When using the TextIterator normally, it does account for these, so that's why it's only affecting as at the beginning of the document.

        Also a "replaced element" can be more than just renderer->isReplaced(), hence the externing of the isRendererReplacedElement method
        and using that it in pertinent places.

        Tests: platform/mac/accessibility/object-replacement-with-no-rendered-children-at-node-start.html
               platform/mac/accessibility/object-replacement-with-rendered-children-at-node-start.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::replacedNodeNeedsCharacter):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (nsStringForReplacedNode):
        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        * dom/Range.cpp:
        (WebCore::Range::firstNode):
        * editing/TextIterator.cpp:
        (WebCore::isRendererReplacedElement):
        * editing/TextIterator.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        Use RenderAncestorIterator in a couple of places.
        <https://webkit.org/b/123725>

        Take the ancestorsOfType<RenderMoo>() thingy out for a spin.

        Found a bunch of parent chain walking loops that were really just
        looking for the first ancestor renderer of a certain type.
        They were a perfect fit for this pattern:

            if (auto svgRoot = ancestorsOfType<RenderSVGRoot>(renderer).first())
                svgRoot->shakeMoneyMaker();

        Quite a bit clearer than the previous:

            for (auto ancestor = renderer.parent(); ancestor; ancestor = ancestor->parent()) {
                if (ancestor->isSVGRoot())
                    toRenderSVGRoot(ancestor)->makeMoneyShaker();
            }

        Reviewed by Antti Koivisto.

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Add a SourceBufferPrivateClient interface for platform -> html communication.
        https://bugs.webkit.org/show_bug.cgi?id=123373

        Reviewed by Eric Carlson.

        To enable communication between SourceBuffer and SourceBufferPrivate without introducing
        layering violations, add a new interface class SourceBufferPrivateInterface from which
        SourceBuffer will inherit.

        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::SourceBuffer): Set the private's client.
        (WebCore::SourceBuffer::~SourceBuffer): Clear the private's client.
        (WebCore::SourceBuffer::sourceBufferPrivateDidEndStream): Added stub.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveInitializationSegment): Hinno.
        (WebCore::SourceBuffer::sourceBufferPrivateDidReceiveSample): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateHasAudio): Ditto.
        (WebCore::SourceBuffer::sourceBufferPrivateHasVideo): Ditto.
        * Modules/mediasource/SourceBuffer.h:
        * WebCore.xcodeproj/project.pbxproj: Add new files to project.
        * platform/graphics/SourceBufferPrivate.h:
        * platform/graphics/SourceBufferPrivateClient.h: Added.
        (WebCore::SourceBufferPrivateClient::~SourceBufferPrivateClient): Empty destructor.

2013-11-01  Jer Noble  <jer.noble@apple.com>

        [PluginProxy] Add a setting to disable video plugin proxy support in HTMLMediaElement.
        https://bugs.webkit.org/show_bug.cgi?id=123621

        Reviewed by Eric Carlson.

        Add a new Setting which will disable the video plugin proxy. Enable support for AVFoundation
        in iOS (which requries fixing a few compile errors resulting from classes and methods which
        are not available on iOS.

        * WebCore.exp.in: Export wkAVAssetResolvedURL.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::canShareStyleWithElement): Make conditional upon
            new isVideoPluginProxyEnabled() setting.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::parseAttribute): Ditto.
        * html/HTMLMediaElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::createRenderer): Ditto.
        (WebCore::HTMLVideoElement::attach): Ditto.
        (WebCore::HTMLVideoElement::parseAttribute): Ditto.
        (HTMLVideoElement::setDisplayMode): Ditto.
        * html/HTMLVideoElement.h:
        * page/Settings.cpp:
        (WebCore::Settings::setVideoPluginProxyEnabled): Simple setter.
        * page/Settings.h:
        (WebCore::Settings::isVideoPluginProxyEnabled): Simple getter.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Conditionally add MediaPlayerPrivateIOS and always add
            MediaPlayerPriateAVFoundationObjC.
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::deliverNotification): Add default implementation.
        (WebCore::MediaPlayerPrivateInterface::setMediaPlayerProxy): Ditto.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): Use new
            HAS_ and USE_ macros instead of __MAC_OS_MIN_VERNSION_REQUIRED.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::~MediaPlayerPrivateAVFoundationObjC): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::hasContextRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createContextVideoRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::destroyContextVideoRenderer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paint): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer): Use cachedCGColor instead
            of CGColorGetConstantColor.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput): Use CVPixelBuffer pixel
            format constant instead of QuickDraw constant.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createPixelBuffer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput): Draw to intermediary
            CGImage on iOS.
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.h:
        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
        * platform/ios/WebCoreSystemInterfaceIOS.mm:
        * platform/mac/WebCoreSystemInterface.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        REGRESSION(r158561): fast/block/float/float-append-child-crash.html asserting.

        The non-const ancestor iterator was walking siblings, not ancestors.

        Rubber-stamped by Antti Koivisto.

2013-10-31  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Disclaim support for MSE in AVFoundation and QTKit engines
        https://bugs.webkit.org/show_bug.cgi?id=123593

        Reviewed by Eric Carlson.

        Immediately fail if asked to load a Media Source in engines which do not support
        them.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::load):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::load):
        (WebCore::MediaPlayerPrivateQTKit::supportsType):

2013-11-04  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] image valued shape element margin can cause an ASSERT fail
        https://bugs.webkit.org/show_bug.cgi?id=123743

        Reviewed by Andreas Kling.

        When margin-top is specified for a shape's element, the Y coordinates passed
        to RasterShapeIntervals::getExcludedIntervals() may be negative. This is
        because the incoming logical coordinates are relative to the content or
        padding box, depending on the box-sizing property. The RasterShape::getExcludedIntervals()
        method now clips the incoming Y coordinates to the shape's bounds before
        accessing the shape's intervals.

        Test: fast/shapes/shape-outside-floats/shape-outside-floats-margin-crash.html

        * rendering/shapes/RasterShape.cpp:
        (WebCore::RasterShapeIntervals::getExcludedIntervals):

2013-11-04  Antti Koivisto  <antti@apple.com>

        Make LiveNodeListBase use Elements instead of Nodes
        https://bugs.webkit.org/show_bug.cgi?id=123745

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * dom/Element.cpp:
        (WebCore::Element::firstElementChild):
        (WebCore::Element::lastElementChild):
        
            Switch to correct calls. ElementTraversal::previous and previousChild are no longer equivalent.

        * dom/ElementTraversal.h:
        (WebCore::::lastWithinTemplate):
        (WebCore::::previousTemplate):
        
            Fix ElementTraversal::lastWithin and previous. They had no real clients and didn't work correctly.
            With LiveNodeListBase starting to use these they get excellent test coverage.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeListBase::invalidateCache):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeListBase::LiveNodeListBase):
        (WebCore::LiveNodeListBase::isElementCacheValid):
        (WebCore::LiveNodeListBase::cachedElement):
        (WebCore::LiveNodeListBase::cachedElementOffset):
        (WebCore::LiveNodeListBase::setCachedElement):
        
            Make the cache Element based.
            Switch to Elements in all helpers.
            Rename item -> element for clarity.

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodePointer::moveToPrevious):
        (WebCore::NodeIterator::updateForNodeRemoval):
        
            This code expected the old inconsistent NodeTraversal::previous behavior where the traversal includes
            the root as the last item. Drop the stayWithin parameter and handle the one case where it is needed here.

        * dom/NodeTraversal.cpp:
        (WebCore::NodeTraversal::last):
        (WebCore::NodeTraversal::deepLastChild):
        * dom/NodeTraversal.h:
        
            Support ElementTraversal::previous/lastWithin.

        (WebCore::NodeTraversal::previous):
        
            This was slightly wrong too.

        * html/HTMLCollection.cpp:
        (WebCore::previousElement):
        (WebCore::lastElement):
        (WebCore::LiveNodeListBase::iterateForPreviousElement):
        (WebCore::LiveNodeListBase::itemBefore):
        (WebCore::LiveNodeListBase::isLastItemCloserThanLastOrCachedItem):
        (WebCore::LiveNodeListBase::isFirstItemCloserThanCachedItem):
        (WebCore::LiveNodeListBase::setCachedElement):
        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::elementBeforeOrAfterCachedElement):
        * html/HTMLCollection.h:
        (WebCore::HTMLCollection::isEmpty):
        (WebCore::HTMLCollection::hasExactlyOneItem):

2013-11-04  Michael Saboff  <msaboff@apple.com>

        Eliminate HostCall bit from JSC Stack CallerFrame
        https://bugs.webkit.org/show_bug.cgi?id=123642

        Reviewed by Geoffrey Garen.

        Updated JavaScript stack walking as a result of the corresponding changes made in
        JavaScriptCore.

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::shouldBypassMainWorldContentSecurityPolicy):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::returnEvent):
        (WebCore::ScriptDebugServer::didExecuteProgram):

2013-11-04  Bem Jones-Bey  <bjonesbe@adobe.com>

        [css shapes] Fix support for shape-outside on a float with padding
        https://bugs.webkit.org/show_bug.cgi?id=123590

        Reviewed by Alexandru Chiculita.

        The line top was being improperly converted to the coordinates of the
        shape, causing the shape to be positioned incorrectly when the float
        had padding. This fixes that problem.

        No new tests, covered by updates to existing ones.

        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::updateDeltasForContainingBlockLine):

2013-11-04  Alexey Proskuryakov  <ap@apple.com>

        Implement generateKey for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123669

        Reviewed by Dan Bernstein.

        Tests: crypto/subtle/aes-cbc-generate-key.html
               crypto/subtle/hmac-generate-key.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams): Added bindings for AesKeyGenParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Handle
        algorithms that generate AES and HMAC keys.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::generateKey): Added.

        * crypto/CryptoAlgorithmAesKeyGenParams.h: Added.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::randomData):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyMac.cpp: Added
        Expose a function that produces random data for symmetric crypto keys. Cross-platform
        implementation uses ARC4 code from WTF, while Mac uses a system function that
        provides a FIPS validated random number generator.

        * crypto/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::generate):
        * crypto/CryptoKeyAES.h:
        Added a function that creates AES keys.

        * crypto/SubtleCrypto.idl: Added generateKey.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey): Added.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey): Added.

        * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyHMAC.h:
        Added a function that creates HMAC keys.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Removed generateKey stub, the implementation
        ended up in cross-platform file.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Ditto.

2013-11-04  Daniel Bates  <dabates@apple.com>

        Revert SetCGFontRenderingMode() build fix for Chromium Mac
        https://bugs.webkit.org/show_bug.cgi?id=123633

        Reviewed by Darin Adler.

        Reverts <http://trac.webkit.org/changeset/134380>, which
        was a Chromium Mac build fix for <http://trac.webkit.org/changeset/134348>
        (https://bugs.webkit.org/show_bug.cgi?id=101787). Chromium doesn't
        build against top-of-tree WebKit.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2013-11-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158526.
        http://trac.webkit.org/changeset/158526
        https://bugs.webkit.org/show_bug.cgi?id=123744

        it broke the build (Requested by jessieberlin on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesCbcParams):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey):
        * bindings/js/JSSubtleCryptoCustom.cpp:
        * crypto/CryptoAlgorithmAesKeyGenParams.h: Removed.
        * crypto/CryptoKey.cpp:
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyAES.cpp:
        * crypto/CryptoKeyAES.h:
        * crypto/CryptoKeyMac.cpp: Removed.
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.cpp:
        * crypto/keys/CryptoKeyHMAC.h:
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey):

2013-11-04  Przemyslaw Szymanski  <p.szymanski3@samsung.com>

        [Texmap] Remove redundant calls in CoordinatedGraphicsScene
        https://bugs.webkit.org/show_bug.cgi?id=123737

        Reviewed by Noam Rosenthal.

        Removing unused code left after few refactoring patches.

        No new tests. Covered by existing ones.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::paintToCurrentGLContext):

2013-11-04  Andreas Kling  <akling@apple.com>

        CSSPrimitiveValue color constructors should return PassRef.
        <https://webkit.org/b/123728>

        Make CSSPrimitiveValue::createColor() and the corresponding
        CSSValuePool helper functions return PassRef<CSSPrimitiveValue>.

        Also made CSSValuePool slightly less stupid when hitting the upper
        size limit on the color value cache: instead of throwing out cache
        and rebuilding it from scratch, just remove one value at random.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Some more RenderChildIterator deployment.
        <https://webkit.org/b/123735>

        Convert another handful of loops to use childrenOfType<RenderFoo>
        iterators, mostly for skipping over uninteresting text renderers.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        LabelsNodeList always is always rooted at a LabelableElement.
        <https://webkit.org/b/123730>

        Tighten up LabelsNodeList by enforcing that it's only rooted to
        a LabelableElement. Also marked the class FINAL and made its
        create() helper return PassRef.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        REGRESSION: RenderStyle is leaked when not creating renderer for display:none
        <https://webkit.org/b/123726>

        Explicitly drop the RenderStyle reference in RenderElement::createFor
        if we decide to not create any renderer.

        Reviewed by Antti Koivisto.

        Test: fast/css/renderstyle-leak-with-display-none.html

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):

2013-11-04  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/dom] Remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123720

        Reviewed by Andreas Kling.

        Removing redundant headers from dom related cpp files.

        * dom/Attr.cpp:
        * dom/CharacterData.cpp:
        * dom/ChildListMutationScope.cpp:
        * dom/ChildNodeList.cpp:
        * dom/ContainerNode.cpp:
        * dom/ContainerNodeAlgorithms.cpp:
        * dom/DOMNamedFlowCollection.cpp:
        * dom/DatasetDOMStringMap.cpp:
        * dom/Document.cpp:
        * dom/DocumentEventQueue.cpp:
        * dom/DocumentMarkerController.cpp:
        * dom/DocumentOrderedMap.cpp:
        * dom/DocumentStyleSheetCollection.cpp:
        * dom/Element.cpp:
        * dom/ElementRareData.cpp:
        * dom/Event.cpp:
        * dom/EventContext.cpp:
        * dom/EventDispatcher.cpp:
        * dom/EventTarget.cpp:
        * dom/ExceptionBase.cpp:
        * dom/FocusEvent.cpp:
        * dom/InlineStyleSheetOwner.cpp:
        * dom/KeyboardEvent.cpp:
        * dom/LiveNodeList.cpp:
        * dom/MessageEvent.cpp:
        * dom/MessagePort.cpp:
        * dom/MouseRelatedEvent.cpp:
        * dom/MutationEvent.cpp:
        * dom/MutationObserver.cpp:
        * dom/MutationObserverInterestGroup.cpp:
        * dom/MutationObserverRegistration.cpp:
        * dom/MutationRecord.cpp:
        * dom/NameNodeList.cpp:
        * dom/NamedFlowCollection.cpp:
        * dom/NamedNodeMap.cpp:
        * dom/Node.cpp:
        * dom/NodeIterator.cpp:
        * dom/NodeTraversal.cpp:
        * dom/PositionIterator.cpp:
        * dom/ProcessingInstruction.cpp:
        * dom/Range.cpp:
        * dom/RegisteredEventListener.cpp:
        * dom/ScopedEventQueue.cpp:
        * dom/ScriptElement.cpp:
        * dom/ScriptRunner.cpp:
        * dom/SelectorQuery.cpp:
        * dom/ShadowRoot.cpp:
        * dom/StyledElement.cpp:
        * dom/TagNodeList.cpp:
        * dom/Text.cpp:
        * dom/TextEvent.cpp:
        * dom/TouchEvent.cpp:
        * dom/TreeScope.cpp:
        * dom/TreeScopeAdopter.cpp:
        * dom/TreeWalker.cpp:
        * dom/UIEvent.cpp:
        * dom/UserActionElementSet.cpp:
        * dom/UserTypingGestureIndicator.cpp:
        * dom/VisitedLinkState.cpp:
        * dom/WebKitNamedFlow.cpp:

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLAllCollection is always rooted at a Document.
        <https://webkit.org/b/123724>

        Tighten up HTMLAllCollection by making the constructor take a
        Document& instead of a ContainerNode&. Drive-by application of
        FINAL and PassRef also happened.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Make more CSSValue subclass constructors return PassRef.
        <https://webkit.org/b/123731>

        Make the constructor helpers for the following classes return
        PassRef instead of PassRefPtr:

            - CSSFontValue
            - CSSImageSetValue
            - CSSUnicodeRangeValue
            - WebKitCSSArrayFunctionValue
            - WebKitCSSFilterValue
            - WebKitCSSMatFunctionValue
            - WebKitCSSMixFunctionValue
            - WebKitCSSShaderValue
            - WebKitCSSTransformValue

        Reviewed by Antti Koivisto.

2013-11-04  Jozsef Berta  <jberta@inf.u-szeged.hu>

        Buildfix after r158182 for GCC 4.6
        https://bugs.webkit.org/show_bug.cgi?id=123442

        Reviewed by Csaba Osztrogonác.

        Added explicit "friend class", because  GCC 4.6 doesn't support extended friend declaration (c++11)

        * dom/ScopedEventQueue.h:

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLTableRowsCollection is always rooted at a HTMLTableElement.
        <https://webkit.org/b/123721>

        Tighten up HTMLTableRowsCollection by making the create() helper
        take a HTMLTableElement& and adding a HTMLSelectElement& getter.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        HTMLNameCollection and friends are always rooted at a Document.
        <https://webkit.org/b/123722>

        Tighten WindowNameCollection and DocumentNameCollection by making
        their constructors take a Document&, and add a slightly better
        document() than the one we inherit from LiveNodeListBase.

        Also marked the classes FINAL and made create() helpers return
        PassRef instead of PassRefPtr.

        Reviewed by Antti Koivisto.

2013-11-04  Andreas Kling  <akling@apple.com>

        Add an ancestor renderer iterator.
        <https://webkit.org/b/123718>

        Add ancestor iterators for renderers, analogous to element ancestor
        iterators. They walk the chain of parent renderers, stopping at each
        ancestor of a certain type.

        Just like child renderer iterators, this requires isRendererOfType()
        to be implemented for the targeted renderer class.

        You use them like this:

        auto frameSets = ancestorsOfType<RenderFrameSet>(*this);
        for (auto frameSet = frameSets.begin(), end = frameSets.end(); frameSet != end; ++frameSet)
            frameSet->thisOrThat();

        To complete the patch, I put them to use in a couple of random places.

        Reviewed by Antti Koivisto.

2013-11-04  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use auto keyword to clean-up for loops
        https://bugs.webkit.org/show_bug.cgi?id=123699

        Reviewed by Anders Carlsson.

        Start using auto keyword for loops.
        Also, since region breaks (forced breaks) can be added only on boxes,
        i changed RenderFlowThread::addForcedRegionBreak to use a RenderBox* instead of RenderObject*.

        No change in functionality, no new tests.

        * dom/WebKitNamedFlow.cpp:
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::ensureRenderFlowThreadWithName):
        (WebCore::FlowThreadController::styleDidChange):
        (WebCore::FlowThreadController::layoutRenderNamedFlowThreads):
        (WebCore::FlowThreadController::updateFlowThreadsChainIfNecessary):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingLayout):
        (WebCore::FlowThreadController::updateFlowThreadsNeedingTwoStepLayout):
        (WebCore::FlowThreadController::resetFlowThreadsWithAutoHeightRegions):
        (WebCore::FlowThreadController::updateFlowThreadsIntoConstrainedPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoOverflowPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoMeasureContentPhase):
        (WebCore::FlowThreadController::updateFlowThreadsIntoFinalPhase):
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        (WebCore::FlowThreadController::collectFixedPositionedLayers):
        (WebCore::FlowThreadController::isAutoLogicalHeightRegionsCountConsistent):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::validateRegions):
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant):
        (WebCore::RenderFlowThread::getLayerListForRegion):
        (WebCore::RenderFlowThread::updateLayerToRegionMappings):
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::computeLogicalHeight):
        (WebCore::RenderFlowThread::repaintRectangleInRegions):
        (WebCore::RenderFlowThread::removeRenderBoxRegionInfo):
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        (WebCore::RenderFlowThread::clearRenderObjectCustomStyle):
        (WebCore::RenderFlowThread::clearRenderBoxRegionInfoAndCustomStyle):
        (WebCore::RenderFlowThread::setRegionRangeForBox):
        (WebCore::RenderFlowThread::getRegionRangeForBox):
        (WebCore::RenderFlowThread::regionInRange):
        (WebCore::RenderFlowThread::checkRegionsWithStyling):
        (WebCore::RenderFlowThread::objectInFlowRegion):
        (WebCore::RenderFlowThread::isAutoLogicalHeightRegionsCountConsistent):
        (WebCore::RenderFlowThread::initializeRegionsComputedAutoHeight):
        (WebCore::RenderFlowThread::markAutoLogicalHeightRegionsForLayout):
        (WebCore::RenderFlowThread::markRegionsForOverflowLayoutIfNeeded):
        (WebCore::RenderFlowThread::updateRegionsFlowThreadPortionRect):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        (WebCore::RenderFlowThread::collectLayerFragments):
        (WebCore::RenderFlowThread::fragmentsBoundingBox):
        (WebCore::RenderFlowThread::addRegionsVisualEffectOverflow):
        (WebCore::RenderFlowThread::addRegionsVisualOverflowFromTheme):
        (WebCore::RenderFlowThread::addRegionsOverflowFromChild):
        (WebCore::RenderFlowThread::addRegionsLayoutOverflow):
        (WebCore::RenderFlowThread::clearRegionsOverflow):
        * rendering/RenderFlowThread.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::dependsOn):
        (WebCore::addRegionToList):
        (WebCore::RenderNamedFlowThread::computeOversetStateForRegions):
        (WebCore::RenderNamedFlowThread::checkInvalidRegions):
        (WebCore::RenderNamedFlowThread::pushDependencies):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):

2013-11-03  Zan Dobersek  <zdobersek@igalia.com>

        PingLoader objects unnecessarily pass through OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=122942

        Reviewed by Darin Adler.

        There's no need to store new PingLoader objects into an OwnPtr just to leak them out a few lines later
        into an unused variable. New objects are created through a new helper method and then left unmanaged as
        they're guaranteed to destroy themselves when they receive a response of any kind.

        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage): Call the new createPingLoader method to spawn the PingLoader.
        (WebCore::PingLoader::sendPing): Ditto.
        (WebCore::PingLoader::sendViolationReport): Ditto.
        (WebCore::PingLoader::createPingLoader): A helper method that creates a new PingLoader object
        * loader/PingLoader.h: Declare the new PingLoader::createPingLoader method.

2013-11-03  Andreas Kling  <akling@apple.com>

        HTMLOptionsCollection is always rooted at a HTMLSelectElement.
        <https://webkit.org/b/123719>

        Tighten up HTMLOptionsCollection by making the constructor take
        a HTMLSelectElement& and adding a HTMLSelectElement& getter instead
        of casting all over the place. Removed now-pointless assertions.

        Reviewed by Sam Weinig.

2013-11-03  Andreas Kling  <akling@apple.com>

        RenderTextFragment: Tighten first-letter logic.
        <https://webkit.org/b/123714>

        Reviewed by Antti Koivisto.

        * editing/TextIterator.cpp:
        (WebCore::firstRenderTextInFirstLetter):

            Use iterator helper to find first RenderText child.

        (WebCore::TextIterator::handleTextNodeFirstLetter):

            Tightening through type inference.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetterStyle):
        (WebCore::RenderBlock::createFirstLetterRenderer):
        * rendering/RenderTextFragment.h:

            The first letter renderer is always a RenderBoxModelObject,
            so make the code deal in that instead of RenderObject.

        * rendering/RenderChildIterator.h:
        (WebCore::RenderChildIteratorAdapter::first):
        (WebCore::RenderChildIteratorAdapter::last):

            Remove excess ampersands that were keeping this from building.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSPrimitiveValue identifier constructors should return PassRef.
        <https://webkit.org/b/123712>

        Make CSSPrimitiveValue::createIdentifier() and the corresponding
        CSSValuePool helper return PassRef<CSSPrimitiveValue>.

        Reviewed by Antti Koivisto.

2013-11-03  Andreas Kling  <akling@apple.com>

        Use RenderChildIterator in two more loops.
        <https://webkit.org/b/123713>

        Switch two more renderer child traversal loops to childrenOfType.

        Reviewed by Antti Koivisto.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSShadowValue constructor should return PassRef.
        <https://webkit.org/b/123711>

        Make CSSShadowValue::create() return a PassRef since it will never
        return null.

        Reviewed by Sam Weinig.

2013-11-03  Andreas Kling  <akling@apple.com>

        CSSLineBoxContainValue constructor should return PassRef.
        <https://webkit.org/b/123710>

        Make CSSLineBoxContainValue::create() return a PassRef since it
        will never return null.

        Reviewed by Sam Weinig.

2013-11-03  Antti Koivisto  <antti@apple.com>

        LiveNodeLists should have non-null ContainerNode as root
        https://bugs.webkit.org/show_bug.cgi?id=123709

        Reviewed by Andreas Kling.

        After moving ChildNodeList off from LiveNodeList the root is now always at least a ContainerNode.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getElementsByTagName):
        (WebCore::ContainerNode::getElementsByTagNameNS):
        (WebCore::ContainerNode::getElementsByName):
        (WebCore::ContainerNode::getElementsByClassName):
        (WebCore::ContainerNode::radioNodeList):
        
            Also these move from Node to ContainerNode to make tighter typing work.

2013-11-03  Antti Koivisto  <antti@apple.com>

        Switch createContextualFragment to element iterator
        https://bugs.webkit.org/show_bug.cgi?id=123704

        Reviewed by Andreas Kling.

        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        
            Use type helpers instead of hasTagName

        * editing/markup.cpp:
        (WebCore::collectElementsToRemoveFromFragment):
        (WebCore::removeElementFromFragmentPreservingChildren):
        (WebCore::createContextualFragment):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        
            Use type helpers instead of hasTagName

        * html/HTMLTagNames.in:
        
            Generate type helpers for <html>.

2013-11-03  Antti Koivisto  <antti@apple.com>

        ChildNodeList should not be LiveNodeList
        https://bugs.webkit.org/show_bug.cgi?id=123708

        Reviewed by Sam Weinig.

        ChildNodeList is a poor fit to be a LiveNodeList. It is heavily special-cased. It is also
        the only subtype that returns non-Elements thus preventing tightening.

        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::JSNodeListOwner::isReachableFromOpaqueRoots):
        
            Support new types.

        * dom/ChildNodeList.cpp:
        (WebCore::EmptyNodeList::~EmptyNodeList):
        (WebCore::ChildNodeList::ChildNodeList):
        (WebCore::ChildNodeList::~ChildNodeList):
        (WebCore::ChildNodeList::length):
        (WebCore::childFromFirst):
        (WebCore::childFromLast):
        (WebCore::ChildNodeList::nodeBeforeCached):
        (WebCore::ChildNodeList::nodeAfterCached):
        (WebCore::ChildNodeList::item):
        (WebCore::ChildNodeList::namedItem):
        (WebCore::ChildNodeList::invalidateCache):
        
            Implement the same caching optimizations as LiveNodeList with tighter, less generic code.

        * dom/ChildNodeList.h:
        
            Inherit ChildNodeList directly from NodeList.

            Add new EmptyNodeList type. This is only ever used if NodeList is requested for a non-container node.
            It allows tighter typing in ChildNodeList.

        * dom/LiveNodeList.cpp:
        (WebCore::LiveNodeList::namedItem):
        * dom/LiveNodeList.h:
        (WebCore::LiveNodeListBase::LiveNodeListBase):
        (WebCore::LiveNodeListBase::~LiveNodeListBase):
        (WebCore::LiveNodeList::LiveNodeList):
        
            Remove ChildNodeList specific code and branches.

        * dom/Node.cpp:
        (WebCore::Node::childNodes):
        
            Return EmptyNodeList for non-containers.

        * dom/NodeList.h:
        (WebCore::NodeList::~NodeList):
        (WebCore::NodeList::isLiveNodeList):
        (WebCore::NodeList::isChildNodeList):
        (WebCore::NodeList::isEmptyNodeList):
        
            For isReachableFromOpaqueRoots.

        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::ensureChildNodeList):
        (WebCore::NodeListsNodeData::removeChildNodeList):
        (WebCore::NodeListsNodeData::ensureEmptyChildNodeList):
        (WebCore::NodeListsNodeData::removeEmptyChildNodeList):
        (WebCore::NodeListsNodeData::NodeListsNodeData):
        (WebCore::NodeListsNodeData::deleteThisAndUpdateNodeRareDataIfAboutToRemoveLastList):
        
            EmptyNodeList support.

        * html/CollectionType.h:
        * html/HTMLCollection.cpp:
        (WebCore::shouldOnlyIncludeDirectChildren):
        (WebCore::rootTypeFromCollectionType):
        (WebCore::invalidationTypeExcludingIdAndNameAttributes):
        (WebCore::isMatchingElement):
        (WebCore::LiveNodeListBase::itemBefore):
        (WebCore::LiveNodeListBase::traverseLiveNodeListFirstElement):
        (WebCore::LiveNodeListBase::traverseLiveNodeListForwardToOffset):
        (WebCore::LiveNodeListBase::item):
        (WebCore::LiveNodeListBase::itemBeforeOrAfterCachedItem):
        
            Remove ChildNodeList specific code and branches.

2013-11-03  Patrick Gansterer  <paroga@webkit.org>

        [WINCE] Replace OwnPtr with GDIObject
        https://bugs.webkit.org/show_bug.cgi?id=123670

        Reviewed by Anders Carlsson.

        * page/win/FrameGdiWin.cpp:
        (WebCore::imageFromRect):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontData::create):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::getScaledFontHandle):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        (WebCore::createBrush):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawRoundCorner):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/wince/SharedBitmap.cpp:
        (WebCore::SharedBitmap::createHandle):
        (WebCore::SharedBitmap::draw):
        (WebCore::SharedBitmap::clipBitmap):
        (WebCore::drawPatternSimple):
        (WebCore::SharedBitmap::drawPattern):
        (WebCore::SharedBitmap::DCProvider::getDC):
        * platform/graphics/wince/SharedBitmap.h:

2013-11-03  Antti Koivisto  <antti@apple.com>

        Add helpers for partial descendant traversal to element iterators
        https://bugs.webkit.org/show_bug.cgi?id=123703

        Reviewed by Andreas Kling.

        * dom/ElementAncestorIterator.h:
        (WebCore::lineageOfType):
        
            lineageOfType definition didn't match the declaration.

        * dom/ElementDescendantIterator.h:
        (WebCore::::find):
        (WebCore::::from):
        
            Add find and from for getting begin iterator for partial traversals.

        * editing/FrameSelection.cpp:
        (WebCore::scanForForm):
        (WebCore::FrameSelection::currentForm):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::formElementIndex):
        (WebCore::HTMLFormElement::findClosestFormAncestor):
        
            Use them in a few places.

2013-11-03  Andreas Kling  <akling@apple.com>

        Inline RenderStyle functions for getting/setting pseudo style bits.
        <https://webkit.org/b/123702>

        hasPseudoStyle() actually shows up on html5-full-render.html,
        and it's pretty crazy to eat the cost of a function call just
        to do some basic bit twiddling.

        Reviewed by Antti Koivisto.

2013-11-03  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Remove HTMLMediaElement.initialTime
        https://bugs.webkit.org/show_bug.cgi?id=123572

        Reviewed by Eric Carlson.

        Patch based on one by: philipj@opera.com
        Blink review URL: https://codereview.chromium.org/35033002

        initialTime has been removed from the HTMLMediaElement.

        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_get_initial_time):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Added phony function.
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Removed HTMLMediaElement::initialTime.

2013-11-02  Alexey Proskuryakov  <ap@apple.com>

        Implement generateKey for HMAC and AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123669

        Reviewed by Dan Bernstein.

        Tests: crypto/subtle/aes-cbc-generate-key.html
               crypto/subtle/hmac-generate-key.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::createAesKeyGenParams): Added bindings for AesKeyGenParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForGenerateKey): Handle
        algorithms that generate AES and HMAC keys.

        * bindings/js/JSSubtleCryptoCustom.cpp: (WebCore::JSSubtleCrypto::generateKey): Added.

        * crypto/CryptoAlgorithmAesKeyGenParams.h: Added.

        * crypto/CryptoKey.cpp: (WebCore::CryptoKey::randomData):
        * crypto/CryptoKey.h:
        * crypto/CryptoKeyMac.cpp: Added
        Expose a function that produces random data for symmetric crypto keys. Cross-platform
        implementation uses ARC4 code from WTF, while Mac uses a system function that
        provides a FIPS validated random number generator.

        * crypto/CryptoKeyAES.cpp: (WebCore::CryptoKeyAES::generate):
        * crypto/CryptoKeyAES.h:
        Added a function that creates AES keys.

        * crypto/SubtleCrypto.idl: Added generateKey.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp:
        (WebCore::CryptoAlgorithmAES_CBC::generateKey): Added.

        * crypto/algorithms/CryptoAlgorithmHMAC.cpp:
        (WebCore::CryptoAlgorithmHMAC::generateKey): Added.

        * crypto/keys/CryptoKeyHMAC.cpp: (WebCore::CryptoKeyHMAC::generate):
        * crypto/keys/CryptoKeyHMAC.h:
        Added a function that creates HMAC keys.

        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Removed generateKey stub, the implementation
        ended up in cross-platform file.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Ditto.

2013-11-02  Christophe Dumez  <ch.dumez@samsung.com>

        EnforceRange doesn't enforce range of a short
        https://bugs.webkit.org/show_bug.cgi?id=123661

        Reviewed by Alexey Proskuryakov.

        Handle Web IDL short / unsigned short types as per the
        specification:
        - http://www.w3.org/TR/WebIDL/#es-short
        - http://www.w3.org/TR/WebIDL/#es-unsigned-short

        Specifically, we used to treat short / unsigned short as 32bit
        integers, which was wrong. We now properly handle them as 16bit
        integers.

        No new tests, added test cases to js/dom/webidl-type-mapping.html.

        * WebCore.exp.in:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::toSmallerInt):
        (WebCore::toSmallerUInt):
        (WebCore::toInt8):
        (WebCore::toUInt8):
        (WebCore::toInt16):
        (WebCore::toUInt16):
        * bindings/js/JSDOMBinding.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (JSValueToNative):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::setJSTestObjShortAttr):
        (WebCore::setJSTestObjUnsignedShortAttr):
        * testing/TypeConversions.h:
        (WebCore::TypeConversions::testShort):
        (WebCore::TypeConversions::setTestShort):
        (WebCore::TypeConversions::testEnforceRangeShort):
        (WebCore::TypeConversions::setTestEnforceRangeShort):
        (WebCore::TypeConversions::testUnsignedShort):
        (WebCore::TypeConversions::setTestUnsignedShort):
        (WebCore::TypeConversions::testEnforceRangeUnsignedShort):
        (WebCore::TypeConversions::setTestEnforceRangeUnsignedShort):
        * testing/TypeConversions.idl:

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Cleanup OpenTypeUtilities
        https://bugs.webkit.org/show_bug.cgi?id=123686

        Reviewed by Darin Adler.

        Merge the WinCE specific code into the general Windows code to
        make the compilation of WinCE port on WinNT easier.

        * platform/graphics/opentype/OpenTypeUtilities.cpp:
        (WebCore::renameFont):
        (WebCore::renameAndActivateFont):
        * platform/graphics/opentype/OpenTypeUtilities.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSFontFaceSrcValue constructors should return PassRef.
        <https://webkit.org/b/123692>

        Make functions that return non-null CSSFontFaceSrcValues return
        PassRef instead of PassRefPtr. Tweak some call sites to be
        slightly more efficient.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSStyleSheet::contents() should return a reference.
        <https://webkit.org/b/123689>

        Make CSSStyleSheet::contents() return a StyleSheetContents& instead
        of a pointer. The object was already stored in a Ref.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSReflectValue constructor should return PassRef.
        <https://webkit.org/b/123963>

        Make CSSReflectValue::create() return a PassRef. Tweak one call
        site to be slightly more efficient.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSFontFeatureValue constructor should return PassRef.
        <https://webkit.org/b/123691>

        Make CSSFontFeatureValue::create() return PassRef, since it never
        returns null. Tweak one call site to be slightly more efficient.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGResources::buildCachedResources().
        <https://webkit.org/b/123690>

        Make this function take a RenderElement&/SVGRenderStyle& pair instead
        of a RenderObject*/SVGRenderStyle* pair. Also tweaked the code a bit,
        removing ampersands and asserts as appropriate.

        Reviewed by Anders Carlsson.

2013-11-02  Andreas Kling  <akling@apple.com>

        CSSImageValue constructors should return PassRef.
        <https://webkit.org/b/123688>

        Make the CSSImageValue::create() helpers return PassRef.
        Tightened call sites to avoid null checks and destructor calls.

        Reviewed by Anders Carlsson.

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Fix compilation of SynchronousLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=123676

        Reviewed by Darin Adler.

        Assign a ResourceRequest varibale an empty ResourceRequest instead of 0.
        The current solution only works for ports which can create a
        ResourceRequest from a pointer, which might not be true for all ports.

        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::willSendRequest):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Port LoggingWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=123678

        Reviewed by Darin Adler.

        This makes it easier to use a common list of files
        for the different Windows ports later.

        * PlatformWin.cmake:
        * platform/win/LoggingWin.cpp:
        (WebCore::logLevelString):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Fix UnicodeWchar after r157330.
        https://bugs.webkit.org/show_bug.cgi?id=123668

        Reviewed by Darin Adler.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::generateComponents):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawText):
        * platform/text/wchar/TextBreakIteratorWchar.cpp:
        (WebCore::isCharStop):
        (WebCore::isLineStop):
        (WebCore::isSentenceStop):
        (WebCore::WordBreakIterator::next):
        (WebCore::WordBreakIterator::previous):

2013-11-02  Andreas Kling  <akling@apple.com>

        Use RenderChildIterator in a couple of places.
        <https://webkit.org/b/123684>

        Added isRendererOfType() for RenderBox and RenderBlock and switch
        some loops over to using childrenOfType<>. Also sprinkled const
        and references on touched code.

        Reviewed by Antti Koivisto.

2013-11-02  Zan Dobersek  <zdobersek@igalia.com>

        Manage FileReaderLoader through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123666

        Reviewed by Anders Carlsson.

        Construct FileReaderLoader objects through std::make_unique and store them in std::unique_ptr.

        * fileapi/FileReader.cpp:
        (WebCore::FileReader::readInternal):
        * fileapi/FileReader.h:

2013-11-02  Andreas Kling  <akling@apple.com>

        Add a child renderer iterator.
        <https://webkit.org/b/123662>

        Introduce an ElementIterator-style iterator for renderers and put
        it to use in a childrenOfType() implementation.

        It's used just like the Element iterators:

        auto sections = childrenOfType<RenderTableSection>(*this);
        for (auto section = sections.begin(), section = sections.end(); section != sections.end(); ++section)
            section->thisOrThat();

        Just like the DOM counterpart, it relies on a templatized helper:

            bool isRendererOfType<T>(const RenderObject&)

        This patch puts the iterator to use in a couple of random places.

        Reviewed by Antti Koivisto.

2013-11-02  Alexey Proskuryakov  <ap@apple.com>

        Implement remaining SHA variations for WebCrypto
        https://bugs.webkit.org/show_bug.cgi?id=123659

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/sha-224.html
               crypto/subtle/sha-256.html
               crypto/subtle/sha-384.html
               crypto/subtle/sha-512.html

        * WebCore.xcodeproj/project.pbxproj:
        * crypto/algorithms/CryptoAlgorithmSHA224.cpp: Added.
        (WebCore::CryptoAlgorithmSHA224::CryptoAlgorithmSHA224):
        (WebCore::CryptoAlgorithmSHA224::~CryptoAlgorithmSHA224):
        (WebCore::CryptoAlgorithmSHA224::create):
        (WebCore::CryptoAlgorithmSHA224::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA224.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA256.cpp: Added.
        (WebCore::CryptoAlgorithmSHA256::CryptoAlgorithmSHA256):
        (WebCore::CryptoAlgorithmSHA256::~CryptoAlgorithmSHA256):
        (WebCore::CryptoAlgorithmSHA256::create):
        (WebCore::CryptoAlgorithmSHA256::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA256.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA384.cpp: Added.
        (WebCore::CryptoAlgorithmSHA384::CryptoAlgorithmSHA384):
        (WebCore::CryptoAlgorithmSHA384::~CryptoAlgorithmSHA384):
        (WebCore::CryptoAlgorithmSHA384::create):
        (WebCore::CryptoAlgorithmSHA384::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA384.h: Added.
        * crypto/algorithms/CryptoAlgorithmSHA512.cpp: Added.
        (WebCore::CryptoAlgorithmSHA512::CryptoAlgorithmSHA512):
        (WebCore::CryptoAlgorithmSHA512::~CryptoAlgorithmSHA512):
        (WebCore::CryptoAlgorithmSHA512::create):
        (WebCore::CryptoAlgorithmSHA512::identifier):
        * crypto/algorithms/CryptoAlgorithmSHA512.h: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):
        * crypto/mac/CryptoAlgorithmSHA224Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA224::digest):
        * crypto/mac/CryptoAlgorithmSHA256Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA256::digest):
        * crypto/mac/CryptoAlgorithmSHA384Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA384::digest):
        * crypto/mac/CryptoAlgorithmSHA512Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA512::digest):

2013-11-02  Patrick Gansterer  <paroga@webkit.org>

        Various small WinCE build fixes

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::append):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/wince/PlatformPathWinCE.h:
        * platform/win/PopupMenuWin.h:
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):

2013-11-01  Alexey Proskuryakov  <ap@apple.com>

        Add WebCrypto AES-CBC
        https://bugs.webkit.org/show_bug.cgi?id=123647

        Reviewed by Anders Carlsson.

        Tests: crypto/subtle/aes-cbc-192-encrypt-decrypt.html
               crypto/subtle/aes-cbc-256-encrypt-decrypt.html
               crypto/subtle/aes-cbc-encrypt-decrypt-with-padding.html
               crypto/subtle/aes-cbc-encrypt-decrypt.html
               crypto/subtle/aes-cbc-invalid-length.html
               crypto/subtle/aes-cbc-wrong-key-class.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * bindings/js/JSCryptoAlgorithmDictionary.cpp:
        (WebCore::getProperty): Factored out a function to get a property as JSValue.
        (WebCore::getHashAlgorithm): Use it.
        (WebCore::createAesCbcParams): Added converter for AesCbcParams.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForEncrypt): Support AES_CBC.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDecrypt): Ditto.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey): Support all
        algorithms, all the new ones just have trivial dictionaries.
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForExportKey): Ditto.

        * bindings/js/JSCryptoOperationData.cpp: Added.
        (WebCore::sequenceOfCryptoOperationDataFromJSValue):
        (WebCore::cryptoOperationDataFromJSValue):
        * bindings/js/JSCryptoOperationData.h: Added.
        Moved CryptoOperationData bindings out of JSSubtleCryptoCustom.cpp, so that we
        could use them in JSCryptoAlgorithmDictionary.cpp.

        * bindings/js/JSDOMPromise.h: (WebCore::PromiseWrapper::reject): Added a specialization
        to reject with null result. The spec doesn't actually say how algorithms fail.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::JSSubtleCrypto::encrypt): Added.
        (WebCore::JSSubtleCrypto::decrypt): Ditto.
        (WebCore::JSSubtleCrypto::sign): Style fix.

        * crypto/CryptoAlgorithmAesCbcParams.h: Added.

        * crypto/CryptoKey.h:
        (WebCore::CryptoKeyClass):
        * crypto/keys/CryptoKeyHMAC.h:
        (WebCore::asCryptoKeyHMAC):
        Added poor man's RTTI, so that we can safely upcast Keys passed fro JavaScript code.

        * crypto/CryptoKeyAES.cpp: Added.
        (WebCore::CryptoKeyAES::CryptoKeyAES):
        (WebCore::CryptoKeyAES::~CryptoKeyAES):
        (WebCore::CryptoKeyAES::buildAlgorithmDescription):
        * crypto/CryptoKeyAES.h: Added.
        (WebCore::asCryptoKeyAES):
        AES keys are the same for all algorithms, but they still need to remember the algorithm.

        * crypto/SubtleCrypto.idl: Added encrypt/decrypt.

        * crypto/algorithms/CryptoAlgorithmAES_CBC.cpp: Added.
        (WebCore::CryptoAlgorithmAES_CBC::CryptoAlgorithmAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::~CryptoAlgorithmAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::create):
        (WebCore::CryptoAlgorithmAES_CBC::identifier):
        (WebCore::CryptoAlgorithmAES_CBC::importKey):
        (WebCore::CryptoAlgorithmAES_CBC::exportKey):
        * crypto/algorithms/CryptoAlgorithmAES_CBC.h: Added.
        * crypto/mac/CryptoAlgorithmAES_CBCMac.cpp: Added.
        (WebCore::transformAES_CBC):
        (WebCore::CryptoAlgorithmAES_CBC::encrypt):
        (WebCore::CryptoAlgorithmAES_CBC::decrypt):
        (WebCore::CryptoAlgorithmAES_CBC::generateKey):
        Added.

        * crypto/mac/CryptoAlgorithmHMACMac.cpp:
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        Check key class before casting it to CryptoKeyHMAC.

        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register AES-CBC
        on Mac, so that it can be used.

2013-11-01  Andreas Kling  <akling@apple.com>

        SVGRenderStyle accessors should return references.
        <https://webkit.org/b/123656>

        RenderStyle::svgStyle() and accessSVGStyle() never return null,
        so make them return references instead.
        
        This flushed out a myriad of pointless null checks and assertions.

        Reviewed by Anders Carlsson.

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing MediaStreamTrackVector and MediaStreamSourceVector typedefs
        https://bugs.webkit.org/show_bug.cgi?id=123648

        Reviewed by Eric Carlson.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create):
        (WebCore::MediaStream::clone):
        (WebCore::MediaStream::cloneMediaStreamTrackVector):
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::getTrackById):
        (WebCore::MediaStream::trackVectorForType):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createMediaStreamSource):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::create):
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):
        * platform/mediastream/MediaStreamDescriptor.h:
        * platform/mediastream/MediaStreamSource.h:

2013-11-01  Andreas Kling  <akling@apple.com>

        createFontFaceValue() should be smarter about overgrown cache.
        <https://webkit.org/b/123643>

        Instead of clearing the whole font-face value cache when it passes
        128 entries, just delete one entry at random.

        Reviewed by Geoffrey Garen.

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing mac code to use new MediaStreamDescriptor create method
        https://bugs.webkit.org/show_bug.cgi?id=123653

        Reviewed by Eric Carlson.

        No new tests needed.

        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::createMediaStream):

2013-11-01  Andreas Kling  <akling@apple.com>

        Re-use existing RenderStyle local in textWidth().
        <https://webkit.org/b/123392>

        We already have the RenderStyle cached in a local here, so avoid
        getting it from RenderText since that has to go via the parent.

        Reviewed by Antti Koivisto.

2013-11-01  Andreas Kling  <akling@apple.com>

        Neuter WTF_MAKE_FAST_ALLOCATED in GLOBAL_FASTMALLOC_NEW builds.
        <https://webkit.org/b/123639>

        WebCore::TimerBase really needed to have the new/delete operators
        overridden, in order for WebCore::SuspendableTimer to be able to
        choose that "operator new" out of the two it inherits.

        Reviewed by Anders Carlsson.

2013-11-01  Andreas Kling  <akling@apple.com>

        CSSCanvasValue construction helper should return PassRef.
        <https://webkit.org/b/123650>

        Return PassRef instead of PassRefPtr from functions that return
        ownership-passing pointers that are known to be non-null.

        Reviewed by Anders Carlsson.

2013-11-01  Joseph Pecoraro  <pecoraro@apple.com>

        Move CF/Mac WTF String implementations down into WTF
        https://bugs.webkit.org/show_bug.cgi?id=123635

        Reviewed by Sam Weinig.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing unnecessary early returns in addTrack, removeTrack and removeRemoteSource methods
        https://bugs.webkit.org/show_bug.cgi?id=123644

        Reviewed by Eric Carlson.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::removeRemoteSource):
        (WebCore::MediaStream::trackVectorForType):
        * Modules/mediastream/MediaStream.h:

2013-11-01  Andreas Kling  <akling@apple.com>

        CSSAspectRatioValue construction helper should return PassRef.
        <https://webkit.org/b/123645>

        Return PassRef instead of PassRefPtr from functions that return
        ownership-passing pointers that are known to be non-null.

        Reviewed by Darin Adler.

2013-11-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Initial implementation of text-decoration-skip ink
        https://bugs.webkit.org/show_bug.cgi?id=121806

        Reviewed by Darin Adler.

        text-decoration-skip: ink is implemented by the following steps:
        1. Before drawing any decorations, figure out the bounding box for the decorations that will be drawn
        2. Create an ImageBuffer with these dimensions
        3. Draw text into this ImageBuffer with a thicker stroke
        4. Apply the ImageBuffer as a mask to the context
        5. Draw decorations like normal
        6. Clean up

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-ink.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText): Don't call GraphicsContext::roundToDevicePixels
        when painting is disabled
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Pass the TextPainter to paintDecoration
        (WebCore::computeUnderlineOffset): Small cleanup
        (WebCore::getWavyStrokeControlPointDistance): Pulling out of strokeWavyTextDecoration()
        (WebCore::getWavyStrokeStep): Ditto
        (WebCore::strokeWavyTextDecoration): Use the previous 2 functions
        (WebCore::getSingleDecorationBoundingBox): Pulling out repeated code into a function
        (WebCore::getDecorationBoundingBox): Compute the bounding box for an underline which
        hasn't been drawn yet
        (WebCore::InlineTextBox::paintDecoration): Construct a mask and apply it to the GraphicsContext
        * rendering/InlineTextBox.h: paintDecoration needs the TextPainter
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline): Redraw the underline when
        text-decoration-skip changes

2013-11-01  Andreas Kling  <akling@apple.com>

        CSS 'initial' and 'inherit' value constructors should return PassRef.
        <https://webkit.org/b/123641>

        Make the helpers involved in constructing CSS{Initial,Inherited}Value
        all return PassRef instead of PassRefPtr. This avoids generating
        pointless null checks at the call sites.

        Reviewed by Darin Adler.

2013-11-01  Andreas Kling  <akling@apple.com>

        Kill RenderArena.
        <https://webkit.org/b/123634>

        There are no remaining users of the RenderArena allocator.

        Reviewed by Geoffrey Garen.

2013-11-01  James Craig  <jcraig@apple.com>

        AX: Regression: media controls are no longer accessible
        https://bugs.webkit.org/show_bug.cgi?id=121990

        Reviewed by Jer Noble.

        Updated existing test coverage.
        Added ARIA roles, attrs, and labels to the new media controls shadow DOM.
        Localization will be handled in http://webkit.org/b/120956

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.UIString):
        (Controller.prototype.createControls):
        (Controller.prototype.handleLoadStart):
        (Controller.prototype.handleError):
        (Controller.prototype.handleAbort):
        (Controller.prototype.handleSuspend):
        (Controller.prototype.handleStalled):
        (Controller.prototype.handleWaiting):
        (Controller.prototype.handleFullscreenChange):
        (Controller.prototype.handleMuteButtonClicked):
        (Controller.prototype.handleMinButtonClicked):
        (Controller.prototype.handleMaxButtonClicked):
        (Controller.prototype.handleVolumeSliderChange):
        (Controller.prototype.updatePlaying):

2013-11-01  Andreas Kling  <akling@apple.com>

        Take BidiRuns out of the arena.
        <https://webkit.org/b/123630>

        Stop arena-allocating BidiRun objects and use regular new/delete.

        With this, there are no remaining clients of RenderArena.
        It will be removed in a subsequent patch.

        Reviewed by Anders Carlsson.

2013-11-01  Afonso R. Costa Jr.  <afonso.costa@samsung.com>

        Expose setApplicationCacheOriginQuota via window.internals
        https://bugs.webkit.org/show_bug.cgi?id=87838

        Reviewed by Joseph Pecoraro.

        Also reset the default origin quota in resetToConsistentState().

        * testing/Internals.cpp: Add setApplicationCacheOriginQuota.
        (WebCore::Internals::resetToConsistentState): Reset the default origin
        quota.
        (WebCore::Internals::setApplicationCacheOriginQuota): Added.
        * testing/Internals.h: Add setApplicationCacheOriginQuota.
        * testing/Internals.idl: Ditto.

2013-11-01  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Explicitly initialize RefCounted base class in MediaStreamTrack's constructors
        https://bugs.webkit.org/show_bug.cgi?id=123620

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):

2013-11-01  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding addRemoteTrack and removeRemoteTrack functions to MediaStreamDescriptor and MediaStream
        https://bugs.webkit.org/show_bug.cgi?id=123477

        Reviewed by Eric Carlson.

        When the backend report that a remote track has been added or removed by a remote peer, we must be able to add
        it to its MediaStream

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack): Splitted in two parts that can be used by old addTrack and new addRemoteTrack.
        (WebCore::MediaStream::removeTrack): Splitted in two parts that can be used by old removeTrack and new
        removeRemoteTrack.
        (WebCore::MediaStream::addRemoteSource): Reusing code in new addTrack method.
        (WebCore::MediaStream::removeRemoteSource): Refactored.
        (WebCore::MediaStream::addRemoteTrack): Added.
        (WebCore::MediaStream::removeRemoteTrack): Added.
        (WebCore::MediaStream::getTrackVectorForType): Helper method that returns a vector of tracks according to
        track's type (Audio or Video).

        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack):
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addRemoteTrack): Added.
        (WebCore::MediaStreamDescriptor::removeRemoteTrack): Added.
        * platform/mediastream/MediaStreamDescriptor.h:

2013-11-01  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Support audio and video tracks
        https://bugs.webkit.org/show_bug.cgi?id=117039

        Reviewed by Philippe Normand.

        Tests: media/track/audio/audio-track-mkv-vorbis-addtrack.html
               media/track/audio/audio-track-mkv-vorbis-enabled.html
               media/track/audio/audio-track-mkv-vorbis-language.html
               media/track/in-band/track-in-band-kate-ogg-addtrack.html
               media/track/in-band/track-in-band-srt-mkv-addtrack.html
               media/track/video/video-track-mkv-theora-addtrack.html
               media/track/video/video-track-mkv-theora-language.html
               media/track/video/video-track-mkv-theora-selected.html

        * GNUmakefile.list.am: Add audio and video track files.
        * PlatformEfl.cmake: Same.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::audioTrackEnabledChanged): Schedule "change" event.
        (WebCore::HTMLMediaElement::videoTrackSelectedChanged): Same.
        * html/track/AudioTrack.cpp:
        (WebCore::AudioTrack::setEnabled): Call m_private->setEnabled
        (WebCore::AudioTrack::enabledChanged): Added callback.
        (WebCore::AudioTrack::labelChanged): Same.
        (WebCore::AudioTrack::languageChanged): Same.
        (WebCore::AudioTrack::willRemoveAudioTrackPrivate): Use ASSERT_UNUSED for consistence.
        * html/track/AudioTrack.h: Add new enabled, label and language callbacks.
        * html/track/VideoTrack.cpp:
        (WebCore::VideoTrack::setSelected): Call m_private->setEnabled
        (WebCore::VideoTrack::selectedChanged): Added callback.
        (WebCore::VideoTrack::labelChanged): Same.
        (WebCore::VideoTrack::languageChanged): Same.
        (WebCore::VideoTrack::willRemoveVideoTrackPrivate): Use ASSERT_UNUSED for consistence.
        * html/track/VideoTrack.h: Add new selected, label and language callbacks.
        * platform/graphics/AudioTrackPrivate.h:
        (WebCore::AudioTrackPrivate::setEnabled): Call m_client->enabledChanged
        * platform/graphics/VideoTrackPrivate.h:
        (WebCore::VideoTrackPrivate::setSelected): Call m_client->selectedChanged
        * platform/graphics/gstreamer/InbandTextTrackPrivateGStreamer.cpp:
        (WebCore::InbandTextTrackPrivateGStreamer::InbandTextTrackPrivateGStreamer): Add ASSERT(m_pad)
        (WebCore::InbandTextTrackPrivateGStreamer::notifyTrackOfTagsChanged): Look at all tag events instead of just the first one.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVideoSinkCapsChangedCallback): Separated callback when caps change from callback when number of videos change.
        (WebCore::mediaPlayerPrivateVideoCapsChangeTimeoutCallback): Same.
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer): Initialize m_videoCapsTimerHandler.
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer): Disconnect audio and video tracks and remove callbacks.
        (WebCore::MediaPlayerPrivateGStreamer::videoCapsChanged): Separated callback when caps change from callback when number of videos change.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideo): Create video tracks for each stream.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideoCaps): Separated callback when caps change from callback when number of videos change.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudio): Create audio tracks for each stream.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Add audio and video tracks, and a pointer to keep track of the default audio stream.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.cpp: Added.
        * platform/graphics/gstreamer/AudioTrackPrivateGStreamer.h: Added.
        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Add GRefPtr<GstTagList>
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.cpp: Added, handles tags and "active" property of audio and video tracks.
        * platform/graphics/gstreamer/TrackPrivateBaseGStreamer.h: Added.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.cpp: Added.
        * platform/graphics/gstreamer/VideoTrackPrivateGStreamer.h: Added.

2013-11-01  Patrick Gansterer  <paroga@webkit.org>

        Buildfix for !ENABLE(INSPECTOR) after 157288.

        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchEvent):

2013-11-01  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Avoid explicit traversal of text controls and the render tree in AtkText implementation
        https://bugs.webkit.org/show_bug.cgi?id=123153

        Reviewed by Chris Fleizach.

        Remove functions from the AtkText implementation that manually
        walk the render tree to compose the text for a exposed objects in
        certain cases (e.g. anonymous blocks, text controls).

        The reason for this change is that the current implementation
        follows an error-prone approach, since by doing things like
        manually walking the render tree from here we are not properly
        considering all the possible scenarios that might happen when
        traversing text. This, however, is a task that is better suited
        for the TextIterator, which is already written to consider all
        those cases and to emit the proper character in every single
        situation: text nodes, replaced objects and so on.

        So, by removing all that too specific code (textForObject() and
        textForRenderer() mainly) from WebKitAccessibleInterfaceText.cpp
        and relying in AccessibilityObject::textUnderElement(), which it
        ends up using the TextIterator for certain cases, we have a much
        better and robust method of retrieving the text associated with an
        instance of AtkObject implementing the AtkText interface.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (webkitAccessibleTextGetText): Removed call to textForObject(), now that
        we have just removed that function, together with textForRenderer().

        Make AccessibilityRenderObject::textUnderElement() able to deal with
        anonymous blocks directly, by creating a range based in the boundaries
        defined by the first and last child renderers for that block. This will
        make possible to treat an anonymous block as a whole instead of having
        to rely in the concatenation of each of its children, as it does now.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement): Added a new code
        path to deal with anonymous blocks for text renderers, or when including
        all the children is explicitly requested.

        Modified TextIterator so text for children of replaced objects are
        ignored if we are emmiting the special character for those objects.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement): Make sure no children are
        handled a replaced object if m_emitsObjectReplacementCharacters is set.
        * editing/TextIterator.h: Updated m_emitsObjectReplacementCharacters
        description to reflect the new behavior.

2013-11-01  Alexey Proskuryakov  <ap@apple.com>

        Add a Mac WebCrypto implementation of HMAC importKey/sign/verify
        https://bugs.webkit.org/show_bug.cgi?id=123598

        Reviewed by Anders Carlsson.

        Test: crypto/subtle/hmac-sign-verify.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSSubtleCryptoCustom.cpp: Added property svn:eol-style.
        (WebCore::createAlgorithmFromJSValue):
        (WebCore::cryptoOperationDataFromJSValue):
        (WebCore::cryptoKeyFormatFromJSValue):
        (WebCore::cryptoKeyUsagesFromJSValue):
        (WebCore::JSSubtleCrypto::sign):
        (WebCore::JSSubtleCrypto::verify):
        (WebCore::JSSubtleCrypto::digest):
        (WebCore::JSSubtleCrypto::importKey):
        * crypto/SubtleCrypto.idl:
        * crypto/algorithms/CryptoAlgorithmHMAC.cpp: Added.
        (WebCore::CryptoAlgorithmHMAC::CryptoAlgorithmHMAC):
        (WebCore::CryptoAlgorithmHMAC::~CryptoAlgorithmHMAC):
        (WebCore::CryptoAlgorithmHMAC::create):
        (WebCore::CryptoAlgorithmHMAC::identifier):
        (WebCore::CryptoAlgorithmHMAC::importKey):
        (WebCore::CryptoAlgorithmHMAC::exportKey):
        * crypto/algorithms/CryptoAlgorithmHMAC.h: Added.
        * crypto/keys: Added.
        * crypto/keys/CryptoKeyHMAC.cpp: Added.
        (WebCore::CryptoKeyHMAC::CryptoKeyHMAC):
        (WebCore::CryptoKeyHMAC::~CryptoKeyHMAC):
        (WebCore::CryptoKeyHMAC::buildAlgorithmDescription):
        * crypto/keys/CryptoKeyHMAC.h: Added.
        * crypto/mac/CryptoAlgorithmHMACMac.cpp: Added.
        (WebCore::getCommonCryptoAlgorithm):
        (WebCore::calculateSignature):
        (WebCore::CryptoAlgorithmHMAC::sign):
        (WebCore::CryptoAlgorithmHMAC::verify):
        (WebCore::CryptoAlgorithmHMAC::generateKey):
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clean up a few Inspector interfaces
        https://bugs.webkit.org/show_bug.cgi?id=123594

        Reviewed by Timothy Hatcher.

        * WebCore.exp.in:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgentInterface::name):
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        (WebCore::InspectorConsoleAgent::enabled):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::profilerEnabled):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        (WebCore::InspectorDebuggerAgent::enabled):
        * inspector/InspectorRuntimeAgent.h:
        (WebCore::InspectorRuntimeAgent::enabled):

2013-10-31  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Vend layer contents via IOSurfaces
        https://bugs.webkit.org/show_bug.cgi?id=123600

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export sRGBColorSpaceRef.

        * WebCore.xcodeproj/project.pbxproj:
        Expose GraphicsContextCG.h.

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Remove unused Page::setDebuggerForAllPages
        https://bugs.webkit.org/show_bug.cgi?id=123602

        Reviewed by Timothy Hatcher.

        * page/Page.cpp:
        * page/Page.h:

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorState
        https://bugs.webkit.org/show_bug.cgi?id=123547

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        * inspector/InspectorAgent.h:
        (WebCore::InspectorAgent::create):
        * inspector/InspectorAllInOne.cpp:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        (WebCore::InspectorApplicationCacheAgent::create):
        * inspector/InspectorBaseAgent.cpp:
        (WebCore::InspectorBaseAgentInterface::InspectorBaseAgentInterface):
        * inspector/InspectorBaseAgent.h:
        (WebCore::InspectorBaseAgent::InspectorBaseAgent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        * inspector/InspectorCSSAgent.h:
        (WebCore::InspectorCSSAgent::create):
        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::InspectorCanvasAgent):
        * inspector/InspectorCanvasAgent.h:
        (WebCore::InspectorCanvasAgent::create):
        * inspector/InspectorClient.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::create):
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        * inspector/InspectorDOMStorageAgent.h:
        (WebCore::InspectorDOMStorageAgent::create):
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::InspectorDatabaseAgent):
        * inspector/InspectorDatabaseAgent.h:
        (WebCore::InspectorDatabaseAgent::create):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::create):
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::InspectorIndexedDBAgent):
        * inspector/InspectorIndexedDBAgent.h:
        (WebCore::InspectorIndexedDBAgent::create):
        * inspector/InspectorInputAgent.cpp:
        (WebCore::InspectorInputAgent::InspectorInputAgent):
        * inspector/InspectorInputAgent.h:
        (WebCore::InspectorInputAgent::create):
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::InspectorLayerTreeAgent):
        * inspector/InspectorLayerTreeAgent.h:
        (WebCore::InspectorLayerTreeAgent::create):
        * inspector/InspectorMemoryAgent.cpp:
        (WebCore::InspectorMemoryAgent::InspectorMemoryAgent):
        (WebCore::InspectorMemoryAgent::create):
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::create):
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::PageProfilerAgent::PageProfilerAgent):
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::WorkerProfilerAgent::WorkerProfilerAgent):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::InspectorRuntimeAgent):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorState.cpp: Removed.
        * inspector/InspectorState.h: Removed.
        * inspector/InspectorStateClient.h: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::create):
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::create):
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageConsoleAgent.cpp:
        (WebCore::PageConsoleAgent::PageConsoleAgent):
        * inspector/PageConsoleAgent.h:
        (WebCore::PageConsoleAgent::create):
        * inspector/PageDebuggerAgent.cpp:
        (WebCore::PageDebuggerAgent::create):
        (WebCore::PageDebuggerAgent::PageDebuggerAgent):
        * inspector/PageDebuggerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::PageRuntimeAgent):
        * inspector/PageRuntimeAgent.h:
        (WebCore::PageRuntimeAgent::create):
        * inspector/WorkerConsoleAgent.cpp:
        (WebCore::WorkerConsoleAgent::WorkerConsoleAgent):
        * inspector/WorkerConsoleAgent.h:
        (WebCore::WorkerConsoleAgent::create):
        * inspector/WorkerDebuggerAgent.cpp:
        (WebCore::WorkerDebuggerAgent::create):
        (WebCore::WorkerDebuggerAgent::WorkerDebuggerAgent):
        * inspector/WorkerDebuggerAgent.h:
        * inspector/WorkerInspectorController.cpp:
        (WebCore::WorkerInspectorController::WorkerInspectorController):
        (WebCore::WorkerInspectorController::connectFrontend):
        (WebCore::WorkerInspectorController::disconnectFrontend):
        * inspector/WorkerInspectorController.h:
        * inspector/WorkerRuntimeAgent.cpp:
        (WebCore::WorkerRuntimeAgent::WorkerRuntimeAgent):
        * inspector/WorkerRuntimeAgent.h:
        (WebCore::WorkerRuntimeAgent::create):
        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::SharedWorkerProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToPageInspector):
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:

2013-10-31  Brady Eidson  <beidson@apple.com>

        Split PendingDeleteCall into its own header
        https://bugs.webkit.org/show_bug.cgi?id=123597

        Reviewed by Beth “Okay I guess so, bro” Dakin.

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::deleteDatabase):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

        * Modules/indexeddb/IDBPendingDeleteCall.h: Added.
        (WebCore::IDBPendingDeleteCall::create):
        (WebCore::IDBPendingDeleteCall::callbacks):
        (WebCore::IDBPendingDeleteCall::IDBPendingDeleteCall):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Convert some InspectorObject member variables to HashSet/HashMap
        https://bugs.webkit.org/show_bug.cgi?id=123579

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        Make m_eventListenerBreakpoints and m_xhrBreakpoints HashSet.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        Make m_javaScriptBreakpoints a HashMap.

2013-10-31  Youenn Fablet  <youennf@gmail.com>

        Correct the elapsedTime calculation in SVG animations
        https://bugs.webkit.org/show_bug.cgi?id=119289

        Reviewed by Brent Fulgham.

        Merged from Blink: https://chromium.googlesource.com/chromium/blink/+/338f9badca7fb7880abdb0cecd5f02493c1f7d2e

        Test: svg/animations/getCurrentTime-pause-unpause.html

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::SMILTimeContainer):
        (WebCore::SMILTimeContainer::elapsed):
        (WebCore::SMILTimeContainer::begin):
        (WebCore::SMILTimeContainer::pause):
        (WebCore::SMILTimeContainer::resume):
        (WebCore::SMILTimeContainer::setElapsed):
        * svg/animation/SMILTimeContainer.h:

2013-10-31  Andreas Kling  <akling@apple.com>

        Manage line-grid RootInlineBox with unique_ptr.
        <https://webkit.org/b/123583>

        Use smart pointers for the RenderBlockFlow's optional line-grid box
        instead of manual new/delete.

        Reviewed by Antti Koivisto.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Enable WebCrypto on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123587

        Reviewed by Anders Carlsson.

        * Configurations/FeatureDefines.xcconfig: Enable it.

        * bindings/js/JSCryptoAlgorithmDictionary.cpp: Build fix.

        * crypto/CryptoAlgorithmRegistry.cpp: (WebCore::CryptoAlgorithmRegistry::getIdentifierForName):
        Special case empty keys to avoid upsetting HashMap.

        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: (WebCore::CryptoAlgorithmSHA1::create):
        Build fix. Can't use make_unique, because constructor is private.

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Underline bounds cannot be queried before underline itself is drawn
        https://bugs.webkit.org/show_bug.cgi?id=123310

        Reviewed by Dean Jackson.

        GraphicsContext's drawLineForText function is used to draw underlines,
        strikethroughs, and overlines. Before drawing the line, this function
        modifies the bounds given to it in order to make underlines crisp. However,
        this means that it is impossible to know where an underline will be drawn
        before drawing it. This patch pulls out this adjustment computation into
        GraphicsContext::computeLineBoundsForText, then passes the result to
        drawLineForText

        Because there should be no observable difference, no tests need to be updated.

        * platform/graphics/GraphicsContext.h: Signature of new computeLineBoundsForText
        function
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Implement new function
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Ditto
        (WebCore::GraphicsContext::drawLineForText): Use computeLineBoundsForText
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::computeLineBoundsAndAntialiasingModeForText): Static function that
        performs the actual bounds computation
        (WebCore::GraphicsContext::computeLineBoundsForText): Calls
        computeLineBoundsAndAntialiasingModeForText
        (WebCore::GraphicsContext::drawLineForText): Use new function
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::computeLineBoundsForText): Implement new function

2013-10-31  Beth Dakin  <bdakin@apple.com>

        Repro scrolling crash with scrollbars that use setPresentationValue on the 
        scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=123549
        -and corresponding-
        <rdar://problem/15246606>

        Reviewed by Brady Eidson.

        Here's another speculative fix. If a scrollbar was removed, we would not properly 
        inform the scrolling thread. Instead of checking supportsUpdateOnSecondaryThread() 
        before calling setScrollbarPaintersFromScrollbars(), check it from within 
        setScrollbarPaintersFromScrollbars(), and this will allow the ScrollbarPainter to 
        be properly updated.

        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewLayoutUpdated):
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::setScrollbarPaintersFromScrollbars):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed typo fix after 158386. (buildfix after r158365)

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Move CSS3 text decoration implementation behind ENABLE(CSS3_TEXT_DECORATION)
        https://bugs.webkit.org/show_bug.cgi?id=123541

        Reviewed by Tim Horton.

        Enabled CSS3 text decoration tests

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::renderTextDecorationStyleFlagsToCSSValue): Mapping internal
        representation to a CSSValue
        (WebCore::ComputedStyleExtractor::propertyValue): Ditto
        * css/CSSParser.cpp: Moving parsing functions behind new flag
        (WebCore::isColorPropertyID):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::addTextDecorationProperty):
        (WebCore::CSSParser::parseTextDecorationSkip):
        (WebCore::CSSParser::parseTextUnderlinePosition):
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/CSSPropertyNames.in: Marking the new properties behind new flag
        * css/CSSValueKeywords.in: Marking new values behind new flag
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty): Move text decoration shorthand
        (WebCore::matchingShorthandsForLonghand):
        * css/StylePropertyShorthand.h:
        * css/StyleResolver.cpp:
        (WebCore::isValidVisitedLinkProperty):
        (WebCore::StyleResolver::applyProperty):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::setPlatformStrokeStyle):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLine):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        * rendering/InlineFlowBox.cpp:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::textDecorationStyleToStrokeStyle):
        (WebCore::computeUnderlineOffset):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/RenderObject.cpp:
        (WebCore::decorationColor):
        * rendering/RootInlineBox.cpp:
        * rendering/RootInlineBox.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresRepaintIfTextOrBorderOrOutline):
        (WebCore::RenderStyle::colorIncludingFallback):
        (WebCore::RenderStyle::visitedDependentColor):
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        [WebCrypto] Add SHA-1
        https://bugs.webkit.org/show_bug.cgi?id=123582

        Reviewed by Anders Carlsson.

        Tests: security/crypto-subtle-arguments.html
               security/crypto-subtle-sha1.html

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * bindings/js/JSSubtleCryptoCustom.cpp:
        (WebCore::createAlgorithmFromJSValue):
        (WebCore::sequenceOfCryptoOperationDataFromJSValue):
        (WebCore::JSSubtleCrypto::digest):
        * crypto/SubtleCrypto.idl:
        Added bindings for crypto.digest.

        * crypto/algorithms: Added.
        * crypto/algorithms/CryptoAlgorithmSHA1.cpp: Added.
        * crypto/algorithms/CryptoAlgorithmSHA1.h: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp:
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Register SHA-1.

        * crypto/mac/CryptoAlgorithmSHA1Mac.cpp: Added.
        (WebCore::CryptoAlgorithmSHA1::digest): Performs the work synchronously, because
        otherwise we'd have to copy the data first, which is crazy for something as simple
        as hashing. We can change to a dispatch queue later if we find that it's actually
        better to copy and do the work asynchronously.

2013-10-31  Sudarsana Nagineni  <sudarsana.nagineni@intel.com>

        REGRESSION(r158348): Breaks Debug build
        https://bugs.webkit.org/show_bug.cgi?id=123562

        Reviewed by Brady Eidson.

        Remove an unnecessary check that cause compilation failure.

        No new tests since this just fixes the build failure.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        One more speculative buildfix after r158365.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        One more speculative buildfix after r158365.

        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::didAddRemoteStream):

2013-10-31  Csaba Osztrogonác  <ossy@webkit.org>

        Speculative buildfix after r158365.

        * Modules/mediastream/VideoStreamTrack.cpp:
        (WebCore::VideoStreamTrack::create):
        (WebCore::VideoStreamTrack::VideoStreamTrack):
        * Modules/mediastream/VideoStreamTrack.h:

2013-10-31  Myles C. Maxfield  <mmaxfield@apple.com>

        Decorated text sometimes does not draw its decorations
        https://bugs.webkit.org/show_bug.cgi?id=123539

        Reviewed by Antti Koivisto.

        Decorated text should opt-out of the simple line layout, because
        SimpleLineLayout::paintFlow doesn't draw decorations

        Fixes fast/css3-text/css3-text-decoration/text-decoration-color.html

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove last member variable uses of InspectorState from Agents
        https://bugs.webkit.org/show_bug.cgi?id=123540

        Reviewed by Timothy Hatcher.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        DOMDebuggerAgentState::eventListenerBreakpoints -> m_eventListenerBreakpoints.
        DOMDebuggerAgentState::xhrBreakpoints -> m_xhrBreakpoints.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        DebuggerAgentState::javaScriptBreakpoints -> m_javaScriptBreakpoints.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::addScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::removeScriptToEvaluateOnLoad):
        (WebCore::InspectorPageAgent::didClearWindowObjectInWorld):
        PageAgentState::pageAgentScriptsToEvaluateOnLoad -> m_scriptsToEvaluateOnLoad.
        This is a lazily created InspectorObject member variable.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::setExtraHTTPHeaders):
        ResourceAgentState::extraRequestHeaders -> m_extraRequestHeaders.
        This is a lazily created InspectorObject member variable.

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, one more build fix after r158365.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):

2013-10-31  Beth Dakin  <bdakin@apple.com>

        Repro scrolling crash with scrollbars that use setPresentationValue on the 
        scrolling thread
        https://bugs.webkit.org/show_bug.cgi?id=123549
        -and corresponding-
        <rdar://problem/15246606>

        Reviewed by Darin Adler.

        Speculative fix. I think if we retain the ScrollbarPainters, we should avoid this 
        crash.

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, MediaStream build fix after r158365.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::clone):

2013-10-31  Sam Weinig  <sam@webkit.org>

        Pass an Element by reference to the PseudoElement constructor
        https://bugs.webkit.org/show_bug.cgi?id=123576

        Reviewed by Andreas Kling.

        * dom/Element.cpp:
        (WebCore::Element::createPseudoElementIfNeeded):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::PseudoElement):
        * dom/PseudoElement.h:

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Fix a mis-merge.

        * WebCore.xcodeproj/project.pbxproj: Remove duplicate CryptoAlgorithmRegistryMac.cpp.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Add bindings code for crypto algorithm dictionaries
        https://bugs.webkit.org/show_bug.cgi?id=123476

        Reviewed by Sam Weinig.

        JSCryptoAlgorithmDictionary reads the Algorithm, much like JSDictionary does in
        simpler cases. We should see about bringing them closer together (perhaps replacing
        with autogenerated code).

        * crypto/parameters: Added.
        * crypto/parameters/CryptoAlgorithmHmacKeyParams.h: Added.
        * crypto/parameters/CryptoAlgorithmHmacParams.h: Added.
        Added a couple specific dictionaries as an example.

        * WebCore.xcodeproj/project.pbxproj: Added JSCryptoAlgorithmDictionary.
        * bindings/js/JSCryptoAlgorithmDictionary.cpp: Added.
        (WebCore::JSCryptoAlgorithmDictionary::getAlgorithmIdentifier):
        (WebCore::getHashAlgorithm):
        (WebCore::createHmacParams):
        (WebCore::createHmacKeyParams):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForSign):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForVerify):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForDigest):
        (WebCore::JSCryptoAlgorithmDictionary::createParametersForImportKey):
        * bindings/js/JSCryptoAlgorithmDictionary.h: Added.

2013-10-31  Sam Weinig  <sam@webkit.org>

        Pass ScriptExecutionContext by reference to from the bindings constructors
        https://bugs.webkit.org/show_bug.cgi?id=123575

        Reviewed by Andreas Kling.

        Since we null check the ScriptExecutionContext before creating the c++ class,
        we should be passing by reference.

2013-10-31  Zhuang Zhigang  <zhuangzg@cn.fujitsu.com>

        Paint the input tag of range type on WinCE port.
        https://bugs.webkit.org/show_bug.cgi?id=123199

        Reviewed by Brent Fulgham.        

        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSliderTrack):
        (WebCore::RenderThemeWinCE::paintSliderThumb):

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        Add a crypto algorithm abstraction
        https://bugs.webkit.org/show_bug.cgi?id=123474

        Reviewed by Sam Weinig.

        This works slightly differently than WebCrypto implies. We have separate classes
        for algorithm and its parameters, while WebCrypto puts them in the same dictionary.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithm.cpp: Added. As most algorithms don't implement most
        operations, default implementations just raise an exception.
        * crypto/CryptoAlgorithm.h: Added.

        * crypto/CryptoAlgorithmParameters.h: Added. Base class for numerous future parameter
        dictionaries, such as HmacParams or HmacKeyParams.

        * crypto/CryptoAlgorithmRegistry.cpp: Added.
        * crypto/CryptoAlgorithmRegistry.h: Added.
        The registry decouples universal bindings code from algorithms that may or may not
        be implemented on each platform.

        * crypto/mac: Added.
        * crypto/mac/CryptoAlgorithmRegistryMac.cpp: Added.
        (WebCore::CryptoAlgorithmRegistry::platformRegisterAlgorithms): Algorithms implemented
        on Mac will be registered by this function.

2013-10-31  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION(r158333): http/tests/xmlhttprequest/response-encoding.html and xmlhttprequest-overridemimetype-content-type-header.html are failing
        https://bugs.webkit.org/show_bug.cgi?id=123548

        Reviewed by Brady Eidson.

        We had code that made sure that cached 200 responses weren't used for conditional
        requests. But it didn't work the other way - cached 304 responses got reused for
        subsequent unconditional requests!

        Adding the test uncovered this bug.

        * loader/cache/CachedRawResource.cpp: (WebCore::shouldIgnoreHeaderForCacheReuse):
        Should never ignore conditional headers. Code in determineRevalidationPolicy
        was already undoing this for conditional requests, but we also shouldn't use
        WebCore cache if it holds a 304 response to conditional request.

        * loader/cache/CachedResourceLoader.cpp: (WebCore::CachedResourceLoader::determineRevalidationPolicy):
        Even though the changed code is only for raw resources, I think that we can never
        get a conditional request here any more.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        CryptoAlgorithmDescriptionBuilder should support producing nested algorithms
        https://bugs.webkit.org/show_bug.cgi?id=123461

        Reviewed by Darin Adler.

        To add a nested algorithm, clone a builder with createEmptyClone(), fill it,
        and add it using add().

        * bindings/js/JSCryptoAlgorithmBuilder.h:
        * crypto/CryptoAlgorithmDescriptionBuilder.h:
        * bindings/js/JSCryptoAlgorithmBuilder.cpp:
        (WebCore::JSCryptoAlgorithmBuilder::createEmptyClone):
        (WebCore::JSCryptoAlgorithmBuilder::add): Keep VM in a local variable for marginally
        better performance.

2013-10-31  Philippe Normand  <pnormand@igalia.com>

        [WK2][GTK] enable-media-stream Setting
        https://bugs.webkit.org/show_bug.cgi?id=123145

        Reviewed by Anders Carlsson.

        * page/Settings.in: new mediaStreamEnabled setting.

2013-10-31  Zan Dobersek  <zdobersek@igalia.com>

        Manage SVGPathByteStream through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123467

        Reviewed by Anders Carlsson.

        Manage SVGPathByteStream objects through std::unique_ptr. Constructors for the class are made public
        so std::make_unique can be used with the class.

        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::constructFromString):
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        (WebCore::SVGAnimatedPathAnimator::calculateAnimatedValue):
        * svg/SVGAnimatedType.cpp:
        (WebCore::SVGAnimatedType::createPath):
        * svg/SVGAnimatedType.h:
        * svg/SVGPathByteStream.h:
        (WebCore::SVGPathByteStream::SVGPathByteStream): Takes a const Data object that's then copied.
        (WebCore::SVGPathByteStream::copy): Made const.
        * svg/SVGPathByteStreamBuilder.cpp: Remove an unnecessary include.
        * svg/SVGPathByteStreamBuilder.h: Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPathElement.h:
        * svg/SVGPathUtilities.cpp:
        (WebCore::appendSVGPathByteStreamFromSVGPathSeg):
        (WebCore::addToSVGPathByteStream):

2013-10-31  Marcin Bychawski  <m.bychawski@samsung.com>

        Removing m_maxDeadCapacity condition in fast path in MemoryCache::prune().
        https://bugs.webkit.org/show_bug.cgi?id=115631

        Reviewed by Brent Fulgham.

        If the m_maxDeadSize and m_deadSize are both 0, the method unnecessairly tries to prune resources.

        No new tests, covered by existing ones.

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::prune):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove stale optional native memory instrumentation protocol params
        https://bugs.webkit.org/show_bug.cgi?id=123552

        Reviewed by Timothy Hatcher.

        * inspector/Inspector.json:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        * inspector/InspectorTimelineAgent.h:

2013-10-31  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Undefined references to RenderObject::style() when disabling video support
        https://bugs.webkit.org/show_bug.cgi?id=123492

        Reviewed by Carlos Garcia Campos.

        * platform/gtk/RenderThemeGtk2.cpp: Disabling video support removes indirect inclusion of the RenderElement.h
        header, causing undefined references to RenderObject::style(). The RenderElement.h header should be included
        instead of RenderObject.h as the former defines the RenderObject::style() inline and also includes the latter.
        * platform/gtk/RenderThemeGtk3.cpp: Ditto.

2013-10-31  Robert Plociennik  <r.plociennik@samsung.com>

        [EFL] accessibility/textbox-role-reports-selection.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=112017

        Reviewed by Mario Sanchez Prada.

        getSelectionOffsetsForObject() now returns proper start/end offsets for
        selections "touching" the object's front border.

        No new tests, covered by existing ones.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (getSelectionOffsetsForObject):

2013-10-31  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL][GLES] OpenGL should be optional
        https://bugs.webkit.org/show_bug.cgi?id=123399

        Reviewed by Noam Rosenthal.

        * CMakeLists.txt: Make OpenGL dependencies as optional.
        * PlatformEfl.cmake:
        Move OpenGL macro to OptionsEfl.cmake and make Xcomposite and XRender as optional.
        * platform/graphics/OpenGLESShims.h:
        Removed GL_COLOR_ATTACHMENT0_EXT because it was added to gl2ext.h since r153064
        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        Removed wrong GLX guard.
        (WebCore::GraphicsSurfaceToken::GraphicsSurfaceToken):
        (WebCore::GraphicsSurfaceToken::operator!=):
        (WebCore::GraphicsSurfaceToken::isValid):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        Removed unnecessary OpenGLShims.h

2013-10-30  Santosh Mahto  <santosh.ma@samsung.com>

        [webcore/editing] remove extra header includes from cpp files.
        https://bugs.webkit.org/show_bug.cgi?id=123524

        Reviewed by Ryosuke Niwa.

        Removing redundant header files.

        * editing/AlternativeTextController.cpp:
        * editing/ApplyBlockElementCommand.cpp:
        * editing/ApplyStyleCommand.cpp:
        * editing/BreakBlockquoteCommand.cpp:
        * editing/DeleteButton.cpp:
        * editing/DeleteButtonController.cpp:
        * editing/DeleteSelectionCommand.cpp:
        * editing/DictationCommand.cpp:
        * editing/EditCommand.cpp:
        * editing/EditingStyle.cpp:
        * editing/EditorCommand.cpp:
        * editing/FrameSelection.cpp:
        * editing/IndentOutdentCommand.cpp:
        * editing/InsertLineBreakCommand.cpp:
        * editing/InsertParagraphSeparatorCommand.cpp:
        * editing/MarkupAccumulator.h:
        * editing/RemoveFormatCommand.cpp:
        * editing/RenderedPosition.cpp:
        * editing/ReplaceSelectionCommand.cpp:
        * editing/SpellChecker.cpp:
        * editing/SpellingCorrectionCommand.cpp:
        * editing/SurroundingText.cpp:
        * editing/TextCheckingHelper.cpp:
        * editing/TextIterator.cpp:
        * editing/TypingCommand.cpp:
        * editing/VisibleSelection.cpp:
        * editing/VisibleUnits.cpp:
        * editing/WrapContentsInDummySpanCommand.cpp:
        * editing/htmlediting.cpp:

2013-10-30  Brady Eidson  <beidson@apple.com>

        IDB Database versions are uint64_t, not int64_t
        https://bugs.webkit.org/show_bug.cgi?id=123556

        Reviewed by Alexey Proskuryakov.

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/IDBPendingOpenCall.h:
        (WebCore::IDBPendingOpenCall::create):
        (WebCore::IDBPendingOpenCall::version):
        (WebCore::IDBPendingOpenCall::IDBPendingOpenCall):

        * Modules/indexeddb/IDBTransactionBackendOperations.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseVersion):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::open):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

2013-10-30  Brendan Long  <b.long@cablelabs.com>

        [Gtk] Build is failing after r158317
        https://bugs.webkit.org/show_bug.cgi?id=123544

        Reviewed by Alexey Proskuryakov.

        No new tests since this just fixes the build.

        * GNUmakefile.list.am: Add JSCryptoKey.cpp and JSCryptoKey.h

2013-10-30  Andreas Kling  <akling@apple.com>

        Manage EllipsisBox objects with unique_ptr.
        <https://webkit.org/b/123554>

        Use smart pointers to store ellipsis boxes instead of new/delete.

        Reviewed by Anders Carlsson.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        [Gtk] Build is failing after r158317
        https://bugs.webkit.org/show_bug.cgi?id=123544

        Use a correct style for JSC includes.

        * ForwardingHeaders/runtime/JSPromise.h: Added.
        * ForwardingHeaders/runtime/JSPromiseResolver.h: Added.
        * bindings/js/JSDOMPromise.h:

2013-10-30  Andreas Kling  <akling@apple.com>

        Replace InlineBox::destroy() with regular virtual destruction.
        <https://webkit.org/b/123550>

        Move logic out of destroy() and its overloads into good ol' virtual
        destructors instead.

        Reviewed by Anders Carlsson.

2013-10-30  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Simplifying MediaStream and MediStreamDescriptor creation
        https://bugs.webkit.org/show_bug.cgi?id=123443

        Reviewed by Eric Carlson.

        The internal process of creating a MediaStream and MediaStreamDescriptor was quite confusing and spread.
        We can take advantage of the platform implementation of MediaStreamTrack (aka MediaStreamTrackPrivate)
        and simplify the whole process.
        A new constructor that receives vectors of MediaStreamTrackPrivate objects were added, then the check
        if a source already exists or if the tracks are all ended are now made in MediaStreamDescriptor.

        No new tests needed.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::create): Removed unnecessary variables in one create method and using new
        MediaStreamDescriptor::create method that receives vector of MediaStreamTrackPrivate objects as parameter.

        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode): Removed passing flag to
        MediaStreamDescriptor create.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::create): Removed EndedAtCreationFlag parameter, because this is being
        handled inside constructor by analyzing the tracks or sources passed.
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Adding new constructor that receives vector of
        MediaStreamTrackPrivate as parameter.

        (WebCore::MediaStreamDescriptor::addTrack): Changed to store the track's source in the object.

        (WebCore::MediaStreamDescriptor::removeTrack):
        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::numberOfAudioTracks):
        (WebCore::MediaStreamDescriptor::audioTracks):
        (WebCore::MediaStreamDescriptor::numberOfVideoTracks):
        (WebCore::MediaStreamDescriptor::videoTracks):
        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::MockMediaStreamCenter::createMediaStream): Removing flag that is being passed to
        MediaStreamDescriptor's create method.

2013-10-30  Brent Fulgham  <bfulgham@apple.com>

        [Win] Legible Output callbacks should happen on notification queue
        https://bugs.webkit.org/show_bug.cgi?id=123545

        Reviewed by Eric Carlson.

        Modify the callback creation for Legible Output items so that they
        are made on our notification queue. The use of the main queue was a
        holdover from some temporary code used during earlier development.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::AVFWrapper): Assert this happens on the main thread.
        (WebCore::AVFWrapper::~AVFWrapper): Ditto.
        (WebCore::destroyAVFWrapper): Ditto.
        (WebCore::AVFWrapper::createPlayer): Ditto.
        (WebCore::AVFWrapper::createPlayerItem): Ditto.
        Also, instruct LegibleOutput callbacks to happen on our notification
        queue, rather than the main thread.
        (WebCore::AVFWrapper::createAVCFVideoLayer): Assert this happens on the main thread.
        (WebCore::AVFWrapper::destroyVideoLayer): Ditto.
        (WebCore::AVFWrapper::createImageGenerator): Ditto.
        (WebCore::AVFWrapper::destroyImageGenerator): Ditto.

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        XHR.response is null when requesting empty file as arraybuffer
        https://bugs.webkit.org/show_bug.cgi?id=123457

        Reviewed by Sam Weinig.

        Test: http/tests/xmlhttprequest/response-empty-arraybuffer.html

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::responseArrayBuffer): Don't do this.

2013-10-30  Samuel White  <samuel_white@apple.com>

        AX: AXFocused not exposed on ARIA menuitems
        https://bugs.webkit.org/show_bug.cgi?id=123494

        Reviewed by Chris Fleizach.

        ARIA menuitems should expose AXFocused accessibility attribute.

        Test: platform/mac/accessibility/aria-menuitem-focus.html

        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeNames]):

2013-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove basic uses of InspectorState from agents
        https://bugs.webkit.org/show_bug.cgi?id=123534

        Reviewed by Timothy Hatcher.

        * inspector/InspectorAgent.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::InspectorAgent):
        (WebCore::InspectorAgent::enable):
        (WebCore::InspectorAgent::disable):
        (WebCore::InspectorAgent::evaluateForTestInFrontend):
        (WebCore::InspectorAgent::inspect):
        InspectorAgentState::inspectorAgentEnabled -> m_enabled.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::enable):
        Remove unused state.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::enable):
        (WebCore::InspectorCSSAgent::disable):
        (WebCore::InspectorCSSAgent::startSelectorProfiler):
        (WebCore::InspectorCSSAgent::stopSelectorProfilerImpl):
        Remove unused states. Make CSSAgentState::isSelectorProfiling check profile object exists or not.

        * inspector/InspectorCanvasAgent.cpp:
        (WebCore::InspectorCanvasAgent::enable):
        (WebCore::InspectorCanvasAgent::disable):
        Remove unused state, member variable already existed.

        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::~InspectorConsoleAgent):
        (WebCore::InspectorConsoleAgent::enable):
        (WebCore::InspectorConsoleAgent::disable):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::setMonitoringXHREnabled):
        ConsoleAgentState::consoleMessagesEnabled already had m_enabled.
        ConsoleAgentState::monitoringXHR -> m_monitoringXHREnabled.
        
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::clearFrontend):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::getDocument):
        (WebCore::InspectorDOMAgent::mainFrameDOMContentLoaded):
        DOMAgentState::documentRequested -> m_documentRequested.

        * inspector/InspectorDOMDebuggerAgent.h:
        * inspector/InspectorDOMDebuggerAgent.cpp:
        (WebCore::InspectorDOMDebuggerAgent::InspectorDOMDebuggerAgent):
        (WebCore::InspectorDOMDebuggerAgent::setXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::removeXHRBreakpoint):
        (WebCore::InspectorDOMDebuggerAgent::willSendXMLHttpRequest):
        DOMDebuggerAgentState::pauseOnAllXHRs -> m_pauseOnAllXHRsEnabled.

        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::InspectorDOMStorageAgent):
        (WebCore::InspectorDOMStorageAgent::enable):
        (WebCore::InspectorDOMStorageAgent::disable):
        (WebCore::InspectorDOMStorageAgent::didDispatchDOMStorageEvent):
        DOMStorageAgentState::domStorageAgentEnabled -> m_enabled.

        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::enable):
        (WebCore::InspectorDatabaseAgent::disable):
        Remove unused state, m_enabled already existed.

        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::enable):
        (WebCore::InspectorDebuggerAgent::disable):
        (WebCore::InspectorDebuggerAgent::enabled):
        (WebCore::InspectorDebuggerAgent::clearFrontend):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsImpl):
        DebuggerAgentState::pauseOnExceptionsState removed, never read.
        DebuggerAgentState::debuggerEnabled -> m_enabled.

        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::InspectorHeapProfilerAgent):
        (WebCore::InspectorHeapProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorHeapProfilerAgent::clearFrontend):
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        HeapProfilerAgentState::profileHeadersRequested -> m_profileHeadersRequested.

        * inspector/InspectorIndexedDBAgent.cpp:
        (WebCore::InspectorIndexedDBAgent::enable):
        (WebCore::InspectorIndexedDBAgent::disable):
        Remove unused state, never read.

        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::enable):
        (WebCore::InspectorLayerTreeAgent::disable):
        Remove unused state, did not need to be read.

        * inspector/InspectorPageAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::InspectorPageAgent::InspectorPageAgent):
        (WebCore::InspectorPageAgent::webViewResized):
        (WebCore::InspectorPageAgent::enable):
        (WebCore::InspectorPageAgent::disable):
        (WebCore::InspectorPageAgent::setDeviceMetricsOverride):
        (WebCore::InspectorPageAgent::deviceMetricsChanged):
        (WebCore::InspectorPageAgent::setShowPaintRects):
        (WebCore::InspectorPageAgent::setShowDebugBorders):
        (WebCore::InspectorPageAgent::setShowFPSCounter):
        (WebCore::InspectorPageAgent::setContinuousPaintingEnabled):
        (WebCore::InspectorPageAgent::setScriptExecutionDisabled):
        (WebCore::InspectorPageAgent::applyScreenWidthOverride):
        (WebCore::InspectorPageAgent::applyScreenHeightOverride):
        (WebCore::InspectorPageAgent::didPaint):
        (WebCore::InspectorPageAgent::didLayout):
        (WebCore::InspectorPageAgent::updateTouchEventEmulationInPage):
        (WebCore::InspectorPageAgent::setTouchEmulationEnabled):
        (WebCore::InspectorPageAgent::setEmulatedMedia):
        (WebCore::InspectorPageAgent::applyEmulatedMedia):
        PageAgentState::pageAgentScreenWidthOverride -> m_screenWidthOverride.
        PageAgentState::pageAgentScreenHeightOverride -> m_screenHeightOverride.
        PageAgentState::pageAgentFontScaleFactorOverride -> m_fontScaleFactorOverride.
        PageAgentState::pageAgentFitWindow -> m_fitWindowOverride.
        PageAgentState::pageAgentShowPaintRects -> m_showPaintRects.
        PageAgentState::pageAgentEmulatedMedia -> m_emulatedMedia.
        Remove other unused states.

        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::resetFrontendProfiles):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        (WebCore::InspectorProfilerAgent::enabled):
        ProfilerAgentState::profileHeadersRequested -> m_profileHeadersRequested.
        Remove other unused states.

        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::applyUserAgentOverride):
        (WebCore::InspectorResourceAgent::enable):
        (WebCore::InspectorResourceAgent::disable):
        (WebCore::InspectorResourceAgent::setUserAgentOverride):
        (WebCore::InspectorResourceAgent::setCacheDisabled):
        (WebCore::InspectorResourceAgent::mainFrameNavigated):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        ResourceAgentState::resourceAgentEnabled -> m_enabled.
        ResourceAgentState::cacheDisabled -> m_cacheDisabled.
        ResourceAgentState::userAgentOverride -> m_userAgentOverride (this already existed and was unused).

        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::start):
        (WebCore::InspectorTimelineAgent::stop):
        (WebCore::InspectorTimelineAgent::setDOMCounters):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        TimelineAgentState::timelineAgentEnabled -> m_enabled.
        TimelineAgentState::includeDomCounters -> m_includeDOMCounters.
        Remove other unused states.

        * inspector/InspectorWorkerAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        (WebCore::InspectorWorkerAgent::InspectorWorkerAgent):
        (WebCore::InspectorWorkerAgent::clearFrontend):
        (WebCore::InspectorWorkerAgent::enable):
        (WebCore::InspectorWorkerAgent::disable):
        (WebCore::InspectorWorkerAgent::setAutoconnectToWorkers):
        (WebCore::InspectorWorkerAgent::shouldPauseDedicatedWorkerOnStart):
        (WebCore::InspectorWorkerAgent::didStartWorkerGlobalScope):
        (WebCore::InspectorWorkerAgent::createWorkerFrontendChannel):
        WorkerAgentState::workerInspectionEnabled -> m_enabled.
        WorkerAgentState::autoconnectToWorkers -> m_shouldPauseDedicatedWorkerOnStart.

        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::enable):
        (WebCore::PageRuntimeAgent::disable):
        Remove unused state, not read.

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove code for Mac Lion
        https://bugs.webkit.org/show_bug.cgi?id=123542

        Reviewed by Anders Carlsson.

        Removed the code for Mac OS X 10.7.

        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::context):
        (WebCore::ImageBuffer::flushContext):
        * platform/graphics/cg/ImageBufferDataCG.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::scrollAnimationEnabledForSystem):
        * platform/mac/ScrollElasticityController.mm:
        (WebCore::reboundDeltaForElasticDelta):
        * platform/mac/ThemeMac.mm:
        (WebCore::updateStates):
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        (WebCore::paintButton):
        * platform/mac/WebCoreNSCellExtras.h:
        * platform/mac/WebCoreNSCellExtras.m:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::textField):

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        85 inspector tests asserting in DrawingAreaProxyImpl::updateAcceleratedCompositingMode()
        when there is a stale WebKitTestRunner preference
        https://bugs.webkit.org/show_bug.cgi?id=115115

        Reviewed by Darin Adler.

        * page/Settings.cpp:
        (WebCore::Settings::setMockScrollbarsEnabled):
        (WebCore::Settings::setUsesOverlayScrollbars):
        Added FIXMEs.

2013-10-30  Andreas Kling  <akling@apple.com>

        Take line boxes out of the arena.
        <https://webkit.org/b/123533>

        Stop arena-allocating line boxes so we can move forward on improving
        render tree memory management. This will also allow more rendering
        code to take advantage of malloc optimizations.

        This will likely regress performance on some micro-benchmarks, but
        it's something we want to do sooner rather than later so we have time
        to restabilize it. All improvements to the simple line layout's
        coverage will help with recouping whatever is regressed.

        BiDi runs are the only remaining user of the arena now.

        Reviewed by Antti Koivisto

2013-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove InspectorAgent::restore functionality
        https://bugs.webkit.org/show_bug.cgi?id=123525

        Reviewed by Timothy Hatcher.

        Remove unused InspectorAgent restore functionality.

        * inspector/InspectorApplicationCacheAgent.cpp:
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.cpp:
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCanvasAgent.cpp:
        * inspector/InspectorCanvasAgent.h:
        * inspector/InspectorConsoleAgent.cpp:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorIndexedDBAgent.h:
        * inspector/InspectorLayerTreeAgent.cpp:
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorPageAgent.cpp:
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorTimelineAgent.cpp:
        * inspector/InspectorTimelineAgent.h:
        * inspector/InspectorWorkerAgent.cpp:
        * inspector/InspectorWorkerAgent.h:
        * inspector/PageRuntimeAgent.cpp:
        * inspector/PageRuntimeAgent.h:
        * inspector/WorkerInspectorController.cpp:
        * inspector/WorkerInspectorController.h:

2013-10-30  Jer Noble  <jer.noble@apple.com>

        REGRESSION(r158288): media/media-can-play-mpeg4-video.html fails
        https://bugs.webkit.org/show_bug.cgi?id=123530

        Reviewed by Eric Carlson.

        Lower case the mime type before passing it along to MediaPlayer.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):

2013-10-30  Alexey Proskuryakov  <ap@apple.com>

        Add a way to fulfill promises from DOM code
        https://bugs.webkit.org/show_bug.cgi?id=123466

        Reviewed by Sam Weinig.

        This is not perfect, as it strongly ties DOM code to JavaScript. In the future, we
        can make it better e.g. by subclassing, so that only a base interface would be exposed.

        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * bindings/js/JSBindingsAllInOne.cpp:
        * WebCore.xcodeproj/project.pbxproj:
        Added JSDOMPromise.

        * bindings/js/JSDOMPromise.cpp: Added.

        * bindings/js/JSDOMPromise.h: Added.
        (WebCore::PromiseWrapper::create):
        (WebCore::PromiseWrapper::fulfill): A random set of specializations that I needed
        in WebCrypto code so far.
        (WebCore::PromiseWrapper::reject): Ditto.

2013-10-30  Santosh Mahto  <santosh.ma@samsung.com>

        contentEditable deleting lists when list items are block level
        https://bugs.webkit.org/show_bug.cgi?id=122602

        Reviewed by Ryosuke Niwa.

        When listitems are styled with display:block/float then inserting paragraph
        twice at end of listitem delete entire list. Generally when listitem is empty
        then we delete the listitem on inserting paragraph. In this issue, on inserting
        first paragraph one empty listitem is created, and on inserting second paragraph
        we try to delete that empty listitem. but it misbehave becasue of incomplete 
        definition of htmlediting::isLisItem() and entire list is deleted.

        htmlediting::isListItem() check only render object to decide whether it is 
        list or not, so if any LI element is block level then isListItem return false.
        Now after this patch if parent of current node is list element then node is
        treated as listItem.

        Test: editing/execCommand/hit-enter-twice-atendof-block-styled-listitem.html

        * editing/htmlediting.cpp:
        (WebCore::isListItem): Modified condition to check if parent node is list;

2013-10-30  Jer Noble  <jer.noble@apple.com>

        Unreviewed EFL build fix; give MediaEngineSupportParameters struct a default constructor.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::isTypeSupported):
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaEngineSupportParameters::MediaEngineSupportParameters):

2013-10-30  Andreas Kling  <akling@apple.com>

        Let Page::renderTreeSize() be the number of renderers.
        <https://webkit.org/b/123518>
        <rdar://problem/15348679>

        The old metric was "number of bytes allocated in RenderArena" and
        that was heading towards obsolescence, fast.

        Instead, keep a count of RenderObjects instantiated on RenderView.
        While a bit ugly, this lets us move forward with rendering memory
        model improvements without breaking features.

        Reviewed by Beth Dakin.

2013-10-30  Myles C. Maxfield  <mmaxfield@apple.com>

        WebKit/win/WebKitGraphics.h:void WebDrawText(WebTextRenderInfo*); is never called
        https://bugs.webkit.org/show_bug.cgi?id=123485

        Reviewed by Brent Fulgham.

        WebDrawText is the only caller of WebCoreDrawTextAtPoint, so we can
        delete that as well.

        Because there is no behavior difference, no new tests are necessary.

        * platform/win/WebCoreTextRenderer.cpp:
        * platform/win/WebCoreTextRenderer.h:

2013-10-30  Csaba Osztrogonác  <ossy@webkit.org>

        URTBF after r158289.

        * CMakeLists.txt:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):

2013-10-30  Dong-Gwan Kim  <donggwan.kim@samsung.com>

        Build fails with EGLConfigSelector.cpp when OpenGL ES is not used
        https://bugs.webkit.org/show_bug.cgi?id=119037

        Reviewed by Brent Fulgham.

        Build fix for EGLConfigSelector.cpp

        No new tests, no behavior change.

        * platform/graphics/surfaces/egl/EGLConfigSelector.cpp:
        (WebCore::EGLConfigSelector::createConfig):

2013-10-30  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Explicitly initialize base class in MediStreamTrackPrivate copy constructor
        https://bugs.webkit.org/show_bug.cgi?id=123473

        Reviewed by Eric Carlson.

        No new tests needed.

        Ports that enable -Werror=extra must do that to compile.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):

2013-10-30  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix after r158291.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::canPlayType):

2013-10-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r158243.
        http://trac.webkit.org/changeset/158243
        https://bugs.webkit.org/show_bug.cgi?id=123520

        Change was wrong (Requested by smfr on #webkit).

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintCompositionUnderline):

2013-10-30  peavo@outlook.com  <peavo@outlook.com>

        Favicons are flipped in vertical direction in WinCairo builds.
        https://bugs.webkit.org/show_bug.cgi?id=102077

        Reviewed by Brent Fulgham.

        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Add MediaSource compatable loading functions to MediaPlayer
        https://bugs.webkit.org/show_bug.cgi?id=123353

        Reviewed by Eric Carlson.

        Add methods to MediaPlayer to allow it to select the correct MediaPlayerFactory
        when attempting to load a MediaSource URL.

        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        (WebCore::MediaSource::isTypeSupported):
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::supportsType):
        * platform/graphics/MediaPlayer.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

        Remove the isSupportedMediaSourceMIMEType() method:
        * platform/MIMETypeRegistry.h:
        * platform/efl/MIMETypeRegistryEfl.cpp:
        * platform/mac/MIMETypeRegistryMac.mm:


2013-10-30  Brady Eidson  <beidson@apple.com>

        IDBCursorBackendLevelDB should be made cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=123513

        Rubberstamped by Andreas Kling.

        Because of all the already-done refactoring, this is basically a file-move and global rename.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.vcxproj/WebCore.vcxproj:

        * Modules/indexeddb/IDBCursorBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp.
        * Modules/indexeddb/IDBCursorBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h.

        * Modules/indexeddb/IDBCursorBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:

2013-10-29  Jer Noble  <jer.noble@apple.com>

        [MSE] Remove legacy Media Source APIs (WebKitMediaSource, WebKitSourceBuffer, WebKitSourceBufferList)
        https://bugs.webkit.org/show_bug.cgi?id=123463

        Reviewed by Eric Carlson.

        No new tests; updated test results.

        Remove all reference to WebKitMediaSource, WebKitSourceBuffer, and WebKitSourceBufferList.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        * Modules/mediasource/DOMURLMediaSource.idl:
        * Modules/mediasource/WebKitMediaSource.cpp: Removed.
        * Modules/mediasource/WebKitMediaSource.h: Removed.
        * Modules/mediasource/WebKitMediaSource.idl: Removed.
        * Modules/mediasource/WebKitSourceBuffer.cpp: Removed.
        * Modules/mediasource/WebKitSourceBuffer.h: Removed.
        * Modules/mediasource/WebKitSourceBuffer.idl: Removed.
        * Modules/mediasource/WebKitSourceBufferList.cpp: Removed.
        * Modules/mediasource/WebKitSourceBufferList.h: Removed.
        * Modules/mediasource/WebKitSourceBufferList.idl: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventTargetFactory.in:

2013-10-30  Antti Koivisto  <antti@apple.com>

        Unbreak the release build.

        * rendering/SimpleLineLayoutFunctions.cpp:

2013-10-30  Liangjun Zeng  <lizeng@blackberry.com>

        Fix memory leaks in platform/image-encoders/JPEGImageEncoder.cpp
        https://bugs.webkit.org/show_bug.cgi?id=118781

        Reviewed by Brent Fulgham.

        We can find the function "jpeg_finish_compress" call the function "jpeg_abort" at the end.
        And the comments of "jpeg_abort" is "Abort processing of a JPEG compression operation,
        but don't destroy the object itself". (We can find these in the "jcapimin.c" of jpeg)
        So the compression object destroy need be called.
        No new tests because this doesn't change functionality.

        * platform/image-encoders/JPEGImageEncoder.cpp:
        (WebCore::compressRGBABigEndianToJPEG):

2013-10-30  Antti Koivisto  <antti@apple.com>

        Add debug settings for simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=123514

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * page/Settings.in:
        
            Add simpleLineLayoutEnabled and simpleLineLayoutDebugBordersEnabled.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::paintDebugBorders):
        (WebCore::SimpleLineLayout::paintFlow):

2013-10-30  peavo@outlook.com  <peavo@outlook.com>

        [Curl] Cookies are sometimes not set in download request.
        https://bugs.webkit.org/show_bug.cgi?id=123445

        Reviewed by Brent Fulgham.

        Sometimes cookies are not set in the download request because the cookie file cannot be opened,
        it's already been opened by the ResourceHandleManager for writing.
        This can be fixed by getting the cookie list from the share handle in ResourceHandleManager instead.
        This will also improve performance, as there is no need to read and parse the cookie file for each download.

        * platform/network/curl/CurlDownload.cpp:
        (WebCore::CurlDownload::init): Use share handle to get cookie list.

2013-10-30  ChangSeok Oh  <changseok.oh@collabora.com>

        Unguard Element::childShouldCreateRenderer
        https://bugs.webkit.org/show_bug.cgi?id=123496

        Reviewed by Andreas Kling.

        Make Element::childShouldCreateRenderer normally accessible. Guarding it with flags
        just leaves potential build issues.

        No new tests since no functionality changed.

        * dom/Element.cpp:
        (WebCore::Element::childShouldCreateRenderer):
        * dom/Element.h:

2013-10-30  Jer Noble  <jer.noble@apple.com>

        [MSE] Make MediaSourcePrivate, SourceBufferPrivate classes RefCounted.
        https://bugs.webkit.org/show_bug.cgi?id=123350

        Reviewed by Darin Adler.

        Make the MediaSourcePrivate and SourceBufferPrivate classes RefCounted so that
        they can be referenced both by MediaSource/SourceBuffer, and by the MediaPlayerPrivate
        which creates them.

        Change OwnPtr -> RefPtr everywhere:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::addSourceBuffer):
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::setPrivateAndOpen):
        (WebCore::MediaSourceBase::createSourceBufferPrivate):
        * Modules/mediasource/MediaSourceBase.h:
        * Modules/mediasource/SourceBuffer.cpp:
        (WebCore::SourceBuffer::create):
        (WebCore::SourceBuffer::SourceBuffer):
        * Modules/mediasource/SourceBuffer.h:
        * Modules/mediasource/WebKitMediaSource.cpp:
        (WebCore::WebKitMediaSource::addSourceBuffer):
        * Modules/mediasource/WebKitSourceBuffer.cpp:
        (WebCore::WebKitSourceBuffer::create):
        (WebCore::WebKitSourceBuffer::WebKitSourceBuffer):
        * Modules/mediasource/WebKitSourceBuffer.h:
        * html/HTMLMediaSource.h:
        * platform/graphics/MediaSourcePrivate.h:
        * platform/graphics/SourceBufferPrivate.h:
        (WebCore::SourceBufferPrivate::SourceBufferPrivate):

2013-10-30  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Remove unused runtime enabled
        https://bugs.webkit.org/show_bug.cgi?id=123509

        Reviewed by Anders Carlsson.

        Some of the runtime enabled features were only ever used by the V8 bindings
        and can be removed as no WebKit code sets or reads them.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::RuntimeEnabledFeatures):
        * bindings/generic/RuntimeEnabledFeatures.h:

2013-10-30  Antti Koivisto  <antti@apple.com>

        Make SimpleLineLayout::Layout a class
        https://bugs.webkit.org/show_bug.cgi?id=123508

        Reviewed by Mario Sanchez Prada.

        Improve encapsulation.

2013-10-30  Antti Koivisto  <antti@apple.com>

        REGRESSION(r158214): It made zillion tests crash on GTK and EFL
        https://bugs.webkit.org/show_bug.cgi?id=123505

        * rendering/SimpleLineLayout.h: Add WTF_MAKE_FAST_ALLOCATED

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] Store video-sink in a bin
        https://bugs.webkit.org/show_bug.cgi?id=122831

        Reviewed by Gustavo Noronha Silva.

        For the upcoming mediastream playback support the player will
        handle a non-playbin-based pipeline that will require a slightly
        different video rendering chain. This patch generalizes the
        encapsulation of the video sink in a bin, just like the audio sink
        case.

        No new tests, no change in functionality.

2013-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION(r154614): Opening and closing a picture on Facebook resets scroll position
        https://bugs.webkit.org/show_bug.cgi?id=122882

        Reviewed by Anders Carlsson.

        scrollLeft and scrollTop have to continue to function in the strict mode for the Web compatiblity.
        In particular, www.facebook.com and build.webkit.org depend on this behavior as of October 29th, 2013.

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):

2013-10-29  Brady Eidson  <beidson@apple.com>

        IDBTransactionBackend should be cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123449

        Reviewed by Beth Dakin.

        - Rename IDBTransactionBackendLevelDB to IDBTransactionBackendImpl
        - Rename IDBTransactionBackendLevelDBOperations to IDBTransactionBackendOperations
        - Move their files from the leveldb subdirectory to the indexeddb directory

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBTransactionBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp.
        * Modules/indexeddb/IDBTransactionBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h.
        * Modules/indexeddb/IDBTransactionBackendOperations.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp.
        * Modules/indexeddb/IDBTransactionBackendOperations.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h.

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::maybeCreateTransactionBackend):

2013-10-29  Sam Weinig  <sam@webkit.org>

        Modernize DatasetDOMStringMap and ClassList a bit
        https://bugs.webkit.org/show_bug.cgi?id=123491

        Reviewed by Andreas Kling.

        * dom/DatasetDOMStringMap.cpp:
        * dom/DatasetDOMStringMap.h:
        * dom/Element.cpp:
        * dom/ElementRareData.h:
        * html/ClassList.cpp:
        * html/ClassList.h:
        Pass the owner Element by reference and store in a std::unique_ptr.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Attempted build-fix after http://trac.webkit.org/changeset/158234

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::createBackingStoreTransaction): Implement this!

2013-10-29  Andreas Kling  <akling@apple.com>

        ElementData construction helpers should return PassRef.
        <https://webkit.org/b/123487>

        Make functions that create new ElementData objects return appropriate
        PassRef pointers instead of PassRefPtr.

        Reviewed by Anders Carlsson.

2013-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        GTK+ build fix attempt after r158220.

        * GNUmakefile.list.am:

2013-10-29  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackendLevelDB to generic IDBBackingStoreInterface
        https://bugs.webkit.org/show_bug.cgi?id=123483

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBCursorBackendInterface.h:
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        (WebCore::IDBCursorBackendLevelDB::create):

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::registerOpenCursor):
        (WebCore::IDBTransactionBackendLevelDB::unregisterOpenCursor):
        (WebCore::IDBTransactionBackendLevelDB::closeOpenCursors):
        (WebCore::IDBTransactionBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * WebCore.xcodeproj/project.pbxproj: Export a required header.

2013-10-29  Seokju Kwon  <seokju@webkit.org>

        Remove mutable keyword from member variables of XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=123481

        Reviewed by Andreas Kling.

        No new tests, no change in functionality.

        * xml/XMLHttpRequest.h: Remove mutable keyword as these are no longer used in const functions.

2013-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Underline bounds cannot be queried before underline itself is drawn
        https://bugs.webkit.org/show_bug.cgi?id=123310

        Reviewed by Simon Fraser

        GraphicsContext's drawLineForText function is used to draw underlines,
        strikethroughs, and overlines. Before drawing the line, this function
        modifies the bounds given to it in order to make underlines crisp. However,  
        this means that it is impossible to know where an underline will be drawn
        before drawing it. This patch pulls out this adjustment computation into 
        InlineTextBox, then passes the result to drawLineForText.

        Because there should be no observable difference, no tests need to be updated.

        * platform/graphics/GraphicsContext.h: Changing the signature of drawLineForText
        so it can accept bounds from our helper function
        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::drawLineForText): Update to work with new
        signature of drawLineForText
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawLineForText): Ditto
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint): Update the last call site of drawLineForText
        * rendering/InlineTextBox.cpp:
        (WebCore::computeBoundsForUnderline): Pure function that computes the adjusted
        bounds of the underline about to be drawn
        (WebCore::drawLineForText): calls computeBoundsForUnderline and then
        GraphicsContext::drawLineForText
        (WebCore::InlineTextBox::paintDecoration): Use new drawLineForText function
        (WebCore::InlineTextBox::paintCompositionUnderline): Ditto

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        Beef up CryptoKey
        https://bugs.webkit.org/show_bug.cgi?id=123462

        Fix a mismerge, remove duplicate CryptoKeyType declaration.

        * crypto/CryptoKey.h:

2013-10-29  Alexey Proskuryakov  <ap@apple.com>

        Beef up CryptoKey
        https://bugs.webkit.org/show_bug.cgi?id=123462

        Reviewed by Sam Weinig.

        * WebCore.xcodeproj/project.pbxproj: Added new files.

        * crypto/CryptoAlgorithmIdentifier.h: Added an enum with all registered algorithms
        (they don't have to be all implemented in any port).

        * crypto/CryptoKey.cpp:
        (WebCore::CryptoKey::CryptoKey): Initialize base class variables.
        (WebCore::CryptoKey::type): Convert internal representation for bindings use.
        (WebCore::CryptoKey::buildAlgorithmDescription): Ditto. This function is supposed
        to be called by derived classes before adding other keyes.
        (WebCore::CryptoKey::usages): Convert internal representation for bindings use.

        * crypto/CryptoKey.h:
        (WebCore::CryptoKey::extractable): Expose for bindings.
        (WebCore::CryptoKey::allows): A faster way to check allowed key usage from C++ code.

        * crypto/CryptoKey.idl: Added SkipVTableValidation, because validation doesn't work
        with derived classes. Corrected "usages" attribute name.

        * crypto/CryptoKeyFormat.h: Added. 
        * crypto/CryptoKeyType.h: Added.
        * crypto/CryptoKeyUsage.h: Added.
        Added enums used by CryptoKey.

2013-10-29  Hugo Parente Lima  <hugo.lima@openbossa.org>

        Adding Nix files in Source/Platform to trunk
        https://bugs.webkit.org/show_bug.cgi?id=118331

        Reviewed by Benjamin Poulain.

        Add Nix WebAudio implementation that just forward some calls to our API.
        This patch is part of the upstream process, tests will be landed by other patches.

        * platform/audio/nix/AudioBusNix.cpp: Added.
        * platform/audio/nix/AudioDestinationNix.cpp: Added.
        * platform/audio/nix/AudioDestinationNix.h: Added.
        * platform/audio/nix/FFTFrameNix.cpp: Added.
        * platform/nix/support/MultiChannelPCMData.cpp: Added.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackendLevelDB to generic IDBBackingStoreInterface::Transaction.
        https://bugs.webkit.org/show_bug.cgi?id=123475

        Reviewed by Tim Horton.

        Currently it's using IDBBackingStoreLevelDB::Transaction, which hinders the goal of:
        https://bugs.webkit.org/show_bug.cgi?id=123449 - IDBTransactionBackend should be cross platform

        * Modules/indexeddb/IDBBackingStoreInterface.h:

        * Modules/indexeddb/IDBIndexWriter.cpp:
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h:

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseMetaData):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::commit):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

2013-10-29  Dean Jackson  <dino@apple.com>

        Move InlineTextBox's text painting to it's own class
        https://bugs.webkit.org/show_bug.cgi?id=123355

        Reinstate the LGPL license. I incorrectly told Myles to
        use another license on these new files.

        * rendering/TextPainter.cpp:
        * rendering/TextPainter.h:

2013-10-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Move InlineTextBox's text painting to it's own class
        https://bugs.webkit.org/show_bug.cgi?id=123355

        Reviewed by Dean Jackson.

        Implementing text-decoration-skip: ink requires drawing text
        twice (once regularly, and once with a thick outline into a mask).
        This patch pulls out the relevant text drawing code from
        InlineTextBox into a new class, called TextPainter, which can be re-used
        to draw text multiple times.

        Because there should be no observable difference, no tests need to be updated.

        * CMakeLists.txt: Adding new TextPainter class
        * GNUmakefile.list.am: Adding new TextPainter class
        * WebCore.vcxproj/WebCore.vcxproj: Adding new TextPainter class
        * WebCore.vcxproj/WebCore.vcxproj.filters: Adding new TextPainter
        class
        * WebCore.xcodeproj/project.pbxproj: Adding new TextPainter class
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Moving text drawing code from
        this function
        * rendering/RenderingAllInOne.cpp: Adding new TextPainter class
        * rendering/TextPainter.cpp: Added.
        (WebCore::TextPainter::TextPainter):
        (WebCore::drawTextOrEmphasisMarks):
        (WebCore::paintTextWithShadows):
        (WebCore::rotation):
        (WebCore::TextPainter::paintText): New location for text drawing
        code
        (WebCore::TextPainter::paintTextInContext):
        * rendering/TextPainter.h: Added.
        (WebCore::SavedDrawingStateForMask::SavedDrawingStateForMask):
        (WebCore::TextPainter::boxRect):

2013-10-29  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Build fix after 158223; make TileController use float for scales.

        This matches what we do in other places, and fixes the constant
        issue with exporting symbols that include CGFloat.

        * WebCore.exp.in:
        * platform/graphics/ca/mac/TileController.h:
        (WebCore::TileController::scale):
        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::setScale):

2013-10-29  Antti Koivisto  <antti@apple.com>

        Try to keep MSVC happy.

        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        More correct build fix after 158223.

        Only fails in release because it's inline.

        * WebCore.exp.in:

2013-10-29  Antti Koivisto  <antti@apple.com>

        Use left/right instead of left/width for simple text runs
        https://bugs.webkit.org/show_bug.cgi?id=123465

        Reviewed by Andreas Kling.

        This simplifies the code a bit.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::adjustRunOffsets):
        (WebCore::SimpleLineLayout::create):
        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Try fixing the Mac build (though I have no idea why
        this wouldn't fail locally)...

        * WebCore.exp.in:

2013-10-29  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Support tiled drawing and use it for the main frame
        https://bugs.webkit.org/show_bug.cgi?id=123422

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2013-10-29  Eric Carlson  <eric.carlson@apple.com>

        [Mac MediaStream] implement AVFoundation backed MediaStreamSource
        https://bugs.webkit.org/show_bug.cgi?id=123316

        Reviewed by Jer Noble

        No new tests, existing tests updated.

        * CMakeLists.txt: Add MediaStreamSourceStates.cpp.

        * Modules/mediastream/MediaSourceStates.cpp:
        (WebCore::MediaSourceStates::MediaSourceStates): m_SourceStates -> m_sourceStates.
        (WebCore::MediaSourceStates::sourceType): Ditto.
        (WebCore::MediaSourceStates::facingMode): Ditto.
        * Modules/mediastream/MediaSourceStates.h: Ditto.
        * Modules/mediastream/MediaSourceStates.idl: Mark some attributes as optional.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::addTrack):
        (WebCore::MediaStream::removeTrack):
        (WebCore::MediaStream::addRemoteSource):
        (WebCore::MediaStream::removeRemoteSource):

        * Modules/mediastream/MediaStreamCapabilities.cpp:
        (WebCore::MediaStreamCapabilities::sourceType): MediaSourceStates -> MediaStreamSourceStates
        (WebCore::MediaStreamCapabilities::facingMode): Ditto.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Don't observe source changes directly, let the
            private track do that. Change private track parameter to ref because it can't be NULL.
        (WebCore::MediaStreamTrack::~MediaStreamTrack): Ditto.
        (WebCore::MediaStreamTrack::setSource): Pass through to private track.
        (WebCore::MediaStreamTrack::stopped): Ditto.
        (WebCore::MediaStreamTrack::states): Ditto.
        (WebCore::MediaStreamTrack::capabilities): Ditto.
        (WebCore::MediaStreamTrack::applyConstraints): Ditto.
        (WebCore::MediaStreamTrack::stopProducingData): Ditto.
        (WebCore::MediaStreamTrack::trackReadyStateChanged): Renamed from sourceStateChanged. Don't
            schedule an 'ended' event if called as a side effect of the stop() method having been
            called as per spec.
        (WebCore::MediaStreamTrack::trackMutedChanged): Renamed from sourceMutedChanged.
        (WebCore::MediaStreamTrack::trackEnabledChanged): Renamed from sourceEnabledChanged.
        (WebCore::MediaStreamTrack::stop): Pass through to private track.
        * Modules/mediastream/MediaStreamTrack.h:
        (WebCore::MediaStreamTrack::Observer::~Observer): Add virtual destructor.

        * Modules/mediastream/UserMediaRequest.cpp:
        (WebCore::UserMediaRequest::callSuccessHandler): Set track, not source, constraints.

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * bindings/js/JSMediaSourceStatesCustom.cpp:
        (WebCore::JSMediaSourceStates::facingMode): Return jsUndefined when the facing mode
            is Unknown.

        * platform/mediastream/MediaStreamCenter.h: Remove unused class forward defines and
            undefined method prototype.

        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::addSource): ASSERT if source is kind None.
        (WebCore::MediaStreamDescriptor::removeSource): Ditto.
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor):

        * platform/mediastream/MediaStreamSource.cpp:
        (WebCore::MediaStreamSource::setReadyState): Call startProducingData when readyState changes
            to Live, stopProducingData when it changes to Ended.
        (WebCore::MediaStreamSource::removeObserver): Call stop() when there are no more observers.
        (WebCore::MediaStreamSource::setEnabled): If passed false, do nothing unless all observers
            are disabled. Call startProducingData/stopProducingData when becoming enabled/disabled.
        (WebCore::MediaStreamSource::stop): Don't bother checking to see if other observers have
            stopped, the spec says that track.stop() should permanently stop the track's source.
        * platform/mediastream/MediaStreamSource.h:
        (WebCore::MediaStreamSource::name): Make virtual so derived classes can override.
        (WebCore::MediaStreamSource::setName): Ditto.
        (WebCore::MediaStreamSource::readyState): Ditto.
        (WebCore::MediaStreamSource::enabled): Ditto.
        (WebCore::MediaStreamSource::muted): Ditto.
        (WebCore::MediaStreamSource::setReadonly): Ditto.
        (WebCore::MediaStreamSource::remote): Ditto.
        (WebCore::MediaStreamSource::setRemote): Ditto.
        (WebCore::MediaStreamSource::startProducingData): Added.
        (WebCore::MediaStreamSource::stopProducingData): Added.

        * platform/mediastream/MediaStreamSourceCapabilities.h: Move MediaStreamSourceStates to
            its own file.

        * platform/mediastream/MediaStreamSourceStates.cpp: Added.
        (WebCore::MediaStreamSourceStates::facingMode): Moved here from MediaSourceStates so the 
            strings are available to platform code.
        (WebCore::MediaStreamSourceStates::sourceType): Ditto.
        * platform/mediastream/MediaStreamSourceStates.h: Added, moved from MediaStreamSourceCapabilities.h.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::create): Pass private track to constructor as PassRefPtr.
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate): Initialize member variables.
        (WebCore::MediaStreamTrackPrivate::~MediaStreamTrackPrivate): Unregister as source observer.
        (WebCore::MediaStreamTrackPrivate::setSource): Unregister/register as source observer.
        (WebCore::MediaStreamTrackPrivate::setEnabled): Enable/disable source, call client.
        (WebCore::MediaStreamTrackPrivate::stop): New. Set readyState to Ended, optionally stop source.
        (WebCore::MediaStreamTrackPrivate::setReadyState): Inline the logic from shouldFireTrackReadyStateChanged.
        (WebCore::MediaStreamTrackPrivate::constraints): New, passthrough to the source.
        (WebCore::MediaStreamTrackPrivate::states): Ditto.
        (WebCore::MediaStreamTrackPrivate::type): Ditto.
        (WebCore::MediaStreamTrackPrivate::capabilities): Ditto.
        (WebCore::MediaStreamTrackPrivate::applyConstraints): Ditto.
        (WebCore::MediaStreamTrackPrivate::sourceReadyStateChanged): React to source changes.
        (WebCore::MediaStreamTrackPrivate::sourceMutedChanged): Ditto.
        (WebCore::MediaStreamTrackPrivate::sourceEnabledChanged): Ditto.
        (WebCore::MediaStreamTrackPrivate::observerIsEnabled): Respond to source query.
        (WebCore::MediaStreamTrackPrivate::observerIsStopped): Ditto.
        * platform/mediastream/MediaStreamTrackPrivate.h:

        * platform/mediastream/mac/AVAudioCaptureSource.h: Added.
        * platform/mediastream/mac/AVAudioCaptureSource.mm: Added.

        * platform/mediastream/mac/AVCaptureDeviceManager.h: Added.
        * platform/mediastream/mac/AVCaptureDeviceManager.mm: Added.

        * platform/mediastream/mac/AVMediaCaptureSource.h: Added.
        * platform/mediastream/mac/AVMediaCaptureSource.mm: Added.

        * platform/mediastream/mac/AVVideoCaptureSource.h: Added.
        * platform/mediastream/mac/AVVideoCaptureSource.mm: Added.

        * platform/mediastream/mac/MediaStreamCenterMac.cpp:
        (WebCore::MediaStreamCenterMac::validateRequestConstraints): Implement.
        (WebCore::MediaStreamCenterMac::createMediaStream): Ditto.
        (WebCore::MediaStreamCenterMac::getMediaStreamTrackSources): Ditto.

        * platform/mock/MockMediaStreamCenter.cpp:
        (WebCore::initializeMockSources): Update for MediaStreamSourceStates changes.
        (WebCore::MockMediaStreamCenter::createMediaStream):

2013-10-29  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Layout error when the shape has negative top coordinate and it's applied on the second region
        <https://webkit.org/b/123346>

        Reviewed by David Hyatt.

        We have a layout error when there is a shape applied on the second region, and it has a negative 'top' coordinate.
        Since shapeInsideInfo::shapeLogicalTop() can return negative numbers, we need to check for it, when we're positioning
        the first line in the region.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-regions-with-negative-shape-top.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-29  Brady Eidson  <beidson@apple.com>

        Get IDBTransactionBackendLevelDBOperations *almost* ready to go cross platform.
        https://bugs.webkit.org/show_bug.cgi?id=123451

        Reviewed by NOBODY (My bad, non-reviewed, non-building code got in there)

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls): Remove the auto line I was trying from review feedback.

2013-10-29  Brady Eidson  <beidson@apple.com>

        Get IDBTransactionBackendLevelDBOperations *almost* ready to go cross platform.
        https://bugs.webkit.org/show_bug.cgi?id=123451

        Reviewed by Andreas Kling.

        This involves:
        - Splitting out IDBTransactionBackendLevelDB::Operation into its own header
        - Splitting out IDBDatabaseBackendImpl::PendingOpenCall into its own header
        - Reworking the LevelDB Operations to handle the base class IDBTransactionBackendInterface
        - Adding virtual methods in a few of the *Interface classes to support the above

        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBCallbacks.h:

        * Modules/indexeddb/IDBCursorBackendInterface.h:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setIndexKeys):
        (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
        (WebCore::IDBDatabaseBackendImpl::openConnection):
        (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
        * Modules/indexeddb/IDBDatabaseBackendImpl.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:

        * Modules/indexeddb/IDBOperation.h: Added.
        (WebCore::IDBOperation::~IDBOperation):

        * Modules/indexeddb/IDBPendingOpenCall.h: Added.
        (WebCore::IDBPendingOpenCall::create):
        (WebCore::IDBPendingOpenCall::callbacks):
        (WebCore::IDBPendingOpenCall::databaseCallbacks):
        (WebCore::IDBPendingOpenCall::version):
        (WebCore::IDBPendingOpenCall::transactionId):
        (WebCore::IDBPendingOpenCall::IDBPendingOpenCall):

        * Modules/indexeddb/IDBRequest.h:

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::CursorIterationOperation::create):
        (WebCore::IDBCursorBackendLevelDB::CursorAdvanceOperation::create):
        (WebCore::IDBCursorBackendLevelDB::CursorPrefetchIterationOperation::create):
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::scheduleTask):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCountOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleClearOperation):
        (WebCore::IDBTransactionBackendLevelDB::createCursorBackend):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::create):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::VersionChangeAbortOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-29  Antti Koivisto  <antti@apple.com>

        Make SimpleLineLayout::Layout a variable size object
        https://bugs.webkit.org/show_bug.cgi?id=123459

        Reviewed by Andreas Kling.

        Less memory, less indirection.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        (WebCore::SimpleLineLayout::create):
        (WebCore::SimpleLineLayout::Layout::create):
        (WebCore::SimpleLineLayout::Layout::Layout):
        * rendering/SimpleLineLayout.h:
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        * rendering/SimpleLineLayoutFunctions.h:
        (WebCore::SimpleLineLayout::computeFlowFirstLineBaseline):
        (WebCore::SimpleLineLayout::computeFlowLastLineBaseline):
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::end):

2013-10-29  Andreas Kling  <akling@apple.com>

        RenderObject::outlineStyleForRepaint() should return a reference.
        <https://webkit.org/b/123453>

        Kill a FIXME and make outlineStyleForRepaint() return a RenderStyle&.

        Reviewed by Antti Koivisto.

2013-10-29  Andreas Kling  <akling@apple.com>

        Move more of SVG resources cache to using RenderElement.
        <https://webkit.org/b/123452>

        Make some more RenderSVGResourcesCache methods take RenderElement&
        instead of RenderObject*.

        Also removed a double hash lookup in removeResourcesFromRenderer().

        Reviewed by Antti Koivisto.

2013-10-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove old Inspector.json version files and generators
        https://bugs.webkit.org/show_bug.cgi?id=123426

        Reviewed by Timothy Hatcher.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector-0.1.json: Removed.
        * inspector/Inspector-1.0.json: Removed.
        * inspector/generate-inspector-protocol-version: Removed.

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GTK] DOM bindings documentation errors
        https://bugs.webkit.org/show_bug.cgi?id=123448

        Reviewed by Carlos Garcia Campos.

        * bindings/gobject/WebKitDOMCustom.h: Basic documentation for
        return types.
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateFunction): Generate Returns documentation tag for
        non-void return types and provide basic documentation.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        Reset tests results.
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:

2013-10-24  Brent Fulgham  <bfulgham@apple.com>

        Invalid cast in WebCore::toRenderMathMLBlock
        https://bugs.webkit.org/show_bug.cgi?id=121728
        rdar://problem/15046151

        Reviewed by Dean Jackson.

        Tested by: mathml/arbitrary-markup.html

        * dom/Element.h: Expose childShouldCreateRenderer for
        MathML as well as SVG builds.
        * dom/Node.h: 
        (WebCore::Node::isMathMLElement): Added.
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::create): Create as MathML Element.
        (WebCore::MathMLElement::childShouldCreateRenderer):
        Only allow the child to emit a renderer if it is a
        MathML element.
        * mathml/MathMLElement.h:

2013-10-29  Andreas Kling  <akling@apple.com>

        SVG: applyStrokeStyleToContext should take a RenderElement&.
        <https://webkit.org/b/123447>

        ..and a RenderStyle& too, for that matter.

        Reviewed by Anders Carlsson.

        * rendering/svg/SVGRenderSupport.h:
        * rendering/svg/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext):

            Have this take a RenderElement& and RenderStyle& instead of
            raw pointers. Tweaked a silly-looking loop.

        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGShape.cpp:

            Moved BoundingRectStrokeStyleApplier helper class into the
            cpp file since it wasn't being used anywhere else.

        * rendering/svg/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/svg/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/svg/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):

            Remove ampersands.

2013-10-29  Antti Koivisto  <antti@apple.com>

        Multiple runs per line on simple line path
        https://bugs.webkit.org/show_bug.cgi?id=123446

        Reviewed by Andreas Kling.

        By allowing multiple runs per line we can support text flows with consecutive whitespaces in the middle.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Remove space test.
            The improved test coverage found a few more cases that we need to disallow.

        (WebCore::SimpleLineLayout::adjustRunOffsets):
            
            Round the run positions and widths so they match line boxes.
            Adjust for text-align.

        (WebCore::SimpleLineLayout::create):
        
            Split lines with consecutive spaces into runs.

        * rendering/SimpleLineLayout.h:
        (WebCore::SimpleLineLayout::Run::Run):
        * rendering/SimpleLineLayoutFunctions.cpp:
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::RunResolver::Iterator::resolver):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::lineIndex):
        (WebCore::SimpleLineLayout::RunResolver::Run::Run):
        (WebCore::SimpleLineLayout::RunResolver::Run::rect):
        (WebCore::SimpleLineLayout::RunResolver::Run::baseline):
        (WebCore::SimpleLineLayout::RunResolver::Run::text):
        (WebCore::SimpleLineLayout::RunResolver::Run::lineIndex):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator++):
        
            Removed unnecessary operators.

        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::RunResolver::Iterator::simpleRun):
        (WebCore::SimpleLineLayout::RunResolver::RunResolver):
        (WebCore::SimpleLineLayout::RunResolver::begin):
        (WebCore::SimpleLineLayout::RunResolver::end):
        
            Resolver -> RunResolver

        (WebCore::SimpleLineLayout::LineResolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::LineResolver::Iterator::operator*):
        (WebCore::SimpleLineLayout::LineResolver::LineResolver):
        (WebCore::SimpleLineLayout::LineResolver::begin):
        (WebCore::SimpleLineLayout::LineResolver::end):
        
            Add LineResolver around RunResolver. It resolves the line rectangles.

        (WebCore::SimpleLineLayout::runResolver):
        (WebCore::SimpleLineLayout::lineResolver):

2013-10-29  Chris Fleizach  <cfleizach@apple.com>

        AX: elements with explicit tabindex should expose AXFocused as writable, since mouse clicks can focus it
        https://bugs.webkit.org/show_bug.cgi?id=121335

        Reviewed by Mario Sanchez Prada.

        Re-order logic that determines if a <span> should appear as an accessible element. 
        The change is that if an element canSetFocus() it should always be in the AX tree.

        Test: accessibility/tabindex-elements-are-accessible.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):

2013-10-29  Philippe Normand  <pnormand@igalia.com>

        [GTK] enable media-stream in build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=123144

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Add new MediaStream files to the GTK port build.

2013-10-28  Chris Fleizach  <cfleizach@apple.com>

        AX: Webkit does not expose AXRequired on input type=file
        https://bugs.webkit.org/show_bug.cgi?id=123376

        Reviewed by Mario Sanchez Prada.

        File upload buttons should expose AXRequired, since they take an input state.

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::supportsRequiredAttribute):
        (WebCore::AccessibilityNodeObject::alternativeText):

2013-10-29  Jinwoo Song  <jinwoo7.song@samsung.com>

        Re-enable simple line layout for EFL
        https://bugs.webkit.org/show_bug.cgi?id=123402

        Reviewed by Antti Koivisto.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): 8-bit TextRun support is now enabled for EFL port, so the port
        can use the simple line layout.

2013-10-29  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed, follow-up to r158185. Export the required symbol.
        This should fix the Mac debug build.

        * WebCore.exp.in:

2013-10-29  Santosh Mahto  <santosh.ma@samsung.com>

        Text selected with double-click gets unselected after DOM modification
        https://bugs.webkit.org/show_bug.cgi?id=114227

        Reviewed by Ryosuke Niwa.

        Before this patch when selection is done by double-click (start and base remain
        same) and DOM is modified then selection gets vanished. This does not
        happen when selection is done by dragging mouse. This happens because
        on double-click base and extent remain the same and on DOM
        modification we update the selection with base and extent, so we loose
        the selection. Since in double-click case start/end contain the
        correct selection, same should be used after dom modification to
        update selection.

        Test: editing/selection/double-click-selection-with-dom-mutation.html

        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::textWasReplaced): use start/end to update
        selection in case double click selection. Added a check for base !=
        extent, if base != extent use base/extent to update the selection
        otherwise use start/end with directionality check.

2013-10-29  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Display anonymous regions in DRT
        https://bugs.webkit.org/show_bug.cgi?id=122963

        Reviewed by Alexandru Chiculita.

        After https://bugs.webkit.org/show_bug.cgi?id=119135, css regions are modelled using an anonymous
        RenderNamedFlowFragment object inside the block having a valid -webkit-flow-from.
        This patch changes the way elements | pseudo-elements with -webkit-flow-from are displayed
        in test dumps.

        Before:
            RenderRegion {DIV} at (200,200) size 52x52 [border: (1px solid #000000)]
        After:
            RenderBlock (positioned) {DIV} at (200,200) size 52x52 [border: (1px solid #000000)]
                RenderNamedFlowFragment at (1,1) size 50x50

        Before:
            Flow Threads
                Thread with flow-name 'article'
                Regions for flow 'article'
                    RenderRegion {DIV} #region_1
                    RenderRegion {DIV} #region_2
        After:
            Named flows
                Named flow 'article'
                Regions for named flow 'article'
                    RenderNamedFlowFragment (anonymous child of {DIV::before} #region_1)
                    RenderNamedFlowFragment (anonymous child of {DIV} #region_2)

        Changed existing tests based on the new dumps.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::renderName):
        * rendering/RenderNamedFlowFragment.h: Add a comment explaining the purpose of the class.
        * rendering/RenderRegion.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeRenderRegionList): Adjust function to display info for anonymous regions too.
        (WebCore::writeRenderNamedFlowThreads): Separate dump of valid and invalid regions for a named flow.

2013-10-29  Zan Dobersek  <zdobersek@igalia.com>

        Move writeIndent, overloaded << operators from RenderTreeAsText to TextStream
        https://bugs.webkit.org/show_bug.cgi?id=116012

        Reviewed by Simon Fraser.

        The writeIndent method and overloaded << operators for writing out vectors and points and rectangles
        of various types are not specific to the render tree nor do they depend on any rendering-specific interface.

        * page/scrolling/ScrollingStateNode.cpp:
        * page/scrolling/ScrollingStateNode.h:
        (ScrollingStateNode): Remove the writeIndent declaration, it's functionally the same as the TextStream method.
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        (GraphicsLayer): Ditto.
        * platform/graphics/filters/DistantLightSource.cpp: Remove the RenderTreeAsText.h inclusion or replace it with
        the inclusion of the TextStream.h header where required. The writeIndent method is now declared there.
        * platform/graphics/filters/FEBlend.cpp: Ditto.
        * platform/graphics/filters/FEColorMatrix.cpp: Ditto.
        * platform/graphics/filters/FEComponentTransfer.cpp: Ditto.
        * platform/graphics/filters/FEComposite.cpp: Ditto.
        * platform/graphics/filters/FEConvolveMatrix.cpp: Ditto.
        * platform/graphics/filters/FECustomFilter.cpp: Ditto.
        * platform/graphics/filters/FEDiffuseLighting.cpp: Ditto.
        * platform/graphics/filters/FEDisplacementMap.cpp: Ditto.
        * platform/graphics/filters/FEDropShadow.cpp: Ditto.
        * platform/graphics/filters/FEFlood.cpp: Ditto.
        * platform/graphics/filters/FEGaussianBlur.cpp: Ditto.
        * platform/graphics/filters/FEMerge.cpp: Ditto.
        * platform/graphics/filters/FEMorphology.cpp: Ditto.
        * platform/graphics/filters/FEOffset.cpp: Ditto.
        * platform/graphics/filters/FESpecularLighting.cpp: Ditto.
        * platform/graphics/filters/FETurbulence.cpp: Ditto.
        * platform/graphics/filters/SourceAlpha.cpp: Ditto.
        * platform/graphics/filters/SourceGraphic.cpp: Ditto.
        * platform/text/TextStream.cpp: Move the writeIndent and operators' definitions here.
        (WebCore::operator<<):
        (WebCore):
        (WebCore::writeIndent):
        * platform/text/TextStream.h: Move the writeIndent and operators' declarations here.
        (WebCore):
        (TextStream):
        (WebCore::TextStream::operator<<):
        * rendering/RenderTreeAsText.cpp: Move the writeIndent and operators' definitions into TextStream.
        (WebCore):
        * rendering/RenderTreeAsText.h: Move the writeIndent and operators' declarations into TextStream.
        (WebCore):

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        Clean up ScopedEventQueue
        https://bugs.webkit.org/show_bug.cgi?id=123408

        Reviewed by Darin Adler.

        Clean up the ScopedEventQueue implementation. ScopedEventQueue::instance() should return a reference to a
        NeverDestroyed<ScopedEventQueue> object. The static ScopedEventQueue::s_instance pointer is removed.

        The ScopedEventQueue destructor, the dispatchAllEvents method and the scope level incrementation/decrementation
        methods are made private. NeverDestroyed<ScopedEventQueue> and EventQueueScope are made friends of the
        ScopedEventQueue class so they can access the constructor and the incrementation/decrementation methods, respectively.

        ScopedEventQueue method definitions are reordered to follow the order of their declarations in the header file.
        ScopedEventQueue::dispatchAllEvents() now uses std::move to efficiently dispatch and clear all currently queued events.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchScopedEvent):
        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::instance):
        (WebCore::ScopedEventQueue::dispatchAllEvents):
        * dom/ScopedEventQueue.h:
        (WebCore::EventQueueScope::EventQueueScope):
        (WebCore::EventQueueScope::~EventQueueScope):

2013-10-28  Andreas Kling  <akling@apple.com>

        applyTextTransform() should take a const RenderStyle&.
        <https://webkit.org/b/123434>

        This function is always called with an existing RenderStyle object.

        Reviewed by Anders Carlsson.

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderSVGResource::applyResource() should take a const RenderStyle&.
        <https://webkit.org/b/123433>

        These functions are always called with an existing RenderStyle object
        so let them take a const reference instead of a raw pointer.
        Also sprinkled some missing OVERRIDEs.

        Reviewed by Anders Carlsson.

2013-10-28  Andreas Kling  <akling@apple.com>

        Remove unused RenderTextControl::textBaseStyle().
        <https://webkit.org/b/123432>

        Reviewed by Anders Carlsson.

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        HTML input type objects should be managed through std::unique_ptr
        https://bugs.webkit.org/show_bug.cgi?id=123160

        Reviewed by Darin Adler.

        Make the constructors of the InputType subclasses public. This makes it possible to use std::make_unique on these classes
        and makes the T::create() helpers redundant. New instances of these classes are now managed through std::unique_ptr.

        InputType::create() now uses a NeverDestroyed InputTypeFactoryMap that maps type names to InputTypeFactoryFunctions and
        gets populated when the method is first called and the map is still empty. Certain types are not added to the factory map
        if they're disabled at runtime.

        The factory is used to create the new InputType object if the requested type was found in the map, and TextInputType is used otherwise.

        * html/ButtonInputType.cpp:
        * html/ButtonInputType.h:
        (WebCore::ButtonInputType::ButtonInputType):
        * html/CheckboxInputType.cpp:
        * html/CheckboxInputType.h:
        (WebCore::CheckboxInputType::CheckboxInputType):
        * html/ColorInputType.cpp:
        * html/ColorInputType.h:
        (WebCore::ColorInputType::ColorInputType):
        * html/DateInputType.cpp:
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        * html/DateTimeInputType.h:
        (WebCore::DateTimeInputType::DateTimeInputType):
        * html/DateTimeLocalInputType.cpp:
        * html/DateTimeLocalInputType.h:
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * html/EmailInputType.cpp:
        * html/EmailInputType.h:
        (WebCore::EmailInputType::EmailInputType):
        * html/FileInputType.cpp:
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateType):
        * html/HTMLInputElement.h:
        * html/HiddenInputType.cpp:
        * html/HiddenInputType.h:
        (WebCore::HiddenInputType::HiddenInputType):
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::ImageInputType):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::createInputType): A templated helper that constructs a new InputType subclass object through std::make_unique.
        (WebCore::populateInputTypeFactoryMap): Populates the passed-in map with type-createInputType<T> pairs.
        (WebCore::InputType::create): Get the InputTypeFactoryFunction for the specified type, or fall back to TextInputType.
        (WebCore::InputType::createText):
        * html/InputType.h:
        * html/MonthInputType.cpp:
        * html/MonthInputType.h:
        (WebCore::MonthInputType::MonthInputType):
        * html/NumberInputType.cpp:
        * html/NumberInputType.h:
        (WebCore::NumberInputType::NumberInputType):
        * html/PasswordInputType.cpp:
        * html/PasswordInputType.h:
        (WebCore::PasswordInputType::PasswordInputType):
        * html/RadioInputType.cpp:
        * html/RadioInputType.h:
        (WebCore::RadioInputType::RadioInputType):
        * html/RangeInputType.cpp:
        * html/RangeInputType.h:
        * html/ResetInputType.cpp:
        * html/ResetInputType.h:
        (WebCore::ResetInputType::ResetInputType):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::SearchInputType):
        * html/SearchInputType.h:
        * html/SubmitInputType.cpp:
        * html/SubmitInputType.h:
        (WebCore::SubmitInputType::SubmitInputType):
        * html/TelephoneInputType.cpp:
        * html/TelephoneInputType.h:
        (WebCore::TelephoneInputType::TelephoneInputType):
        * html/TextInputType.cpp:
        * html/TextInputType.h:
        (WebCore::TextInputType::TextInputType):
        * html/TimeInputType.cpp:
        * html/TimeInputType.h:
        * html/URLInputType.cpp:
        * html/URLInputType.h:
        (WebCore::URLInputType::URLInputType):
        * html/WeekInputType.cpp:
        * html/WeekInputType.h:
        (WebCore::WeekInputType::WeekInputType):

2013-10-28  Brady Eidson  <beidson@apple.com>

        Refactor IDB factory creation.
        https://bugs.webkit.org/show_bug.cgi?id=123347

        Reviewed by Andreas Kling.

        - Rework how database directory location is passed around.
        - Make (some) SecurityOrigin arguments be references instead of pointers.
        - Add two SecurityOrigin arguments to opening databases for future use.

        * Modules/indexeddb/IDBFactory.cpp:
        (WebCore::IDBFactory::openInternal):

        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::create):
        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/PageGroupIndexedDatabase.cpp:
        (WebCore::PageGroupIndexedDatabase::PageGroupIndexedDatabase):
        (WebCore::PageGroupIndexedDatabase::from):
        (WebCore::PageGroupIndexedDatabase::factoryBackend):
        * Modules/indexeddb/PageGroupIndexedDatabase.h:

        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.cpp:
        (WebCore::WorkerGlobalScopeIndexedDatabase::WorkerGlobalScopeIndexedDatabase):
        (WebCore::WorkerGlobalScopeIndexedDatabase::from):
        (WebCore::WorkerGlobalScopeIndexedDatabase::indexedDB):
        * Modules/indexeddb/WorkerGlobalScopeIndexedDatabase.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::open):
        (WebCore::IDBBackingStoreLevelDB::openInMemory):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::computeFileIdentifier):
        (WebCore::computeUniqueIdentifier):
        (WebCore::IDBFactoryBackendLevelDB::IDBFactoryBackendLevelDB):
        (WebCore::IDBFactoryBackendLevelDB::getDatabaseNames):
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::openBackingStore):
        (WebCore::IDBFactoryBackendLevelDB::open):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        (WebCore::IDBFactoryBackendLevelDB::create):

        * WebCore.exp.in:

        * platform/DatabaseStrategy.cpp:
        (WebCore::DatabaseStrategy::createIDBFactoryBackend):
        * platform/DatabaseStrategy.h:

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderElement::style() should return a reference.
        <https://webkit.org/b/123414>

        Now that renderers always have style, go ahead and make style()
        return a RenderStyle&.

        There are countless opportunities for further cleanup enabled by
        this change. I'm simply passing &style() in many cases where we
        can really do something nicer instead.

        Reviewed by Anders Carlsson.

2013-10-28  Tim Horton  <timothy_horton@apple.com>

        Make TileController create the appropriate PlatformCALayer subclasses
        https://bugs.webkit.org/show_bug.cgi?id=123418

        Reviewed by Simon Fraser.

        Add PlatformCALayer::createCompatibleLayer, which is overridden in
        each of the subclasses to create a PlatformCALayer instance of the same
        subclass. This is used in TileController to make bare PlatformCALayers
        of the correct type (Mac, Win, or Remote).

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::createCompatibleLayer):
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Add createCompatibleLayer and implement it in the subclasses.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        (WebCore::TileController::tiledScrollingIndicatorLayer):
        (WebCore::TileController::createTileLayer):
        Make use of createCompatibleLayer when creating PlatformCALayers.

2013-10-28  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Add protocol API to expose content nodes addition/removal
        https://bugs.webkit.org/show_bug.cgi?id=123424

        Reviewed by Timothy Hatcher.

        Test: inspector-protocol/model/content-flow-content-nodes.html

        Adding two new inspector-protocol APIs to handle the cases when new elements are
        added or removed from a named flow. These APIs will trigger even though there
        is no region associated with the named flow.

        * inspector/Inspector.json:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::didRegisterNamedFlowContentElement):
        (WebCore::InspectorCSSAgent::didUnregisterNamedFlowContentElement):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElementImpl):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElementImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didRegisterNamedFlowContentElement):
        (WebCore::InspectorInstrumentation::didUnregisterNamedFlowContentElement):
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::registerNamedFlowContentElement):
        (WebCore::RenderNamedFlowThread::unregisterNamedFlowContentElement):

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused inspector/inline-javascript-imports.py
        https://bugs.webkit.org/show_bug.cgi?id=123425

        Reviewed by Timothy Hatcher.

        * inspector/inline-javascript-imports.py: Removed.

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused "externs" files and generators
        https://bugs.webkit.org/show_bug.cgi?id=123427

        Reviewed by Timothy Hatcher.

        * inspector/InjectedScriptExterns.js: Removed.
        * inspector/generate_protocol_externs.py: Removed.

2013-10-28  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream remaining PLATFORM(IOS) and ENABLE(REMOTE_INSPECTOR) pieces
        https://bugs.webkit.org/show_bug.cgi?id=123411

        Reviewed by Timothy Hatcher.

        Include an InspectorClient hook for when node searching is enabled / disabled.

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::didSetSearchingForNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setSearchingForNode):
        * inspector/InspectorOverlay.cpp:
        (WebCore::InspectorOverlay::didSetSearchingForNode):
        * inspector/InspectorOverlay.h:

2013-10-28  Benjamin Poulain  <benjamin@webkit.org>

        Rename applyPageScaleFactorInCompositor to delegatesPageScaling
        https://bugs.webkit.org/show_bug.cgi?id=123417

        Reviewed by Simon Fraser.

        * page/Frame.cpp:
        (WebCore::Frame::frameScaleFactor):
        * page/FrameView.cpp:
        (WebCore::FrameView::visibleContentScaleFactor):
        * page/Page.cpp:
        (WebCore::Page::setPageScaleFactor):
        * page/Settings.in:
        * platform/ScrollView.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMap):

2013-10-28  Myles C. Maxfield  <mmaxfield@apple.com>

        Parsing support for -webkit-text-decoration-skip: ink
        https://bugs.webkit.org/show_bug.cgi?id=123358

        Reviewed by Dean Jackson.

        Adds initial parsing support for parsing -webkit-text-decoration-skip with
        values of "none" and "ink". This work is behind the new
        ENABLE(CSS3_TEXT_DECORATION) compile-time flag.

        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/text-decoration-skip-roundtrip.html

        * Configurations/FeatureDefines.xcconfig: Adding ENABLE(CSS3_TEXT_DECORATION)
        * css/CSSComputedStyleDeclaration.cpp: Mapping internal representation of text-decoration-skip
        to a CSSValue
        (WebCore::renderTextDecorationSkipFlagsToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp: Actually parsing tokens
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseTextDecorationSkip):
        * css/CSSParser.h:
        * css/CSSPropertyNames.in: adding -webkit-text-decoration-skip
        * css/CSSValueKeywords.in: adding ink
        * css/DeprecatedStyleBuilder.cpp: Mapping from CSSValue to internal representation
        (WebCore::ApplyPropertyTextDecorationSkip::valueToDecorationSkip):
        (WebCore::ApplyPropertyTextDecorationSkip::applyValue):
        (WebCore::ApplyPropertyTextDecorationSkip::createHandler):
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * css/StyleResolver.cpp: decoration-skip uses DeprecatedStyleBuilder
        (WebCore::StyleResolver::applyProperty):
        * rendering/style/RenderStyle.h: Adding functions for modifying and accessing decoration-skip properties
        * rendering/style/RenderStyleConstants.h: Definition of internal representation
        * rendering/style/StyleRareInheritedData.cpp: Setting up constructors and comparators
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h: Holds actual value of internal representation

2013-10-28  Anders Carlsson  <andersca@apple.com>

        RunLoop::dispatch should take an std::function
        https://bugs.webkit.org/show_bug.cgi?id=123407

        Reviewed by Andreas Kling.

        * WebCore.exp.in:
        * platform/RunLoop.cpp:
        (WebCore::RunLoop::performWork):
        (WebCore::RunLoop::dispatch):
        * platform/RunLoop.h:

2013-10-28  Tim Horton  <timothy_horton@apple.com>

        Make TileController manipulate PlatformCALayers instead of CALayers
        https://bugs.webkit.org/show_bug.cgi?id=123279

        Reviewed by Simon Fraser.

        In the interest of making TileController more platform-independent
        (so that it can be used with the remote layer tree, and maybe Windows),
        move TileController onto our PlatformCALayer abstraction instead of
        direct manipulation of CALayers.

        Some fallout from this includes getting rid of special Mac-specific
        TileController-specific CALayer subclasses, and reworking tile
        painting to work in a more generic way.

        This is a first step, and doesn't get us all the way to a platform independent
        TileController, but more patches are forthcoming.

        No new tests, just a (largeish) refactor.

        * WebCore.exp.in:
        The signature of some methods has changed.

        * WebCore.xcodeproj/project.pbxproj:
        Remove WebTileLayer.*

        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::logExposedUnfilledArea):
        Use the "isTile" key on the CALayer dictionary instead of the layer's
        class to determine if it's a tile. TileController will set this on a tile
        when it is created, for now.

        * platform/graphics/TiledBacking.h:
        tiledScrollingIndicatorLayer() should return a PlatformCALayer.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::platformCALayerIncrementRepaintCount):
        * platform/graphics/ca/PlatformCALayerClient.h:
        The PlatformCALayerClient paintContents and incrementRepaintCount callbacks
        should include the platformCALayer that caused the callback.

        * platform/graphics/ca/PlatformCALayer.h:
        Add LayerTypeSimpleLayer, which is similar to LayerTypeWebLayer
        except it just calls back its client to paint, instead of doing
        complicated things with repaint rects. This is so that TileController
        doesn't re-enter drawLayerContents when asking its GraphicsLayer
        to paint for each PlatformCALayer (it will be entering drawLayerContents
        for the first time for each layer). It also happens to be useful
        for things like the tile controller overlay, which don't need
        all that complication.

        Add LayerTypeTiledBackingTileLayer, which is used simply to distinguish
        TileController Tile layers from other LayerTypeSimpleLayers.

        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/LayerPool.mm:
        (WebCore::LayerPool::addLayer):
        (WebCore::LayerPool::takeLayerWithSize):
        LayerPool should operate on PlatformCALayers now.

        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        Set the "isTile" key on the CALayer to true for TiledBackingTileLayers,
        so that the scrolling performance logging can tell a tile apart from
        any other layer, on the scrolling thread, without touching PlatformCALayers
        or the TileController or any other main-thread data structures.

        (PlatformCALayerMac::setEdgeAntialiasingMask): Added.
        * platform/graphics/ca/mac/TileController.h:
        Remove references to Objective-C classes; instead use PlatformCALayer everywhere.
        TileController is now a PlatformCALayerClient, and the layers it owns are
        all PlatformCALayers (and it is constructed with a PlatformCALayer, etc.).
        Hand in the tile debug border color as a WebCore color, instead of a CGColorRef.
        blankPixelCountForTiles() now operates on a list of PlatformLayers instead of
        WebTileLayers specifically, since WebTileLayer is gone.
        Make drawTileMapContents private because WebTileCacheMapLayer no longer exists.

        (WebCore::TileController::platformCALayerDrawsContent):
        All of the layers who have TileController as their client paint their contents.

        (WebCore::TileController::platformCALayerContentsOpaque):
        This will only be called for layers which paint via drawLayerContents,
        so it's OK that we don't special-case the debugging overlay here.

        (WebCore::TileController::owningGraphicsLayer):
        Return the GraphicsLayer that owns the TileController's main
        layer, via its conformance to PlatformCALayerClient. This is
        a bit strange (because it's not strictly a GraphicsLayer, despite
        always being so at the moment), but is done for clarity inside
        TileController itself.

        * platform/graphics/ca/mac/TileController.mm:
        Remove CALayer (WebCALayerDetails), WebTiledScrollingIndicatorLayer,
        and a bunch of includes that we don't need anymore.

        (WebCore::TileController::create):
        (WebCore::TileController::TileController):
        TileController is passed a PlatformCALayer for the tile cache root layer,
        instead of a WebTiledBackingLayer. It also creates a PlatformCALayer with
        LayerTypeLayer instead of a bare CALayer for the container layer.
        It's OK to remove the transaction because it was only used to stop
        the implicit animation, which PlatformCALayer will do for us.

        (WebCore::TileController::~TileController):
        Clear the owner of the PlatformCALayers which the TileController previously owned,
        so they don't try to call back a destroyed TileController.

        (WebCore::TileController::tileCacheLayerBoundsChanged):
        (WebCore::TileController::setNeedsDisplay):
        Straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::setTileNeedsDisplayInRect):
        Adjustments towards use of PlatformCALayer; we need FloatRects so we can
        pass pointers to PlatformCALayer::setNeedsDisplay.

        (WebCore::TileController::platformCALayerPaintContents):
        Replace drawLayer with platformCALayerPaintContents, which will be called
        back from our various WebSimpleLayers. If the PlatformCALayer is our
        tiled scrolling debug indicator, paint that. Otherwise, it's a tile.
        Make use of drawLayerContents() to paint the tile contents.
        Make use of drawRepaintIndicator() to paint the repaint indicator if needed.
        Move scrolling performance logging code that used to be in WebTileLayer here.

        (WebCore::TileController::platformCALayerDeviceScaleFactor):
        (WebCore::TileController::platformCALayerShowDebugBorders):
        (WebCore::TileController::platformCALayerShowRepaintCounter):
        Forward these to the owning GraphicsLayerCA, because it will have the right answers.

        (WebCore::TileController::setScale):
        Adjustments towards use of PlatformCALayer; remove some code that Simon
        caused to be unused in 156291 but did not remove.

        (WebCore::TileController::setAcceleratesDrawing):
        (WebCore::TileController::setTilesOpaque):
        (WebCore::TileController::setVisibleRect):
        (WebCore::TileController::revalidateTiles):
        (WebCore::TileController::setTileDebugBorderWidth):
        (WebCore::TileController::setTileDebugBorderColor):
        (WebCore::TileController::bounds):
        (WebCore::TileController::blankPixelCount):
        (WebCore::TileController::blankPixelCountForTiles):
        (WebCore::queueTileForRemoval):
        (WebCore::TileController::setNeedsRevalidateTiles):
        (WebCore::TileController::ensureTilesForRect):
        (WebCore::TileController::retainedTileBackingStoreMemory):
        Straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::updateTileCoverageMap):
        Adjustments towards use of PlatformCALayer; rename backgroundColor
        to visibleRectIndicatorColor, since it's actually a border, not a background.

        (WebCore::TileController::tiledScrollingIndicatorLayer):
        Create a LayerTypeSimpleLayer PlatformCALayer for the tiled scrolling indicator.
        It will be asked to paint straightforwardly, like a CALayer would.
        Create a LayerTypeLayer PlatformCALayer for the visible rect indicator.
        It doesn't need to paint anything, so it doesn't get an owner.

        (WebCore::TileController::createTileLayer):
        When creating a new tile layer, adopt it by setting its owner.
        Otherwise, straightforward adjustments towards use of PlatformCALayer.

        (WebCore::TileController::platformCALayerIncrementRepaintCount):
        Manage repaint counts for tiles in TileController now.

        (WebCore::TileController::drawTileMapContents):
        Adjustments towards use of PlatformCALayer.

        * platform/graphics/ca/mac/WebTileLayer.h: Removed.
        * platform/graphics/ca/mac/WebTileLayer.mm: Removed.
        We don't need WebTileLayer anymore, tiles are now just WebSimpleLayers
        owned by TileController. Its behavior has been moved into TileController.

        * platform/graphics/ca/mac/WebTiledBackingLayer.h:
        * platform/graphics/ca/mac/WebTiledBackingLayer.mm:
        (-[WebTiledBackingLayer createTileController:]):
        Add createTileController: so that the WebTiledBackingLayer's owner can
        hand the TileController the PlatformCALayer for the WebTiledBackingLayer
        without propagating additional usage of PlatformCALayer::platformCALayer(),
        which we need to remove in light of the remote layer tree work.

        (-[WebTiledBackingLayer setBorderColor:]):

        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Add an empty implementation of setEdgeAntialiasingMask.
        We'll probably want to implement it before adopting TileController on Windows.

        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::displayCallback):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerPaintContents):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient::platformCALayerIncrementRepaintCount):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::LayerClient::platformCALayerPaintContents):
        (WebCore::LayerClient::platformCALayerIncrementRepaintCount):
        Adjust for new parameters on PlatformCALayerClient callbacks.

        * platform/graphics/mac/WebLayer.h:
        Add WebSimpleLayer, which inherits directly from CALayer, and make
        our standard WebLayer (which is used for compositing layers in web content)
        inherit from that.

        * platform/graphics/mac/WebLayer.mm:
        Move most of the behavior of WebLayer onto WebSimpleLayer, except for its
        complex painting code. That stays as an override on WebLayer.

        (WebCore::drawLayerContents):
        Use the PlatformCALayer's PlatformLayer - if it exists - to extract
        fine-grained repaint rects. If it doesn't, we'll just use the CGContext's
        clip rect as our single repaint rect.
        Rename platformLayer to platformCALayer for accuracy.
        Remove special code for CATiledLayer since we ought not use it on Mac anymore.

        (WebCore::drawRepaintIndicator):
        Factor repaint indicator code out into its own function so that TileController
        can use it. It can't be called from drawLayerContents for TileController, since
        the PlatformCALayer that TileController passes in to drawLayerContents is actually
        that of the tile cache's root layer, not the tile itself.
        Also, add a custom background color parameter so TileController can override
        the default green color with its own standard purple.

        (-[WebLayer drawInContext:]):
        (-[WebSimpleLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer drawInContext:]):
        Removed a param from drawLayerContents because it's trivially acquirable
        from the PlatformCALayer.

2013-10-24  Sam Weinig  <sam@webkit.org>

        Move RenderBlock functions only used by RenderBlockFlow to RenderBlockFlow
        https://bugs.webkit.org/show_bug.cgi?id=123318

        Reviewed by David Hyatt.

        * rendering/LineLayoutState.h:
        Move FloatWithRect from RenderBlock.

        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        Move pagination and float functions.

2013-10-28  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Add support for order inside grid items
        https://bugs.webkit.org/show_bug.cgi?id=123208

        Reviewed by Antti Koivisto.

        Based on Blink r153457 and r153536 by <jchaffraix@chromium.org>

        Added support for sorting grid items by using -webkit-order
        property. Used OrderIterator to implement it so it had to be moved
        out of RenderFlexibleBox to be shared with RenderGrid.

        Tests: fast/css-grid-layout/grid-item-order-auto-flow-resolution.html
               fast/css-grid-layout/grid-item-order-paint-order.html

        * CMakeLists.txt: Added new file.
        * GNUmakefile.list.am: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/OrderIterator.cpp: Added. Ripped out of RenderFlexibleBox.
        (WebCore::OrderIterator::OrderIterator):
        (WebCore::OrderIterator::setOrderValues): Use std::move semantics.
        (WebCore::OrderIterator::first): Use an integer as iterator.
        (WebCore::OrderIterator::next): Ditto.
        (WebCore::OrderIterator::reset): Ditto.
        * rendering/OrderIterator.h: Added.
        (WebCore::OrderIterator::currentChild):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::RenderFlexibleBox):
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::RenderGrid):
        (WebCore::RenderGrid::placeItemsOnGrid):
        (WebCore::RenderGrid::populateExplicitGridAndOrderIterator):
        (WebCore::RenderGrid::paintChildren):
        * rendering/RenderGrid.h:

2013-10-28  Afonso R. Costa Jr.  <afonso.costa@samsung.com>

        Methods on window.internals shouldn't pass a document.
        https://bugs.webkit.org/show_bug.cgi?id=107301

        Reviewed by Alexey Proskuryakov.

        Each 'Internals' instance is associated with a 'Document'. So, it
        is not necessary to pass a document as argument. Only nodesFromRect and
        layerTreeAsText methods were kept because, in some Layout Tests, the
        'Document' object is not the same used by Internals::contextDocument.

        * testing/Internals.cpp: Removed 'document' parameter.
        (WebCore::Internals::animationsAreSuspended):
        (WebCore::Internals::suspendAnimations):
        (WebCore::Internals::resumeAnimations):
        (WebCore::Internals::inspectorHighlightRects):
        (WebCore::Internals::inspectorHighlightObject):
        (WebCore::Internals::setScrollViewPosition):
        (WebCore::Internals::setPagination):
        (WebCore::Internals::configurationForViewport):
        (WebCore::Internals::paintControlTints):
        (WebCore::Internals::setDelegatesScrolling):
        (WebCore::Internals::touchPositionAdjustedToBestClickableNode):
        (WebCore::Internals::touchNodeAdjustedToBestClickableNode):
        (WebCore::Internals::touchPositionAdjustedToBestContextMenuNode):
        (WebCore::Internals::touchNodeAdjustedToBestContextMenuNode):
        (WebCore::Internals::bestZoomableAreaForTouchPoint):
        (WebCore::Internals::lastSpellCheckRequestSequence):
        (WebCore::Internals::lastSpellCheckProcessedSequence):
        (WebCore::Internals::wheelEventHandlerCount):
        (WebCore::Internals::touchEventHandlerCount):
        (WebCore::Internals::setBatteryStatus):
        (WebCore::Internals::setNetworkInformation):
        (WebCore::Internals::setDeviceProximity):
        (WebCore::Internals::hasSpellingMarker):
        (WebCore::Internals::hasAutocorrectedMarker):
        (WebCore::Internals::isOverwriteModeEnabled):
        (WebCore::Internals::toggleOverwriteModeEnabled):
        (WebCore::Internals::consoleMessageArgumentCounts):
        (WebCore::Internals::hasGrammarMarker):
        (WebCore::Internals::numberOfScrollableAreas):
        (WebCore::Internals::isPageBoxVisible):
        (WebCore::Internals::repaintRectsAsText):
        (WebCore::Internals::scrollingStateTreeAsText):
        (WebCore::Internals::mainThreadScrollingReasons):
        (WebCore::Internals::nonFastScrollableRects):
        (WebCore::Internals::garbageCollectDocumentResources):
        (WebCore::Internals::insertAuthorCSS):
        (WebCore::Internals::insertUserCSS):
        (WebCore::Internals::shortcutIconURLs):
        (WebCore::Internals::allIconURLs):
        (WebCore::Internals::setHeaderHeight):
        (WebCore::Internals::setFooterHeight):
        (WebCore::Internals::webkitWillEnterFullScreenForElement):
        (WebCore::Internals::webkitDidEnterFullScreenForElement):
        (WebCore::Internals::webkitWillExitFullScreenForElement):
        (WebCore::Internals::webkitDidExitFullScreenForElement):
        (WebCore::Internals::startTrackingRepaints):
        (WebCore::Internals::stopTrackingRepaints):
        (WebCore::Internals::getCurrentCursorInfo):
        * testing/Internals.h:
        (WebCore::Internals::setPagination):
        * testing/Internals.idl:

2013-10-28  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        Remove HTMLMediaElement.startTime
        https://bugs.webkit.org/show_bug.cgi?id=123264

        Reviewed by Eric Carlson.

        Patch based on one by: philipj@opera.com
        Blink review URL: https://codereview.chromium.org/32583003

        startTime has been removed from the HTMLMediaElement and its use
        in the rest of components.

        * Modules/mediacontrols/mediaControlsApple.js:
        (Controller.prototype.handleRewindButtonClicked):
        (Controller.prototype.handleTimelineMouseMove):
        (Controller.prototype.updateDuration):
        (Controller.prototype.updateTime): Removed used of startTime().
        * bindings/gobject/WebKitDOMCustom.cpp:
        (webkit_dom_html_media_element_get_start_time):
        * bindings/gobject/WebKitDOMCustom.h:
        * bindings/gobject/WebKitDOMCustom.symbols: Added phony function.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::isBlockedOnMediaController): Removed
        use of startTime()
        * html/HTMLMediaElement.h:
        * html/HTMLMediaElement.idl: Removed startTime()
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSliderThumb): Removed use of
        startTime()

2013-10-28  Andreas Kling  <akling@apple.com>

        RenderElement::m_style should be a Ref.
        <https://webkit.org/b/123401>

        Made RenderElement::m_style a Ref. This codifies the fact that it
        can never be null after construction.

        Removed a couple of unnecessary null checks that were exposed as
        compilation failures.

        Reviewed by Antti Koivisto.

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Name all the GLib timeout sources
        https://bugs.webkit.org/show_bug.cgi?id=123229

        Reviewed by Anders Carlsson.

        Give a name to GLib timeout sources, this is helpful when
        profiling WebKitGTK applications.

        No new tests, no change in functionality.

2013-10-28  Philippe Normand  <pnormand@igalia.com>

        MediaStreamTrackPrivate's m_client uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=123403

        Reviewed by Eric Carlson.

        No new tests, no change in functionality.

        * platform/mediastream/MediaStreamTrackPrivate.cpp:
        (WebCore::MediaStreamTrackPrivate::MediaStreamTrackPrivate):
        Initialize the m_client member variable.

2013-10-28  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add crypto idl files to EXTRA_DIST and remove
        css/fullscreenQuickTime.css that was removed.

2013-10-28  Antti Koivisto  <antti@apple.com>

        Prepare simple line layout to support multiple runs per line
        https://bugs.webkit.org/show_bug.cgi?id=123400

        Reviewed by Andreas Kling.

        Bunch of renaming and some refactoring for future support for text runs.

        SimpleLineLayout::Lines -> SimpleLineLayout::Layout and becomes a class instead of a typedef.
        SimpleLineLayout::Resolver::Line -> SimpleLineLayout::Resolver::Run
        SimpleLineLayout::createLines() -> SimpleLineLayout::create()
        RenderBlockFlow::simpleLines() -> RenderBlockFlow::simpleLineLayout()
        RenderText::simpleLines() -> RenderText::simpleLineLayout()
        
        Added resolver construction functions:
        
        SimpleLineLayout::runResolver()
        SimpleLineLayout::lineResolver()

2013-10-28  Mario Sanchez Prada  <mario.prada@samsung.com>

        [GTK] Expose title and alternative text for links in image maps
        https://bugs.webkit.org/show_bug.cgi?id=84045

        Reviewed by Chris Fleizach.

        Change the way we decide when the title attribute should be
        used for the accessible description, by not relying in the
        titleTagShouldBeUsedInDescriptionField() helper function but
        in whether we have found a visible text for it or not.

        This actually mimics what the Mac port does and so makes possible
        to share both the layout test and its expected results.

        * accessibility/atk/WebKitAccessibleUtil.cpp:
        (accessibilityDescription): Update the method to determine
        whether the title attribute should be used for the description.

2013-10-28  Bastien Nocera <hadess@hadess.net>

        Replace 0 timeouts g_timeout_add() by g_idle_add()
        https://bugs.webkit.org/show_bug.cgi?id=123260

        Reviewed by Carlos Garcia Campos.

        A zero timeout should be equivalent to using g_idle_add_full(G_PRIORITY_DEFAULT, ...)
        without the nagging feeling that the wrong API was used.

        No new tests, no change in functionality.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Use g_idle_add() instead
        of 0-timer.
        (WebCore::MediaPlayerPrivateGStreamer::videoChanged):
        (WebCore::MediaPlayerPrivateGStreamer::audioChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: Ditto.
        (WebCore::MediaPlayerPrivateGStreamerBase::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamerBase::muteChanged):
        * platform/gtk/GtkDragAndDropHelper.cpp: Ditto.
        (WebCore::GtkDragAndDropHelper::handleDragLeave):

2013-10-28  Zan Dobersek  <zdobersek@igalia.com>

        Re-enable simple line layout for GTK
        https://bugs.webkit.org/show_bug.cgi?id=123388

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor): 8-bit TextRun support is now enabled for the GTK port, so the port
        can use the simple line layout.

2013-10-27  Andreas Kling  <akling@apple.com>

        Fix 4 asserting SVG tests after r158097.

        RenderElement::setStyle() is, quite surprisingly, a virtual function
        with a single override in RenderSVGBlock.
        To match the old behavior, we have to rewrite the display type from
        any inline type to block instead.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle):

2013-10-27  Andreas Kling  <akling@apple.com>

        Tone down overzealous assertion from r158097.

        RenderElement::initializeStyle() really only cares that there are no
        text renderers that we should be calling styleDidChange() on.

        Tweak the code to only check that there are no text children.

        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::initializeStyle):

2013-10-27  Antti Koivisto  <antti@apple.com>

        Enable center and right text alignment for simple lines
        https://bugs.webkit.org/show_bug.cgi?id=123398

        Reviewed by Andreas Kling.

        Support text-align:center and text-align:right on simple line layout path.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            text-align:justify is still not supported.

        (WebCore::SimpleLineLayout::computeLineLeft):
        (WebCore::SimpleLineLayout::createLines):
        
            Do a rounding dance that matches the line boxes.

        * rendering/SimpleLineLayout.h:
        
            Add left position to lines.

        * rendering/SimpleLineLayoutResolver.h:
        (WebCore::SimpleLineLayout::Resolver::Line::rect):
        
            We now do rounding during layout.

        (WebCore::SimpleLineLayout::Resolver::Line::baseline):

2013-10-27  Andreas Kling  <akling@apple.com>

        Renderers should receive their style at construction.
        <https://webkit.org/b/123396>

        Pass the RenderStyle to all non-text renderer constructors.
        After construction, initializeStyle() must be called (as a stopgap
        measure) until we are able to do style-derived initialization
        without virtual function calls.

        With this change, RenderElement::m_style is never null. Subsequent
        patches will add enforcement for this and also make style() return
        a RenderStyle&.

        I'm adding three FIXME's in this patch:

            - createRendererIfNeeded() calls AnimationController to set up
              the initial style manually instead of asking RenderElement's
              setAnimatedStyle() to do it. This can probably be done in a
              nicer way, but it's not clear yet how.

            - ImageContentData::createRenderer() does a bit of unnecessary
              work. This should be easy to clean up but got too distracting
              to be part of this patch.

            - Document::createRenderTree() creates the RenderView with an
              initial dummy RenderStyle. I've done this because resolving
              the document style assumes we already have a RenderView.

        For styleWillChange() implementations to detect that they are
        reacting to the initial style, I've added a hasInitializedStyle()
        function on RenderElement. This will return false until you've
        called initializeStyle() on the renderer. This should go away
        along with initializeStyle() eventually.

        Reviewed by Antti Koivisto.

2013-10-26  Tim Horton  <timothy_horton@apple.com>

        [mac] Remove WebTiledLayer
        https://bugs.webkit.org/show_bug.cgi?id=123395

        Reviewed by Anders Carlsson.

        Mac doesn't use CATiledLayer at all anymore. We have to keep
        LayerTypeTiledLayer around for Windows, for now, but we can
        get rid of WebTiledLayer and some related Mac-specific code.

        No new tests, just removing dead code.

        * WebCore.xcodeproj/project.pbxproj:
        Remove WebTiledLayer.*

        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        Remove synchronouslyDisplayTilesInRect, which was only used for WebTiledLayer on Mac.
        Remove WebTiledLayer instantiation and setup code.

        * platform/graphics/mac/WebTiledLayer.h: Removed.
        * platform/graphics/mac/WebTiledLayer.mm: Removed.

2013-10-26  Andreas Kling  <akling@apple.com>

        CTTE: RenderImageResourceStyleImage always has a StyleImage.
        <https://webkit.org/b/123390>

        Codify the fact that RenderImageResourceStyleImage always wraps an
        existing StyleImage object.

        Reviewed by Antti Koivisto.

2013-10-26  Antti Koivisto  <antti@apple.com>

        Revert some accidental changes.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        * css/CSSFontSelector.h:

2013-10-26  Mark Lam  <mark.lam@apple.com>

        Gardening: fixed broken build.
        https://bugs.webkit.org/show_bug.cgi?id=123354.

        * css/CSSFontSelector.h:

2013-10-26  Antti Koivisto  <antti@apple.com>

        fast/frames/seamless/seamless-nested-crash.html asserts on wk2 only
        https://bugs.webkit.org/show_bug.cgi?id=123354

        Reviewed by Andreas Kling.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Don't enable simple line layout if the primary font is loading. The code expects
            to use the primary font metrics for all lines but those won't match the fallbacks
            when font is not loaded.

2013-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Deprecate public dispatch_event method in objects implementing EventTarget interface
        https://bugs.webkit.org/show_bug.cgi?id=123261

        Reviewed by Gustavo Noronha Silva.

        The interface function should be used instead.

        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetFunctionDeprecationInformation): Helper function to return the
        version when the function was deprecated and the function
        replacing the deprecated one.
        (GenerateFunction): Check if the function is deprecated to mark it
        as such in the header and API docs.
        * bindings/scripts/gobject-generate-headers.pl: Replace the unused
        WEBKIT_OBSOLETE_API macro with new macros to mark function as
        deprecated, using the glib macros so that we don't need checks for
        the platform.
        * bindings/scripts/test/GObject/WebKitDOMTestActiveDOMObject.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCustomNamedGetter.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventConstructor.h:
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.h:
        * bindings/scripts/test/GObject/WebKitDOMTestException.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/GObject/WebKitDOMattribute.h:

2013-10-25  Mark Lam  <mark.lam@apple.com>

        DatabaseManager's ProposedDatabases need to be thread-safe.
        https://bugs.webkit.org/show_bug.cgi?id=123313.

        Reviewed by Geoffrey Garen.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::existingDatabaseContextFor):
        (WebCore::DatabaseManager::registerDatabaseContext):
        (WebCore::DatabaseManager::unregisterDatabaseContext):
        (WebCore::DatabaseManager::didConstructDatabaseContext):
        (WebCore::DatabaseManager::didDestructDatabaseContext):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::addProposedDatabase):
        (WebCore::DatabaseManager::removeProposedDatabase):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:

2013-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Upstream ENABLE(REMOTE_INSPECTOR) and enable on iOS and Mac
        https://bugs.webkit.org/show_bug.cgi?id=123111

        Reviewed by Timothy Hatcher.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in:

2013-10-25  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] CORS-enabled fetch for shape image values
        https://bugs.webkit.org/show_bug.cgi?id=123114

        Reviewed by Andreas Kling.

        Access to shape images is now controlled by CORS CSS shape per
        http://dev.w3.org/csswg/css-shapes/#shape-outside-property.
        Previously shape images had to be same-origin.

        Shape image URL access is defined by the same logic that defines
        canvas tainting: same-origin and data URLs are allowed and images
        with a "Access-Control-Allow-Origin:" header that's either "*" or
        that matches the document's origin.

        A PotentiallyCrossOriginEnabled RequestOriginPolicy was added to
        ResourceLoaderOptions, to indicate that a "potentially CORS-enabled fetch"
        was to be undertaken. The CSSImageValue::cachedImage() method handles this
        option by effectively setting the "Origin:" request header (see
        updateRequestForAccessControl() in CrossOriginAccessControl.cpp).
        StyleResolver::loadPendingShapeImage() uses the new ResourceLoaderOption.

        The static ShapeInsideInfo and ShapeOutsideInfo isEnabledFor() method
        now performs the CORS check for image valued shapes. The private
        isOriginClean() method from CanvasRenderingContext2D has been moved to
        the CachedImage class so that it can be shared by the Canvas and Shape
        implementations. It checks the response headers per the CORS spec.

        Test: http/tests/security/shape-image-cors.html

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage): Handle the new ResourceLoaderOption.
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingShapeImage): Set the new ResourceLoaderOption.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createPattern): Use the CachedImage::isOriginClean().
        * loader/ResourceLoaderOptions.h: Added PotentiallyCrossOriginEnabled to RequestOriginPolicy.
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::isOriginClean): Migrated from CanvasRenderingContext2D.
        * loader/cache/CachedImage.h:
        * rendering/shapes/ShapeInfo.cpp:
        (WebCore::::checkImageOrigin): Do the CORS check and log an error message if neccessary.
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInsideInfo.cpp:
        (WebCore::ShapeInsideInfo::isEnabledFor): Call checkImageOrigin() for images.
        * rendering/shapes/ShapeOutsideInfo.cpp:
        (WebCore::ShapeOutsideInfo::isEnabledFor): Ditto.

2013-10-25  Jer Noble  <jer.noble@apple.com>

        [MSE] Fix runtime errors caused by mediasource IDL attributes.
        https://bugs.webkit.org/show_bug.cgi?id=123352

        Reviewed by Eric Carlson.

        Due to http://webkit.org/b/123178, MediaSource classes must add a GenerateIsReachable
        (and also a JSGenerateToJSObject) attribute to avoid runtime asserts and crashes.

        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediasource/WebKitMediaSource.idl:
        * Modules/mediasource/WebKitSourceBufferList.idl:

2013-10-25  Jacky Jiang  <zhajiang@blackberry.com>

        [BlackBerry] Browser crashed at PlatformGraphicsContext::addDrawLineForText() when trying to upload a video to youtube
        https://bugs.webkit.org/show_bug.cgi?id=123349

        Reviewed by George Staikos.
        Internally reviewed by George Staikos, Konrad Piascik, Eli Fidler and Arvid Nilsson.

        Browser crashed when dereferencing null PlatformGraphicsContext*.
        In FrameView::paintControlTints(), we intentionally constructed GraphicsContext
        with null PlatformGraphicsContext* and disabled painting by doing
        context.setUpdatingControlTints(true). So we should not go further in
        GraphicsContext::drawLineForText() if painting is disabled.
        Check paintingDisabled() for the other functions in PathBlackBerry.cpp
        as well; otherwise, it is likely we will crash at those places.

        * platform/graphics/blackberry/PathBlackBerry.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):
        (WebCore::GraphicsContext::drawLineForText):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::clipOut):

2013-10-25  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding platform implementation of MediaStreamTrack
        https://bugs.webkit.org/show_bug.cgi?id=123301

        Reviewed by Eric Carlson.

        No new tests needed.

        * CMakeLists.txt:
        * Modules/mediastream/AudioStreamTrack.cpp:
        (WebCore::AudioStreamTrack::create): Create method now receives a MediaStreamTrackPrivate as parameter.

        (WebCore::AudioStreamTrack::AudioStreamTrack):
        * Modules/mediastream/AudioStreamTrack.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Constructor now iterates through a set of MediaStreamTrackPrivate
        instances to create each MediaStreamTrack of MediaStream.

        (WebCore::MediaStream::addRemoteSource): Calling AudioStreamTrack and VideoStreamTrack with
        MediaStreamTrackPrivate as parameter.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::MediaStreamTrack): Constructor now receives a MediaStreamTrackPrivate, instead of a
        MediaStreamSource.

        (WebCore::MediaStreamTrack::~MediaStreamTrack):
        (WebCore::MediaStreamTrack::kind): Calling method from MediaStreamTrackPrivate.

        (WebCore::MediaStreamTrack::setSource): Ditto.

        (WebCore::MediaStreamTrack::id): Ditto.

        (WebCore::MediaStreamTrack::label): Ditto.

        (WebCore::MediaStreamTrack::enabled): Ditto.

        (WebCore::MediaStreamTrack::setEnabled): Ditto.

        (WebCore::MediaStreamTrack::muted): Ditto.

        (WebCore::MediaStreamTrack::readonly): Ditto.

        (WebCore::MediaStreamTrack::remote): Ditto.

        (WebCore::MediaStreamTrack::readyState): Ditto.

        (WebCore::MediaStreamTrack::states):
        (WebCore::MediaStreamTrack::capabilities):
        (WebCore::MediaStreamTrack::clone):
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::ended): Ditto.

        (WebCore::MediaStreamTrack::sourceStateChanged): Ditto.

        (WebCore::MediaStreamTrack::sourceMutedChanged): Ditto.

        (WebCore::MediaStreamTrack::sourceEnabledChanged): Ditto.
        (WebCore::MediaStreamTrack::configureTrackRendering):
        (WebCore::MediaStreamTrack::stopped): Ditto.

        (WebCore::MediaStreamTrack::trackDidEnd): Setting Ended ready state in MediaStreamTrackPrivate.

        (WebCore::MediaStreamTrack::trackReadyStateChanged): Dispatches Live or Ended event.

        (WebCore::MediaStreamTrack::trackMutedChanged): Dispatches Muted event.

        * Modules/mediastream/MediaStreamTrack.h: Now inheriting from MediaStreamTrackPrivateClient.

        (WebCore::MediaStreamTrack::source): Calling method from MediaStreamTrackPrivate.
        (WebCore::MediaStreamTrack::privateTrack):
        * Modules/mediastream/VideoStreamTrack.cpp:
        (WebCore::VideoStreamTrack::create):
        (WebCore::VideoStreamTrack::VideoStreamTrack): Create method now receives a MediaStreamTrackPrivate as parameter.
        * Modules/mediastream/VideoStreamTrack.h:
        * platform/mediastream/MediaStreamDescriptor.cpp:
        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Stores the private tracks in a Vector (property of
        MediaStreamDescriptor class).

        (WebCore::MediaStreamDescriptor::addTrack): Adds a private track to the tracks' Vector

        (WebCore::MediaStreamDescriptor::removeTrack): Removes a private track from the tracks' Vector

        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::numberOfAudioSources): Renamed from numberOfAudioStreams.

        (WebCore::MediaStreamDescriptor::audioSources): Renamed from audioStreams.

        (WebCore::MediaStreamDescriptor::numberOfVideoSources): Renamed from numberOfVideoStreams.

        (WebCore::MediaStreamDescriptor::videoSources): Renamed from videoStreams.

        (WebCore::MediaStreamDescriptor::numberOfAudioTracks): Returns the number of audio tracks this MediaStreamDescriptor
        has.

        (WebCore::MediaStreamDescriptor::audioTracks): Returns a audio track, given an index

        (WebCore::MediaStreamDescriptor::numberOfVideoTracks): Returns the number of video tracks this MediaStreamDescriptor
        has.
        (WebCore::MediaStreamDescriptor::videoTracks): Returns a video track, given an index
        * platform/mediastream/MediaStreamTrackPrivate.cpp: Added.
        * platform/mediastream/MediaStreamTrackPrivate.h: Added.

2013-10-25  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Update updateShapeAndSegmentsForCurrentLineInFlowThread to deal better with multiple regions
        <https://webkit.org/b/123210>

        Reviewed by David Hyatt.

        I simplified the determination of the next region part of updateShapeAndSegmentsForCurrentLineInFlowThread's implementation
        in order to make the code more straightforward. I also tried to avoid using regionAtBlockOffset(...) function where it's possible,
        since it's not always that reliable, what I'll will report in a separate bug.

        No new tests, covered by existing tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-25  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Shapes] Update updateShapeAndSegmentsForCurrentLineInFlowThread to deal better with the first lines
        <https://bugs.webkit.org/show_bug.cgi?id=123275>

        Reviewed by David Hyatt.

        We have a complex condition in updateShapeAndSegmentsForCurrentLineInFlowThread, which is
        adjusting the first line to the shape's top. This patch adds two boolean to make that clear.

        No new tests, no behavior change.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-25  Antti Koivisto  <antti@apple.com>

        Faster way for simple line layout to check if text has fallback fonts
        https://bugs.webkit.org/show_bug.cgi?id=123342

        Reviewed by Andreas Kling.
        
        Don't use RenderText::knownToHaveNoOverflowAndNoFallbackFonts as it is slow.

        Simple text code path test already guarantees there is no overflow. Test for fallback
        fonts explicitly.

        * platform/graphics/SimpleFontData.h:
        
            Make FINAL.

        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        
            Remove knownToHaveNoOverflowAndNoFallbackFonts() as it has no clients.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):
        
            Check if all characters can be found from the primary font.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientDestroyed() should take a RenderElement&.
        <https://webkit.org/b/123339>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientLayoutChanged() should take a RenderElement&.
        <https://webkit.org/b/123336>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVGResourcesCache::clientStyleChanged() should take a RenderElement&.
        <https://webkit.org/b/123335>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        SVG: postApplyResource() should take a RenderElement&.
        <https://webkit.org/b/123334>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Antti Koivisto  <antti@apple.com>

        REGRESSION(r157950): It made many tests assert on Windows, EFL, GTK
        https://bugs.webkit.org/show_bug.cgi?id=123309

        Reviewed by Andreas Kling.

        Disable simple line layout on non-Mac plaforms for now.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Andreas Kling  <akling@apple.com>

        SVG: applyResource() should take a RenderElement&.
        <https://webkit.org/b/123286>

        This function is always called with an object, and that object
        is guaranteed to never be a text renderer.

        Reviewed by Antti Koivisto.

2013-10-25  Andreas Kling  <akling@apple.com>

        RenderElement::styleWillChange() should pass newStyle as reference.
        <https://webkit.org/b/123332>

        When styleWillChange() is called, there is always a new style getting
        set so there's no need to handle the null style case.
        This flushed out a couple of unnecessary checks.

        Reviewed by Antti Koivisto.

2013-10-25  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile fixes.
        https://bugs.webkit.org/show_bug.cgi?id=123269

        Reviewed by Csaba Osztrogonác.

        * platform/graphics/win/ImageCairoWin.cpp: Added new parameter to BitmapImage::draw() calls.
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        Turns out that order is extremelly uncommon so using a Vector is
        much less expensive. This also special-cases the much common case
        of only having order of value 0 by using Vectors with just one
        preallocated member.

        Also added the performance test that shows a ~1% win when using a
        vector instead of the HashSet.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-25  Sergio Villar Senin  <svillar@igalia.com>

        Non-SVG build broken after r157950
        https://bugs.webkit.org/show_bug.cgi?id=123328

        Reviewed by Xan Lopez.

        The isSVGInlineTest() check should be done only if SVG is enabled.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Jer Noble  <jer.noble@apple.com>

        [Mac] Add helper methods to convert CMTime <--> MediaTime
        https://bugs.webkit.org/show_bug.cgi?id=123285

        Reviewed by Eric Carlson.

        Add utility methods to convert between CMTime (a rational time class) and MediaTime.
        Once there, PlatformClockCM can now vend and accept MediaTimes for currentTime.

        * platform/mac/MediaTimeMac.h:
        * platform/mac/MediaTimeMac.cpp:
        (WebCore::toMediaTime): Added conversion utility method.
        (WebCore::toCMTime): Ditto.

        * platform/mac/PlatformClockCM.h:
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::setCurrentMediaTime): Added.
        (PlatformClockCM::currentMediaTime): Added.

        * WebCore.xcodeproj/project.pbxproj: Add new files to project.

2013-10-24  Mark Rowe  <mrowe@apple.com>

        Remove references to OS X 10.7 from Xcode configuration settings.

        Now that we're not building for OS X 10.7 they're no longer needed.

        Reviewed by Anders Carlsson.


        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Antti Koivisto  <antti@apple.com>

        Cache line layout path
        https://bugs.webkit.org/show_bug.cgi?id=123298

        Reviewed by Sam Weinig.
        
        Determining the path can be non-trivial. Avoid computing it repeatedly on relayouts.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::invalidateLineLayoutPath):
        (WebCore::RenderBlock::removeChild):
        
            Invalidate the path when children change.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        (WebCore::RenderBlockFlow::styleDidChange):
        
            Invalidate the path when style changes.

        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setText):
        
            Invalidate the path when text changes.

2013-10-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/15312643> Prepare for the mysterious future.

        Reviewed by David Kilzer.


        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Andreas Kling  <akling@apple.com>

        DocumentLoader::cachedResourceLoader() should return a reference.
        <https://webkit.org/b/123303>

        ..and while we're at it, make DocumentLoader::m_cachedResourceLoader
        a Ref, and have CachedResourceLoader::create return a PassRef.

        Reviewed by Sam Weinig.

2013-10-24  Anders Carlsson  <andersca@apple.com>

        Stop bringing in the std namespace
        https://bugs.webkit.org/show_bug.cgi?id=123273

        Reviewed by Andreas Kling.

        * Modules/webaudio/AudioBufferSourceNode.cpp:
        (WebCore::AudioBufferSourceNode::renderFromBuffer):
        (WebCore::AudioBufferSourceNode::startGrain):
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::numberOfChannels):
        * Modules/webaudio/AudioParamTimeline.cpp:
        (WebCore::AudioParamTimeline::valuesForTimeRangeImpl):
        * Modules/webaudio/AudioScheduledSourceNode.cpp:
        (WebCore::AudioScheduledSourceNode::updateSchedulingInfo):
        (WebCore::AudioScheduledSourceNode::stop):
        * Modules/webaudio/AudioSummingJunction.cpp:
        * Modules/webaudio/DelayDSPKernel.cpp:
        (WebCore::DelayDSPKernel::process):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::offlineRender):
        * Modules/webaudio/OscillatorNode.cpp:
        * Modules/webaudio/PannerNode.cpp:
        (WebCore::PannerNode::dopplerRate):
        * Modules/webaudio/WaveShaperDSPKernel.cpp:
        (WebCore::WaveShaperDSPKernel::processCurve):
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
        * Modules/websockets/WebSocket.cpp:
        (WebCore::saturateAdd):
        * Modules/websockets/WebSocketChannel.cpp:
        * Modules/websockets/WebSocketFrame.cpp:
        (WebCore::WebSocketFrame::parseFrame):
        * accessibility/AccessibilityARIAGrid.cpp:
        * accessibility/AccessibilityARIAGridCell.cpp:
        * accessibility/AccessibilityARIAGridRow.cpp:
        * accessibility/AccessibilityList.cpp:
        * accessibility/AccessibilityListBox.cpp:
        * accessibility/AccessibilityListBoxOption.cpp:
        * accessibility/AccessibilityNodeObject.cpp:
        * accessibility/AccessibilityObject.cpp:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableCell.cpp:
        * accessibility/AccessibilityTableColumn.cpp:
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        * accessibility/AccessibilityTableRow.cpp:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::getOwnPropertyNames):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::setTimeout):
        (WebCore::setMaximumAge):
        * bindings/js/ScriptController.cpp:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::writeLittleEndian):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::readString):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::getFontFace):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSRadialGradientValue::createGradient):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseColorParameters):
        (WebCore::CSSParser::parseHSLParameters):
        * css/CSSReflectValue.cpp:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::ApplyPropertyFontSize::applyValue):
        * css/PropertySetCSSStyleDeclaration.cpp:
        * css/SVGCSSParser.cpp:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::viewportPercentageValue):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        (WebCore::Document::minimumLayoutDelay):
        * dom/Node.cpp:
        (WebCore::Node::compareDocumentPosition):
        * dom/Range.cpp:
        (WebCore::Range::toString):
        (WebCore::Range::textRects):
        (WebCore::Range::textQuads):
        * dom/ScriptedAnimationController.cpp:
        (WebCore::ScriptedAnimationController::scheduleAnimation):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::makePresentationAttributeCacheKey):
        * dom/Text.cpp:
        * dom/ViewportArguments.cpp:
        (WebCore::clampLengthValue):
        (WebCore::clampScaleValue):
        (WebCore::ViewportArguments::resolve):
        (WebCore::computeMinimumScaleFactorForContentContained):
        (WebCore::restrictMinimumScaleFactorToViewportSize):
        * editing/AlternativeTextController.cpp:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * editing/Editor.cpp:
        (WebCore::Editor::setComposition):
        (WebCore::Editor::compositionRange):
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::CharacterIterator::string):
        (WebCore::SearchBuffer::SearchBuffer):
        (WebCore::SearchBuffer::append):
        (WebCore::SearchBuffer::prependContext):
        (WebCore::SearchBuffer::search):
        * editing/VisibleUnits.cpp:
        (WebCore::startOfParagraph):
        * editing/htmlediting.cpp:
        * editing/markup.cpp:
        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveResponse):
        (WebCore::FileReaderLoader::didReceiveData):
        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::backListWithLimit):
        (WebCore::BackForwardList::forwardListWithLimit):
        * history/PageCache.cpp:
        (WebCore::PageCache::setCapacity):
        * html/BaseDateAndTimeInputType.cpp:
        * html/FTPDirectoryDocument.cpp:
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getRegion):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseAttribute):
        (WebCore::parseColorStringWithCrazyLegacyRules):
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getTextFieldValues):
        * html/HTMLImageElement.cpp:
        * html/HTMLInputElement.cpp:
        * html/HTMLMapElement.cpp:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::textTrackAddCue):
        (WebCore::HTMLMediaElement::textTrackRemoveCue):
        (WebCore::HTMLMediaElement::rewind):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::duration):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::parseAttribute):
        (WebCore::HTMLSelectElement::updateListBoxSelection):
        * html/HTMLSourceElement.cpp:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::colSpan):
        (WebCore::HTMLTableCellElement::rowSpan):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseAttribute):
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionStart):
        (WebCore::HTMLTextFormControlElement::setSelectionEnd):
        (WebCore::HTMLTextFormControlElement::select):
        (WebCore::HTMLTextFormControlElement::setSelectionRange):
        * html/HTMLTrackElement.cpp:
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::scale):
        * html/InputType.cpp:
        (WebCore::InputType::valueAsDouble):
        * html/MediaController.cpp:
        (MediaController::duration):
        (MediaController::currentTime):
        (MediaController::setCurrentTime):
        (MediaController::updateReadyState):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::setValueAsDouble):
        (WebCore::NumberInputType::setValueAsDecimal):
        (WebCore::NumberInputType::createStepRange):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/SearchInputType.cpp:
        (WebCore::SearchInputType::startSearchEventTimer):
        * html/StepRange.cpp:
        (WebCore::StepRange::clampValue):
        (WebCore::StepRange::parseStep):
        * html/TimeRanges.cpp:
        * html/ValidationMessage.cpp:
        (WebCore::ValidationMessage::setMessageDOMAndStartTimer):
        (WebCore::adjustBubblePosition):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::normalizeRect):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateCompressedTexFuncData):
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        * html/shadow/MediaControlsApple.cpp:
        * html/shadow/SliderThumbElement.cpp:
        (WebCore::SliderThumbElement::setPositionFromPoint):
        * inspector/ContentSearchUtils.cpp:
        * inspector/DOMEditor.cpp:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::diff):
        * inspector/InjectedScriptHost.cpp:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/cache/CachedImage.cpp:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::adjustWindowRect):
        * page/EventHandler.cpp:
        (WebCore::MaximumDurationTracker::~MaximumDurationTracker):
        * page/FrameTree.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::adjustedDeferredRepaintDelay):
        (WebCore::FrameView::autoSizeIfEnabled):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computeAutomaticScaleFactor):
        * page/SpatialNavigation.cpp:
        (WebCore::entryAndExitPointsForDirection):
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFilterOperations):
        (WebCore::PropertyWrapperShadow::blendMismatchedShadowLists):
        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::intersect):
        (WebCore::FloatRect::uniteEvenIfEmpty):
        (WebCore::FloatRect::extend):
        (WebCore::FloatRect::fitToPoints):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        (WebCore::GlyphPageTreeNode::getChild):
        * platform/graphics/IntRect.cpp:
        (WebCore::IntRect::intersect):
        (WebCore::IntRect::unite):
        (WebCore::IntRect::uniteIfNonZero):
        * platform/graphics/LayoutRect.cpp:
        (WebCore::LayoutRect::intersect):
        (WebCore::LayoutRect::unite):
        (WebCore::LayoutRect::uniteIfNonZero):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::platformApplyGeneric):
        (WebCore::FEMorphology::platformApplySoftware):
        * platform/mac/MemoryPressureHandlerMac.mm:
        (WebCore::MemoryPressureHandler::respondToMemoryPressure):
        * platform/text/TextCodecICU.cpp:
        * rendering/LineWidth.cpp:
        (WebCore::LineWidth::fitBelowFloats):
        (WebCore::LineWidth::computeAvailableWidthFromLeftAndRight):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        (WebCore::RenderBlock::availableLogicalWidthForContent):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        (WebCore::RenderFieldset::layoutSpecialExcludedChild):
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::updateLogicalWidth):
        (WebCore::RenderFlowThread::addForcedRegionBreak):
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::layOutAxis):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderTableCell.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::selectionHeight):
        (WebCore::RootInlineBox::selectionHeightAdjustedForPrecedingBlock):
        * rendering/mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * rendering/mathml/RenderMathMLScripts.cpp:
        (WebCore::RenderMathMLScripts::layout):
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::imageSize):
        * style/StyleFontSizeFunctions.cpp:
        (WebCore::Style::fontSizeForKeyword):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTime):

2013-10-24  Andreas Kling  <akling@apple.com>

        Uncomplicate some of SVGTextRunRenderingContext.
        <https://webkit.org/b/123294>

        This class was weird about a few things, so I've taken these steps
        to clear things up:

        - FINAL and OVERRIDE all the things.
        - Constructor now takes a RenderObject&.
        - renderer() now returns a RenderObject&.
        - drawSVGGlyphs() no longer takes a TextRun.
        - glyphDataForCharacter() no longer takes a TextRun.

        To expand on the last two, there was also some awkward hoop-jumping
        where we'd go through the TextRun passed by argument to find its
        rendering context, which was really just |this| all along.

        Reviewed by Antti Koivisto.

2013-10-24  Roger Fong  <roger_fong@apple.com>

        Add texture level dependent size checks to textureImage2D calls.
        https://bugs.webkit.org/show_bug.cgi?id=123290
        <rdar://problem/15201382>

        Reviewed by Dean Jackson

        Test covered by WebGL Conformance suite 1.0.2 test, textures/texture-size-limit.html.

        There are different size limits when calling textureImage2D on different texture levels.
        We should be throwing an error if our texture size exceeds these limits.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):

2013-10-24  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        [MediaStream API] allow a stream source to be shared
        https://bugs.webkit.org/show_bug.cgi?id=121954

        Reviewed by Eric Carlson.

        Now, the MediaStreamSource don't know about the MediaStream that owns it,
        since there can be more than one MediaStream that has it as source for some track.
        MediaStreamTrack classes now have observers registered, in case there are more than
        one MediaStream owning that track

        No new tests, no change in functionality.

        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::MediaStream): Adding the MediaStream as an observer for each track it owns.

        (WebCore::MediaStream::addTrack): Now adding the MediaStream as an observer the new added track
        and adding the source to the MediaStreamDescriptor.

        (WebCore::MediaStream::removeTrack): Instead of removing the source right away, we first check if
        there isn't any other track using that source, if not we remove the source.

        (WebCore::MediaStream::haveTrackWithSource):
        (WebCore::MediaStream::addRemoteSource): MediaStreamSource has no information about the MediaStream
        that uses it, so now we don't set the stream in the source anymore.

        (WebCore::MediaStream::removeRemoteSource): There can be more than on track using the source. So we
        get each track that is using the source and then remove it and fire the ended event.

        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::addObserver):
        (WebCore::MediaStreamTrack::removeObserver):
        (WebCore::MediaStreamTrack::trackDidEnd): Does not get the client from the MediaStreamDescriptor, it now
        notify each of its observers that the track ended.

        * Modules/mediastream/MediaStreamTrack.h: Adding Observer class.

        * platform/mediastream/MediaStreamDescriptor.cpp: Destructor now does nothing. Previously it was setting
        each MediaStreamSource's descriptor to null.

        (WebCore::MediaStreamDescriptor::removeSource): Not setting the stream in source anymore.

        (WebCore::MediaStreamDescriptor::MediaStreamDescriptor): Ditto.

        (WebCore::MediaStreamDescriptor::setEnded): Not setting the state of the source to Ended

        * platform/mediastream/MediaStreamDescriptor.h:
        (WebCore::MediaStreamDescriptor::~MediaStreamDescriptor):
        * platform/mediastream/MediaStreamSource.cpp: Removing references to MediaStream object
        (WebCore::MediaStreamSource::MediaStreamSource):
        (WebCore::MediaStreamSource::reset):
        * platform/mediastream/MediaStreamSource.h:

2013-10-24  Daniel Bates  <dabates@apple.com>

        Crash in WebCore::NavigationScheduler::startTimer()
        https://bugs.webkit.org/show_bug.cgi?id=123288
        <rdar://problem/14055644>

        Reviewed by Alexey Proskuryakov.

        Currently NavigationScheduler::startTimer() synchronously notifies the client
        before the Web Inspector of a scheduled redirect. If a client cancels this
        redirect then NavigationScheduler::m_redirect will become null and we'll
        subsequently crash when informing the Web Inspector of this formerly scheduled
        redirect. Instead, NavigationScheduler::startTimer() should notify the Web
        Inspector before it notifies the client of a scheduled redirect.

        As a side benefit of this change, the Web Inspector is notified of a scheduled
        redirect before being notified of it being canceled when a client chooses to cancel
        a scheduled redirect.

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::startTimer):

2013-10-24  Antti Koivisto  <antti@apple.com>

        Try to fix build without CSS_SHAPES.

        * rendering/SimpleLineLayout.cpp:
        (WebCore::SimpleLineLayout::canUseFor):

2013-10-24  Antti Koivisto  <antti@apple.com>

        Simple line layout
        https://bugs.webkit.org/show_bug.cgi?id=122458

        Reviewed by Darin Adler.

        Line box based inline layout is powerful but also rather slow and memory intensive. Simple line layout
        is a compact alternative data structure and fast code path to cover common cases without requiring line
        boxes.
        
        This patch handles a case single left-aligned text renderer inside flow with no floats. Even this very basic
        case is sufficiently common to handle up to 25% of all text lines on some popular new sites. The decision
        which path to use is made per block flow (paragraph).
        
        Simple line layout aims to produce pixel-exact rendering result when compared to the line box layout.
        
        The goal is to handle everything that requires line level access in cases that allow use of simple lines.
        This is not quite the case yet. For example selections and outline painting are not supported. In these
        cases we seamlessly switch to the line boxes.

        The simple line data structure currently uses 12 bytes per line. Lineboxes take ~160 bytes minimum per line.
        Laying out the lines is also several times faster as is iterating over them.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        (WebCore::Position::upstream):
        (WebCore::Position::downstream):
        (WebCore::Position::getInlineBoxAndOffset):
        
            Creating positions within a simple line flow causes switch to line boxes.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):
        
            TextIterator traverses line boxes if available. In case simple line case we need to replicate the
            same results (for compatibility but especially to avoid changing test results). This is done here
            by just traversing the string without actually using the layout.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutInlineChildren):
        
            Select the layout path to use.

        (WebCore::RenderBlockFlow::deleteLines):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::firstLineBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::RenderBlockFlow::clearTruncation):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::hasLines):
        (WebCore::RenderBlockFlow::layoutSimpleLines):
        
            Do simple layout.

        (WebCore::RenderBlockFlow::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderBlockFlow::ensureLineBoxes):
        
            This function switches from simple lines to line boxes. The switching can be done outside normal layout.
            This is used to cover some cases that are not yet supported by simple lines (like selections).

        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::simpleLines):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::layoutLineBoxes):
        
            Rename the line box layout function.

        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::deleteLineBoxesBeforeSimpleLineLayout):
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsClippedToEllipsis):
        (WebCore::RenderText::absoluteQuads):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::knownToHaveNoOverflowAndNoFallbackFonts):
        (WebCore::RenderText::setSelectionState):
        (WebCore::RenderText::setTextWithOffset):
        (WebCore::RenderText::ensureLineBoxes):
        (WebCore::RenderText::simpleLines):
        (WebCore::RenderText::linesBoundingBox):
        (WebCore::RenderText::linesVisualOverflowBoundingBox):
        (WebCore::RenderText::selectionRectForRepaint):
        (WebCore::RenderText::caretMinOffset):
        (WebCore::RenderText::caretMaxOffset):
        (WebCore::RenderText::countRenderedCharacterOffsetsUntil):
        (WebCore::RenderText::containsRenderedCharacterOffset):
        (WebCore::RenderText::containsCaretOffset):
        (WebCore::RenderText::hasRenderedText):
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeSimpleLine):
        (WebCore::write):
        * rendering/SimpleLineLayout.cpp: Added.
        (WebCore::SimpleLineLayout::canUseFor):
        
            This check for the cases supported by the simple line layout path.

        (WebCore::SimpleLineLayout::isWhitespace):
        (WebCore::SimpleLineLayout::skipWhitespaces):
        (WebCore::SimpleLineLayout::textWidth):
        (WebCore::SimpleLineLayout::createLines):
        
            The main layout functions that breaks text to lines. It only handles the cases allowed by 
            SimpleLineLayout::canUseFor. What it handles it aims to break exactly as line box layout does.

        * rendering/SimpleLineLayout.h: Added.
        * rendering/SimpleLineLayoutFunctions.cpp: Added.
        (WebCore::SimpleLineLayout::paintFlow):
        (WebCore::SimpleLineLayout::hitTestFlow):
        (WebCore::SimpleLineLayout::collectFlowOverflow):
        (WebCore::SimpleLineLayout::computeTextBoundingBox):
        * rendering/SimpleLineLayoutFunctions.h: Added.
        (WebCore::SimpleLineLayout::computeFlowHeight):
        (WebCore::SimpleLineLayout::computeFlowFirstLineBaseline):
        (WebCore::SimpleLineLayout::computeFlowLastLineBaseline):
        (WebCore::SimpleLineLayout::findTextCaretMinimumOffset):
        (WebCore::SimpleLineLayout::findTextCaretMaximumOffset):
        (WebCore::SimpleLineLayout::containsTextCaretOffset):
        (WebCore::SimpleLineLayout::isTextRendered):
        (WebCore::SimpleLineLayout::lineHeightFromFlow):
        
            Support functions called from RenderBlockFlow and RenderText. They are equivalent to
            similar line box functions.

        (WebCore::SimpleLineLayout::baselineFromFlow):
        * rendering/SimpleLineLayoutResolver.h: Added.
        (WebCore::SimpleLineLayout::Resolver::Line::Line):
        (WebCore::SimpleLineLayout::Resolver::Line::rect):
        (WebCore::SimpleLineLayout::Resolver::Line::baseline):
        (WebCore::SimpleLineLayout::Resolver::Line::text):
        (WebCore::SimpleLineLayout::Resolver::Iterator::Iterator):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator++):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator--):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator==):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator!=):
        (WebCore::SimpleLineLayout::Resolver::Iterator::operator*):
        
            Lazy iterator for deriving line metrics. This keeps the line data structure small as
            we don't need to keep easily derived values around.

        (WebCore::SimpleLineLayout::Resolver::Resolver):
        (WebCore::SimpleLineLayout::Resolver::size):
        (WebCore::SimpleLineLayout::Resolver::begin):
        (WebCore::SimpleLineLayout::Resolver::end):
        (WebCore::SimpleLineLayout::Resolver::last):
        (WebCore::SimpleLineLayout::Resolver::operator[]):

2013-10-24  Myles C. Maxfield  <mmaxfield@apple.com>

        Gaps between underlines in adjacent underlined text runs
        https://bugs.webkit.org/show_bug.cgi?id=123236

        Reviewed by Simon Fraser and Darin Adler.

        There are two pieces to this change. The first piece is in
        InlineTextBox::paint(). We were putting floating-point
        extents into a LayoutSize, which simply uses ints (for now),
        and then immediately converting this back to a FloatSize.
        Instead, we should be using floats throughout all of
        this code.

        In addition, inside GraphicsContext::drawLineForText(), we are
        rounding the underline to pixel boundaries so that it appears
        very crisp on the screen. However, we should round once after
        performing computations, rather than rounding twice and then
        performing computations on the rounded numbers.

        Test: fast/css3-text/css3-text-decoration/no-gap-between-two-rounded-textboxes.html

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText): Change rounding mode
            to perform computations before rounding
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Don't convert to a LayoutSize
            just to convert to a FloatSize

2013-10-24  Andreas Kling  <akling@apple.com>

        SVGRenderingContext should wrap a RenderElement.
        <https://webkit.org/b/123283>

        The SVG rendering context class is never used with text renderers
        so we can have it wrap a RenderElement for tighter code.

        Also renamed SVGRenderingContext::m_object to m_renderer.

        Reviewed by Antti Koivisto.

2013-10-24  Santosh Mahto  <santosh.ma@samsung.com>

        [contenteditable] Content after non-editable element disappears when merging lines using backspace
        https://bugs.webkit.org/show_bug.cgi?id=122748

        Reviewed by Ryosuke Niwa.

        In case of paragraph merging after deletion if second paragraph
        contains non-editable element, then content after the non-editable
        element(including non-editable element) will be removed while the
        content before the element will be merged with the first paragraph.
        This happens becasue endOfParagraphToMove calculation in merging function
        stop at editing boundary so endOfParagraphToMove becomes position just
        before non-editable content.
        With this patch now endOfParagraphToMove is calculated by skipping
        over the non-editable element.

        Test: editing/deleting/merge-paragraph-contatining-noneditable.html

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): use CanSkipOverEditingBoundary
        condition while calculating endOfParagraphToMove.

2013-10-24  Antoine Quint  <graouts@apple.com>

        Web Inspector: Inspector doesn't show webkitTransitionEnd events in the timeline
        https://bugs.webkit.org/show_bug.cgi?id=123263

        Reviewed by Timothy Hatcher.

        A legacy event type is only set on an event in EventTarget::fireEventListeners(Event*)
        which is called after we used to call InspectorInstrumentation::willDispatchEvent(), the method
        that would ultimately yield the creation of a TimelineRecord for the event in the Web Inspector
        frontend, and as a result we would try to dispatch an event with an unprefixed event type to
        the frontend, which wouldn't even happen because most likely it wouldn't have listeners for this
        unprefixed type.

        We now move the call to InspectorInstrumentation::willDispatchEvent() in
        EventTarget::fireEventListeners(Event*, EventTargetData*, EventListenerVector&) such that the
        correct event type and list of listeners is used to determine what event to dispatch to the frontend.

        * dom/EventDispatcher.cpp:
        (WebCore::EventDispatcher::dispatchEvent):
        Remove calls to InspectorInstrumentation::willDispatchEvent() and InspectorInstrumentation::didDispatchEvent().

        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners):
        Add call to InspectorInstrumentation::willDispatchEvent() before we go through each listener and
        call InspectorInstrumentation::willHandleEvent(). Additionally, we refactor some code since we're
        getting references to the ScriptExecutionContext and Document upfront now.

2013-10-24  Andreas Kling  <akling@apple.com>

        SVG: RenderElement-ize intersectRepaintRectWithResources().
        <https://webkit.org/b/123278>

        SVGRenderSupport::intersectRepaintRectWithResources() is only ever
        called with non-text renderers so make it take RenderElement&.

        Had to tweak RenderSVGResource::resourceBoundingBox() to take the
        renderer by reference.

        Reviewed by Antti Koivisto.

2013-10-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoints in sourceURL named scripts do not work
        https://bugs.webkit.org/show_bug.cgi?id=123231

        Reviewed by Timothy Hatcher.

        Remember a Script's sourceURL and sourceMappingURL. When setting a
        breakpoint by URL, check it against the sourceURL or original URL.
        If a script had a sourceURL that would have been the only URL sent
        to the frontend, so that receives priority.

        Test: inspector-protocol/debugger/setBreakpointByUrl-sourceURL.html

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/ScriptDebugListener.h:

2013-10-23  Alexey Proskuryakov  <ap@apple.com>

        Add CryptoKey base class and bindings
        https://bugs.webkit.org/show_bug.cgi?id=123216

        Reviewed by Sam Weinig.

        * crypto/CryptoKey.idl: Added.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.list.am:
        Process the IDL.

        * WebCore.xcodeproj/project.pbxproj: Added files.

        * bindings/js/JSCryptoKeyCustom.cpp: Added.
        (WebCore::JSCryptoKey::algorithm): Use a visitor to build algorithm dictionary
        for the key.

        * crypto/CryptoAlgorithmDescriptionBuilder.cpp: Added.
        * crypto/CryptoAlgorithmDescriptionBuilder.h: Added.
        An interface for a visitor we'll use to expose CrytoKey.algorithm in bindings,
        and possibly also for storage serialization. Not complete yet, we'll need support
        for a few more simple types, and less trivially, for nested algorithms.

        * bindings/js/JSCryptoAlgorithmBuilder.cpp: Added.
        * bindings/js/JSCryptoAlgorithmBuilder.h: Added.
        An implementation that builds an algorithm description dictionary for JS bindings.

        * crypto/CryptoKey.cpp: Added.
        (WebCore::CryptoKey::~CryptoKey):
        (WebCore::CryptoKey::buildAlgorithmDescription):
        * crypto/CryptoKey.h: Added.
        Added an almost empty implementation. Some of the functions that are currently
        marked as pure virtual will likely be implemented in this base class.

2013-10-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157916.
        http://trac.webkit.org/changeset/157916
        https://bugs.webkit.org/show_bug.cgi?id=123274

        Broke Layout/flexbox-lots-of-data.html on perfbot (Requested
        by ap on #webkit).

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderHashTraits::emptyValue):
        (WebCore::RenderFlexibleBox::OrderHashTraits::constructDeletedValue):
        (WebCore::RenderFlexibleBox::OrderHashTraits::isDeletedValue):
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-24  Zan Dobersek  <zdobersek@igalia.com>

        Comment in ScopedEventQueue::dispatchEvent is unnecessarily verbose
        https://bugs.webkit.org/show_bug.cgi?id=123252

        Reviewed by Darin Adler.

        Shorten the comment about the crash avoidance in ScopedEventQueue::dispatchEvent due to
        the calling convention in C++ is left unspecified. The problem was already fixed in r157219
        and later adjusted in r157401, but the comment could have been shorter and simpler in both cases.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent):

2013-10-24  Alex Christensen  <achristensen@webkit.org>

        Removed unused ThreadSafeCoordinatedSurface and CertificateInfoCurl files.
        https://bugs.webkit.org/show_bug.cgi?id=123246

        Reviewed by Noam Rosenthal.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Removed references to ThreadSafeCoordinatedSurface and CertificateInfoCurl.
        * platform/graphics/texmap/coordinated/ThreadSafeCoordinatedSurface.cpp: Removed.
        * platform/graphics/texmap/coordinated/ThreadSafeCoordinatedSurface.h: Removed.
        * platform/network/curl/CertificateInfoCurl.cpp: Removed.

2013-10-24  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Removed Qt workaround.
        https://bugs.webkit.org/show_bug.cgi?id=123258

        Reviewed by Csaba Osztrogonác.

        No change of functionality, no new tests needed.

        !$defines case can be removed, because Qt and Android aren't in WebKit trunk,
        all ports (Mac,EFL,GTK,Windows) call this script with --defines option now

        * css/make-css-file-arrays.pl:

2013-10-24  Antti Koivisto  <antti@apple.com>

        Remove a stray space.
        
        Not reviewed.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::addImageMapChildren):

2013-10-24  Antti Koivisto  <antti@apple.com>

        Element iterator functions should take reference
        https://bugs.webkit.org/show_bug.cgi?id=123267

        Reviewed by Andreas Kling.

        The argument has to be non-null.

2013-10-24  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with latest EFL 1.8 libraries.
        https://bugs.webkit.org/show_bug.cgi?id=123245

        Reviewed by Gyuyoung Kim.

        After fixed build break on EFL 1.8 at r138326, EFL libraries are changed
        Eo typedef and splitted header files which contain version macro.

        * platform/Widget.h: Changed Eo typedef.
        * platform/efl/EflScreenUtilities.h: Ditto.
        * platform/graphics/Image.h: Ditto.

2013-10-24  Andreas Kling  <akling@apple.com>

        RenderSVGResource: Pass RenderElement to fill/strokePaintingResource.
        <https://webkit.org/b/123242>

        We never pass text renderers to these functions, so make them take
        RenderElement instead.

        Reviewed by Anders Carlsson.

2013-10-24  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GObject bindings] Make EventTarget interface introspectable
        https://bugs.webkit.org/show_bug.cgi?id=77835

        Reviewed by Gustavo Noronha Silva.

        Add webkit_dom_event_target_add_event_listener_with_closure and
        webkit_dom_event_target_remove_event_listener_with_closure to be
        used by GObject instrospection bindings. Instead of receving a
        GCallback, which makes the function not introspectable, they
        receive a GClosure.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::GObjectEventListener):
        (WebCore::GObjectEventListener::~GObjectEventListener):
        (WebCore::GObjectEventListener::gobjectDestroyed):
        (WebCore::GObjectEventListener::handleEvent):
        (WebCore::GObjectEventListener::operator==):
        * bindings/gobject/GObjectEventListener.h:
        (WebCore::GObjectEventListener::addEventListener):
        (WebCore::GObjectEventListener::removeEventListener):
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (webkit_dom_event_target_dispatch_event):
        (webkit_dom_event_target_add_event_listener):
        (webkit_dom_event_target_remove_event_listener):
        (webkit_dom_event_target_add_event_listener_with_closure):
        (webkit_dom_event_target_remove_event_listener_with_closure):
        * bindings/gobject/WebKitDOMEventTarget.h:
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GenerateEventTargetIface):
        * bindings/scripts/test/GObject/WebKitDOMTestEventTarget.cpp:
        (webkit_dom_test_event_target_dispatch_event):
        (webkit_dom_test_event_target_add_event_listener):
        (webkit_dom_test_event_target_remove_event_listener):
        * bindings/scripts/test/GObject/WebKitDOMTestNode.cpp:
        (webkit_dom_test_node_dispatch_event):
        (webkit_dom_test_node_add_event_listener):
        (webkit_dom_test_node_remove_event_listener):

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        Use a Vector instead of HashSet to computed the orderValues in RenderFlexibleBox
        https://bugs.webkit.org/show_bug.cgi?id=118620

        Reviewed by Antti Koivisto.

        Turns out that order is extremelly uncommon so using a Vector is
        much less expensive. This also special-cases the much common case
        of only having order of value 0 by using Vectors with just one
        preallocated member.

        Also added the performance test that shows a ~1% win when using a
        vector instead of the HashSet.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::OrderIterator::setOrderValues):
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        * rendering/RenderFlexibleBox.h:

2013-10-23  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix since r157823.
        FilterOperation::getOperationType() is renamed FilterOperation::type().

        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawUsingCustomFilter):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::BitmapTextureGL::applyFilters):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::injectCachedCustomFilterPrograms):

2013-10-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix on CMake based ports when CMAKE_BUILD_TYPE is not given.

        When CMAKE_BUILD_TYPE is empty, FIND command will be failed.

        * CMakeLists.txt:

2013-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Integrate css3-images image-orientation with existing EXIF support
        https://bugs.webkit.org/show_bug.cgi?id=91566

        Reviewed by Beth Dakin.

        Original patch by David Barr(davidbarr@chromium.org).

        This patch passes an information of image orientation into existing EXIF support functions
        (draw() functions of image classes mainly). We need to let the functions to know the information
        in order to meet the image-orientation requirement.

        Spec: http://dev.w3.org/csswg/css-images-3/#the-image-orientation
        The css3-images module specification is at last call.

        Test: fast/css/image-orientation/image-orientation.html
        Image orientation test is to check if incorrect rotation value can be fixed with correct orientation.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::imageSizeForRenderer):
        * page/DragController.cpp:
        (WebCore::DragController::doImageDrag):
        * page/Frame.cpp:
        (WebCore::Frame::nodeImage):
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::updateSize):
        (WebCore::BitmapImage::sizeRespectingOrientation):
        (WebCore::BitmapImage::drawPattern):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/CrossfadeGeneratedImage.cpp:
        (WebCore::CrossfadeGeneratedImage::draw):
        * platform/graphics/CrossfadeGeneratedImage.h:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/GradientImage.cpp:
        (WebCore::GradientImage::draw):
        * platform/graphics/GradientImage.h:
        * platform/graphics/Image.cpp:
        (WebCore::Image::draw):
        (WebCore::Image::drawTiled):
        * platform/graphics/Image.h:
        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        * platform/graphics/cairo/BitmapImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/BitmapImageCG.cpp:
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::draw):
        * platform/graphics/cg/PDFDocumentImage.h:
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::BufferedImage::draw):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::draw):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageFromImage):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintSnapshotImage):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::styleDidChange):
        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::paintSnapshot):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::changeRequiresLayout):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::drawForContainer):
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        (WebCore::SVGImage::draw):
        * svg/graphics/SVGImage.h:
        * svg/graphics/SVGImageForContainer.cpp:
        (WebCore::SVGImageForContainer::draw):
        * svg/graphics/SVGImageForContainer.h:

2013-10-23  Andreas Kling  <akling@apple.com>

        Tighten typing in SVGInlineTextBox a bit.
        <https://webkit.org/b/123238>

        Use RenderBoxModelObject& instead of generic RenderObject* in some
        places where it happens as a natural consequence of keeping the
        original return type from InlineBox::parent()->renderer().

        Reviewed by Anders Carlsson.

2013-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce RENDER_OBJECT_TYPE_CASTS to replace manual toFoo() in child render object
        https://bugs.webkit.org/show_bug.cgi?id=123150

        Reviewed by Andreas Kling.

        As a step to let toFoo use TYPE_CASTS_BASE, toRenderFoo() can use it for child render object.
        So, this patch introduces RENDER_OBJECT_TYPE_CASTS based on the TYPE_CASTS_BASE. This will
        generate plenty more helper functions for render object type cast.

        Some unnecessary type casts are fixed by this change.

        No new tests, no behavior changes.

        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderButton.h:
        * rendering/RenderCounter.h:
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement):
        * rendering/RenderEmbeddedObject.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFlowThread.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameSet.h:
        * rendering/RenderFullScreen.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.h:
        * rendering/RenderInline.h:
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderLineBreak.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderMedia.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderObject.h:
        * rendering/RenderProgress.h:
        * rendering/RenderQuote.h:
        * rendering/RenderRegion.h:
        * rendering/RenderReplaced.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        * rendering/RenderTable.h:
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderWidget.h:
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/svg/RenderSVGContainer.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::styleDidChange):
        * rendering/svg/RenderSVGRoot.h:
        * rendering/svg/RenderSVGShape.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGViewportContainer.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):

2013-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Include misspelling dot gap width when centering misspelling dots
        https://bugs.webkit.org/show_bug.cgi?id=122365

        Reviewed by Simon Fraser.

        When calculating where to place the misspelling dots, we find the
        maximum number of full dots that can fit under the misspelled word,
        and then center a run of that many dots. However, when we're
        centering the run, we are only considering the size of the extra
        fractional dot that we cut off. However, the dot image has a "gap"
        of transparent pixels (which visually provide tracking for the dots)
        which visually appears to be empty space. We should take this gap
        space into consideration when centering the run of dots. We also
        should make sure that our dots start on integral pixel boundaries
        because otherwise we can't set the phase of the dot run properly.

        Test: editing/spelling/centering-misspelling-dots.html

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForDocumentMarker):

2013-10-23  Andreas Kling  <akling@apple.com>

        SVGFilterBuilder should not be ref-counted.
        <https://webkit.org/b/123222>

        These objects are singly-owned and do not need ref counting.

        Reviewed by Anders Carlsson.

2013-10-23  Brady Eidson  <beidson@apple.com>

        Remove unused IDBBackingStoreLevelDB default constructor.

        Rubberstamped by Anders Carlsson.

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Added Texture Mapper and Coordinated Graphics to Windows build for WinCairo.
        https://bugs.webkit.org/show_bug.cgi?id=123215

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Added source files for Texture Mapper to Windows build.
        * WebCore.vcxproj/WebCoreCairo.props:
        Added Texture Mapper include directories for WinCairo.

2013-10-23  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding mock class to test RTCDataChannelHandler
        https://bugs.webkit.org/show_bug.cgi?id=123205

        Reviewed by Eric Carlson.

        Now RTCPeerConnectionHandler-datachannel LayouTest can run properly.
        Also updated the expected file, removing the reliable property check (which was removed in the spec)

        Existing tests updated.

        * CMakeLists.txt:
        * platform/mediastream/RTCDataChannelHandlerClient.h:
        * platform/mock/RTCDataChannelHandlerMock.cpp: Added.
        * platform/mock/RTCDataChannelHandlerMock.h: Added.
        * platform/mock/RTCNotifiersMock.cpp:
        (WebCore::RemoteDataChannelNotifier::RemoteDataChannelNotifier):
        (WebCore::RemoteDataChannelNotifier::fire):
        (WebCore::DataChannelStateNotifier::DataChannelStateNotifier):
        (WebCore::DataChannelStateNotifier::fire):
        * platform/mock/RTCNotifiersMock.h:
        * platform/mock/RTCPeerConnectionHandlerMock.cpp:
        (WebCore::RTCPeerConnectionHandlerMock::createDataChannel):

2013-10-23  Andreas Kling  <akling@apple.com>

        Clock should not be ref-counted.
        <https://webkit.org/b/123217>

        The Clock object is only ever owned by the MediaController,
        so remove the ref counting and store it in a std::unique_ptr.

        Also slapped the Clock subclasses with FINAL and OVERRIDE.

        Reviewed by Anders Carlsson.

2013-10-23  Mark Lam  <mark.lam@apple.com>

        Fix assertion in DatabaseManager::detailsForNameAndOrigin() to be iOS friendly.
        https://bugs.webkit.org/show_bug.cgi?id=123218.

        Reviewed by Joseph Pecoraro.

        No new tests.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::detailsForNameAndOrigin):

2013-10-23  Alex Christensen  <achristensen@webkit.org>

        Separated USE(CA) from USE(ACCELERATED_COMPOSITING) to prepare WinCairo for accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=123214

        Reviewed by Brent Fulgham.

        * platform/graphics/PlatformLayer.h:
        Added TextureMapperPlatformLayer PlatformLayer declaration for WinCairo.
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::createWindow):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h:
        Added USE(CA) where necessary to compile WinCairo with accelerated compositing.

2013-10-23  Myles C. Maxfield  <mmaxfield@apple.com>

        Antialias underlines if they're not axis-aligned
        https://bugs.webkit.org/show_bug.cgi?id=123004

        Reviewed by Simon Fraser.

        In order to make underlines crisp, GraphicsContext:drawLineForText
        modifies the bounds of the underline rect in order to make the rect
        device-pixel-aligned, and then turns off antialiasing when drawing
        the line. This makes sense when the underline is axis-aligned, but
        doesn't when the rect is rotated or skewed. Therefore, we should
        only opt-in to this behavior if the underline we're about to draw
        is axis-aligned. This requires figuring out whether or not the
        current transformation is axis-aligned every time
        GraphicsContext::drawLineForText is called, which will incur a small
        performance hit. However, this is justified by underlines looking
        much better (antialiased) when the context is rotated or skewed.

        Tests: svg/custom/foreign-object-skew.html
               svg/zoom/page/zoom-foreignObject.html
               svg/zoom/text/zoom-foreignObject.html:

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawLineForText):

2013-10-23  Mark Lam  <mark.lam@apple.com>

        Re-instate ProposedDatabases needed by detailsForNameAndOrigin().
        https://bugs.webkit.org/show_bug.cgi?id=123131.

        Reviewed by Geoffrey Garen.

        Test: storage/websql/open-database-expand-quota.html

        If a webpage tries to create a database that exceeds the database size
        quota for that security origin, the WebKit1 quota request mechanism
        uses detailsForNameAndOrigin() to get the requested size of the database
        (that the webpage is attempting to open) in order to determine whether
        to increase the quota or not.

        Previously, detailsForNameAndOrigin() relies on the ProposedDatabase
        mechanism to provide this size information. This change re-instates the
        ProposedDatabase mechanism so that WebKit1 client code that relies on
        this behavior will continue to work.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::ProposedDatabase::ProposedDatabase):
        (WebCore::DatabaseManager::ProposedDatabase::~ProposedDatabase):
        (WebCore::DatabaseManager::DatabaseManager):
        (WebCore::DatabaseManager::openDatabaseBackend):
        (WebCore::DatabaseManager::fullPathForDatabase):
        (WebCore::DatabaseManager::detailsForNameAndOrigin):
        * Modules/webdatabase/DatabaseManager.h:
        (WebCore::DatabaseManager::ProposedDatabase::origin):
        (WebCore::DatabaseManager::ProposedDatabase::details):

2013-10-23  Tim Horton  <timothy_horton@apple.com>

        [cg] Fix the capitalization of kCGImageSourceSkipMetaData (-> Metadata)
        https://bugs.webkit.org/show_bug.cgi?id=122918

        Reviewed by Anders Carlsson.

        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::imageSourceOptions):
        The capitalization of kCGImageSourceSkipMetaData changed to
        kCGImageSourceSkipMetadata in Mountain Lion.

2013-10-23  Brady Eidson  <beidson@apple.com>

        Make IDBDatabaseBackendLevelDB.cpp be cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123027

        Attentively reviewed by Dean Jackson.

        Move it out of the indexeddb/leveldb directory, and rename it to IDBDatabaseBackendImpl.

        Project files:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp.
        * Modules/indexeddb/IDBDatabaseBackendImpl.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h.

        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        (WebCore::IDBDatabaseBackendInterface::isIDBDatabaseBackendImpl): Add to support a required cast in LevelDB code.

        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::deleteDatabase):
        (WebCore::IDBFactoryBackendLevelDB::open):
        (WebCore::IDBFactoryBackendLevelDB::maybeCreateTransactionBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp:
        * Modules/indexeddb/leveldb/IDBLevelDBCoding.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::scheduleVersionChangeOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::IDBDatabaseBackendImpl::VersionChangeOperation::perform):
        (WebCore::IDBDatabaseBackendImpl::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:

2013-10-23  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream more ARMv7s bits
        https://bugs.webkit.org/show_bug.cgi?id=123052

        Reviewed by Joseph Pecoraro.

        Define exported symbol file for armv7s and arm64.

        * Configurations/WebCore.xcconfig:

2013-10-23  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [GTK] accessibility/self-referencing-aria-labelledby.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=121594

        Reviewed by Mario Sanchez Prada.

        According to http://www.w3.org/TR/REC-html40/struct/objects.html#edef-IMG
        description of image element should be determined by alt attribute, then
        if it is empty by title attributte.

        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleGetDescription):

2013-10-15  Andreas Kling  <akling@apple.com>

        Tighten animation-driven restyle to operate on Element only.
        <https://webkit.org/b/122820>

        Text nodes are never directly animated, so we can tighten this code
        to work on Element only. This happens naturally since the code was
        already working with RenderElement everywhere.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Even more PassRef<RenderStyle>!
        <https://webkit.org/b/123147>

        Convert more of the WebCore code to use PassRef for RenderStyle
        in places where they are known to be non-null.

        Re-landing this without region styling since that caused some
        assertions last time.

        Reviewed by Antti Koivisto.

2013-10-22  Zoltan Horvath  <zoltan@webkit.org>

        Refactor LineBreaker::nextSegmentBreak, add BreakingContext that holds all its state
        https://bugs.webkit.org/show_bug.cgi?id=123038

        Reviewed by David Hyatt.

        I followed Levi's logic on Blink's nextSegmentBreak refactoring (https://chromiumcodereview.appspot.com/25054004). 
        I mostly did the same changes, but the code is too diverged at this point to just apply that patch on our trunk. The patch
        introduces BreakingContext as a separate class. I added new methods for each condition, which were originally located in
        nextSegmentBreak. I also removed the goto-s from the code. All the new methods are inline in order to avoid introducing any
        performance regression. The change makes the code so much cleaner and understandable.

        This change would be the first step of the nextSegmentBreak refactoring, I wanted to keep things in place in RenderBlockLineLayout.cpp
        for now, but I'm planning to separate BreakingContext into a new file and do additional changes to make things nicer. I'm tracking
        the entire progress under http://webkit.org/b/121261 meta bug.

        No new tests, covered by existing tests.
        - I updated 1 expected result, because there was a 1 pixel difference on the result, which I believe comes from a rounding situation.

        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::BreakingContext::BreakingContext):
        (WebCore::BreakingContext::currentObject):
        (WebCore::BreakingContext::lineBreak):
        (WebCore::BreakingContext::lineBreakRef):
        (WebCore::BreakingContext::lineWidth):
        (WebCore::BreakingContext::atEnd):
        (WebCore::BreakingContext::clearLineBreakIfFitsOnLine):
        (WebCore::BreakingContext::commitLineBreakAtCurrentWidth):
        (WebCore::BreakingContext::initializeForCurrentObject):
        (WebCore::BreakingContext::increment):
        (WebCore::BreakingContext::handleBR):
        (WebCore::BreakingContext::handleOutOfFlowPositioned):
        (WebCore::BreakingContext::handleFloat):
        (WebCore::BreakingContext::handleEmptyInline):
        (WebCore::BreakingContext::handleReplaced):
        (WebCore::nextCharacter):
        (WebCore::BreakingContext::handleText):
        (WebCore::textBeginsWithBreakablePosition):
        (WebCore::BreakingContext::canBreakAtThisPosition):
        (WebCore::BreakingContext::commitAndUpdateLineBreakIfNeeded):
        (WebCore::BreakingContext::handleEndOfLine):
        (WebCore::LineBreaker::nextSegmentBreak):

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157826.
        http://trac.webkit.org/changeset/157826
        https://bugs.webkit.org/show_bug.cgi?id=123197

        Caused some regions tests to assert (Requested by smfr on
        #webkit).

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        * dom/Document.h:
        * dom/Element.cpp:
        (WebCore::Element::styleForRenderer):
        * dom/Element.h:
        * dom/ElementRareData.h:
        (WebCore::ElementRareData::setComputedStyle):
        (WebCore::ElementRareData::resetComputedStyle):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::textWithDirection):
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationController::updateAnimations):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::animate):
        * page/animation/CompositeAnimation.h:
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::setStyleInternal):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::setRegionObjectsRegionStyle):
        (WebCore::RenderRegion::restoreRegionObjectsOriginalStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        (WebCore::RenderRegion::computeChildrenStyleInRegion):
        (WebCore::RenderRegion::setObjectStyleInRegion):
        * rendering/RenderRegion.h:
        * style/StyleResolveTree.cpp:
        (WebCore::Style::resolveLocal):

2013-10-22  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Remove HAVE_GLX macro
        https://bugs.webkit.org/show_bug.cgi?id=123191

        Reviewed by Gyuyoung Kim.

        Since r138313, HAVE(GLX) was replaced to USE(GLX) except in GraphicsSurfaceToken.h.

        * platform/graphics/surfaces/GraphicsSurfaceToken.h:
        Replace HAVE(GLX) to USE(GLX)

2013-10-22  Mark Lam  <mark.lam@apple.com>

        Gardening: fix broken build on Windows.
        https://bugs.webkit.org/show_bug.cgi?id=123174.

        Not reviewed.

        No new tests.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

2013-10-22  Brady Eidson  <beidson@apple.com>

        Get rid of IDBObjectStoreBackendLevelDB
        https://bugs.webkit.org/show_bug.cgi?id=123174

        Reviewed by Tim Horton.

        This file was kind of a dumping ground.
        Its contents can be merged into IDBBackingStoreInterface and a new IDBIndexWriter class.

        Also took the opportunity to do a little bit of RefPtr<> and pointer-vs-reference cleanup.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp: Removed.
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h: Removed.

        * Modules/indexeddb/IDBIndexWriter.cpp: Added.
        (WebCore::IDBIndexWriter::IDBIndexWriter):
        (WebCore::IDBIndexWriter::writeIndexKeys):
        (WebCore::IDBIndexWriter::verifyIndexKeys):
        (WebCore::IDBIndexWriter::addingKeyAllowed):
        * Modules/indexeddb/IDBIndexWriter.h: Added.
        (WebCore::IDBIndexWriter::create):

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:

        * Modules/indexeddb/IDBMetadata.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::makeIndexWriters):
        (WebCore::IDBBackingStoreLevelDB::generateKey):
        (WebCore::IDBBackingStoreLevelDB::updateKeyGenerator):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::PutOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):

2013-10-22  Dean Jackson  <dino@apple.com>

        [WebGL] Implement a software rendering option on Mac
        https://bugs.webkit.org/show_bug.cgi?id=123177

        Reviewed by Tim Horton.

        Implement a way to force software OpenGL rendering
        for WebGL, via a Setting/Preference.

        No new tests. We intentionally hide the capabilities of
        the renderer from the content, so you can't test for
        this setting. However, manual inspection is pretty
        obvious. Just go to a page with a complex shader
        such as https://www.shadertoy.com/view/lss3WS.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): If we're forcing software
        rendering, mark the context attributes as such.
        * page/Settings.in: New setting key.
        * platform/graphics/GraphicsContext3D.h: New flag in Attributes.
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D): Slight update to the
        algorithm that sets a pixel format. If we're forcing software rendering,
        obviously we never want to create an accelerated pixel format.
        * platform/graphics/filters/CustomFilterGlobalContext.cpp:
        (WebCore::CustomFilterGlobalContext::prepareContextIfNeeded): Set the attribute
        here before trying to create the context.
        * platform/graphics/filters/CustomFilterGlobalContext.h: Add a forceSoftwareRendering
        flag to prepareContextIfNeeded.
        * rendering/FilterEffectRenderer.cpp:
        (WebCore::createCustomFilterEffect): Check the Setting before creating a custom
        filter context.

2013-10-22  Anders Carlsson  <andersca@apple.com>

        Revert r157445 since it broke certificates on Mac.
        <rdar://problem/15246926&15254017&15269117>

        * GNUmakefile.list.am:
        * PlatformEfl.cmake:
        * WebCore.exp.in:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceErrorBase.h:
        * platform/network/ResourceResponseBase.h:
        * platform/network/cf/CertificateInfoCFNet.cpp: Removed.
        * platform/network/cf/ResourceResponse.h:
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::setCertificateChain):
        (WebCore::ResourceResponse::certificateChain):
        * platform/network/soup/ResourceError.h:
        (WebCore::ResourceError::ResourceError):
        (WebCore::ResourceError::tlsErrors):
        (WebCore::ResourceError::setTLSErrors):
        (WebCore::ResourceError::certificate):
        (WebCore::ResourceError::setCertificate):
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::tlsError):
        (WebCore::ResourceError::platformCopy):
        (WebCore::ResourceError::platformCompare):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::soupMessageCertificate):
        (WebCore::ResourceResponse::setSoupMessageCertificate):
        (WebCore::ResourceResponse::soupMessageTLSErrors):
        (WebCore::ResourceResponse::setSoupMessageTLSErrors):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::toSoupMessage):
        (WebCore::ResourceResponse::updateFromSoupMessage):

2013-10-22  Jer Noble  <jer.noble@apple.com>

        [Media] Refactor supportsType() factory method to take a parameters object.
        https://bugs.webkit.org/show_bug.cgi?id=122489

        Reviewed by Eric Carlson.

        In order to support adding new conditional properties with which to decide
        what MediaPlayerPrivate subclass to create, replace the two versions of the
        supportsType() factory method with a single one taking a parameters object.

        At the same time, add a 'isMediaSource' parameter to that object, allowing
        MediaPlayerPrivate subclasses which support the same type and codecs but
        which do not both support MediaSource to be distinguised.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::bestMediaEngineForSupportParameters): Renamed from
            bestMediaEngineForTypeAndCodecs.
        (WebCore::MediaPlayer::nextBestMediaEngine): Added convenience function.
        (WebCore::MediaPlayer::loadWithNextMediaEngine): Call nextBestMediaEngine()
        (WebCore::MediaPlayer::supportsType): Pass parameter object.
        (WebCore::MediaPlayer::networkStateChanged): Call nextBestMediaEngine().
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::supportsType): Handle parameter object.
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::registerMediaEngine): Remove extraneous
            extendedSupportsType method.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::supportsType): Handle parameter object.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::supportsType): Ditto.
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine): Remove extraneous
            extendedSupportsType method.
        (WebCore::MediaPlayerPrivateQTKit::supportsType): Handle parameter object.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::supportsType): Ditto.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/wince/MediaPlayerPrivateWinCE.h:

2013-10-22  Andreas Kling  <akling@apple.com>

        Merge SVGRenderBlock::styleWillChange() into styleDidChange().
        <https://webkit.org/b/123181>

        I meant to do this one in r157787, but better late than never.

        Reviewed by Geoffrey Garen.

2013-10-22  Sam Weinig  <sam@webkit.org>

        CTTE: Modernize RenderBlock a bit
        https://bugs.webkit.org/show_bug.cgi?id=123162

        Reviewed by Andreas Kling.

        Start threading references through RenderBlock. While we 
        are here, do some selective modernization as well.

2013-10-22  Andreas Kling  <akling@apple.com>

        Even more PassRef<RenderStyle>!
        <https://webkit.org/b/123147>

        Convert the remaining WebCore code to use PassRef for RenderStyle
        wherever they are known to be non-null.

        Reviewed by Antti Koivisto.

2013-10-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r157819.
        http://trac.webkit.org/changeset/157819
        https://bugs.webkit.org/show_bug.cgi?id=123180

        Broke 32-bit builds (Requested by smfr on #webkit).

        * Configurations/WebCore.xcconfig:

2013-10-22  Antti Koivisto  <antti@apple.com>

        Rename deleteLineBoxTree to deleteLines
        https://bugs.webkit.org/show_bug.cgi?id=123176

        Reviewed by Andreas Kling.

        RenderBlock::deleteLineBoxTree -> RenderBlock::deleteLines
        RenderInline::deleteLineBoxTree -> RenderInline::deleteLines

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        {ClipPathOperation, FilterOperation}::getOperationType() should not include 'get'
        https://bugs.webkit.org/show_bug.cgi?id=123172

        Reviewed by Simon Fraser.

        No new tests, just a rename.

        "get" in WebCore tends to mean that the function has out arguments; these have no arguments.
        Rename FilterOperation::getOperationType() to FilterOperation::type().
        I noticed that ClipPathOperation had the same mistake, so I fixed it there too.

        Removed long and useless list of files.

2013-10-22  Samuel White  <samuel_white@apple.com>

        AX: Add paramAttrs to fetch start and end text markers in a given rect.
        https://bugs.webkit.org/show_bug.cgi?id=122164

        Reviewed by Chris Fleizach.

        Added ability to fetch end and start text markers inside a given bounds. This gives ScreenReaders
        like VoiceOver a way to retrieve the text markers for a specified column of page text.

        Test: platform/mac/accessibility/text-marker-for-bounds.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::mainFrame):
        (WebCore::AccessibilityObject::topDocument):
        (WebCore::AccessibilityObject::visiblePositionForBounds):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper screenToContents:]):
        (-[WebAccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2013-10-22  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Match adjustLogicalLineTopAndLogicalHeightIfNeeded's implementation with Blink's
        https://bugs.webkit.org/show_bug.cgi?id=123033

        Reviewed by David Hyatt.

        In Blink I made this function in a bit different way. This change modifies it
        to be identical, which helps a lot in the future cross-merging patches.

        No new tests, covered by existing texts.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::adjustLogicalLineTopAndLogicalHeightIfNeeded):

2013-10-22  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream more ARMv7s bits
        https://bugs.webkit.org/show_bug.cgi?id=123052

        Reviewed by Joseph Pecoraro.

        * Configurations/WebCore.xcconfig:

2013-10-22  Simon Fraser  <simon.fraser@apple.com>

        Try to fix Mavericks build; use <> for framework include.

        * page/CaptionUserPreferencesMediaAF.cpp:

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        GammaFilterOperation seems to be dead code
        https://bugs.webkit.org/show_bug.cgi?id=123173

        Reviewed by Simon Fraser.

        * platform/graphics/filters/FilterOperation.cpp:
        * platform/graphics/filters/FilterOperation.h:
        Remove dead code.

2013-10-22  Antti Koivisto  <antti@apple.com>

        Rename some line box functions to be just about lines
        https://bugs.webkit.org/show_bug.cgi?id=123168

        Reviewed by Dave Hyatt.

        firstLineBoxBaseline -> firstLineBaseline
        hasInlineBoxChildren -> hasLines
        
        Also use hasLines in a bunch of places where firstLineBox() was used.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        
            Also use hasRenderedText() instead of firstTextBox()

        * rendering/RenderFullScreen.cpp:
        
            Fix namespace.

2013-10-22  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Adding Mock class to test RTCPeerConnection
        https://bugs.webkit.org/show_bug.cgi?id=122848

        Reviewed by Eric Carlson.

        The following tests can be run:

            RTCPeerConnection-createAnswer.html
            RTCPeerConnection-createOffer.html
            RTCPeerConnection-ice.html
            RTCPeerConnection-localDescription.html
            RTCPeerConnection-remoteDescription.html
            RTCPeerConnection-state.html

        Tests that require a MediaStream object, by invoking getUserMedia,
        are not ready to run yet.

        No new tests needed.

        * CMakeLists.txt:
        * platform/mediastream/RTCPeerConnectionHandler.cpp:
        (WebCore::createHandler):
        * platform/mediastream/RTCPeerConnectionHandler.h:
        * platform/mediastream/RTCPeerConnectionHandlerClient.h:
        * platform/mock/RTCNotifiersMock.cpp: Added.
        * platform/mock/RTCNotifiersMock.h: Added.
        * platform/mock/RTCPeerConnectionHandlerMock.cpp: Added.
        * platform/mock/RTCPeerConnectionHandlerMock.h: Copied from Source/WebCore/platform/mediastream/RTCPeerConnectionHandler.h.
        * platform/mock/TimerEventBasedMock.h: Added.
        * testing/Internals.cpp:
        (WebCore::Internals::Internals):
        (WebCore::Internals::enableMockRTCPeerConnectionHandler):
        * testing/Internals.h:

2013-10-22  Zan Dobersek  <zdobersek@igalia.com>

        WebCore::fillWithEmptyClients adopts new empty clients before leaking their pointers
        https://bugs.webkit.org/show_bug.cgi?id=122945

        Reviewed by Anders Carlsson.

        * loader/EmptyClients.cpp:
        (WebCore::fillWithEmptyClients): Store the static empty clients as NeverDestroyed, rather than
        adopting the pointer of each heap-allocated object and then immediately leaking that pointer.

2013-10-22  Zan Dobersek  <zdobersek@igalia.com>

        Simplify HRTFDatabaseLoader's load map
        https://bugs.webkit.org/show_bug.cgi?id=122944

        Reviewed by Eric Carlson.

        * platform/audio/HRTFDatabaseLoader.cpp:
        (WebCore::loaderMap): Return a reference to a NeverDestroyed HashMap that maps sample rates to loaders.
        (WebCore::HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary):
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        * platform/audio/HRTFDatabaseLoader.h: Remove the LoaderMap type definition, the private singleton of that type
        and the singleton's unused getter.

2013-10-22  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Support hardware accelerated filters
        https://bugs.webkit.org/show_bug.cgi?id=123139

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export a variety of filter-related things.

        * platform/graphics/ca/PlatformCAFilters.h:
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setFilters):
        * platform/graphics/ca/win/PlatformCAFiltersWin.cpp:
        (PlatformCAFilters::setFiltersOnLayer):
        setFiltersOnLayer should take a PlatformLayer instead of a PlatformCALayer
        as its argument, because it doesn't need a PlatformCALayer, and this way
        we can share code with the RemoteLayerTreeHost, which only has PlatformLayers
        and not PlatformCALayers.

2013-10-22  Brendan Long  <b.long@cablelabs.com>

        cue.text fails for some track element cues
        https://bugs.webkit.org/show_bug.cgi?id=81123

        Reviewed by Eric Carlson.

        Test: media/track/track-long-captions-file.html

        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::parseBytes): Use buffer when we don't have full lines.
        (WebCore::WebVTTParser::fileFinished): Force file to finish parsing.
        (WebCore::WebVTTParser::hasRequiredFileIdentifier): Simplify due to using String.
        (WebCore::WebVTTParser::collectCueText): Don't automatically create cues when we run out of data.
        (WebCore::WebVTTParser::collectNextLine): Use buffer.
        * html/track/WebVTTParser.h: Add m_buffer and Finished state.
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::notifyFinished): Call m_parser->fileFinished() when done.

2013-10-22  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Compile error.
        https://bugs.webkit.org/show_bug.cgi?id=123161

        Reviewed by Brent Fulgham.

        * rendering/RenderFlowThread.h: Move USE(ACCELERATED_COMPOSITING) guard to expose needed type.

2013-10-21  Brady Eidson  <beidson@apple.com>

        Add a cross-platform IDBRecordIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=123138

        Reviewed by Andreas Kling.

        Add the cross-platform header:
        * Modules/indexeddb/IDBRecordIdentifier.h: Added.
        (WebCore::IDBRecordIdentifier::create):
        (WebCore::IDBRecordIdentifier::encodedPrimaryKey):
        (WebCore::IDBRecordIdentifier::version):
        (WebCore::IDBRecordIdentifier::reset):
        (WebCore::IDBRecordIdentifier::IDBRecordIdentifier):
        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

        Remove the old abstract and LevelDB classes:
        * Modules/indexeddb/IDBBackingStoreInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:

        Use the cross-platform one everywhere:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::ObjectStoreKeyCursorImpl::loadCurrentRow):
        (WebCore::ObjectStoreCursorImpl::loadCurrentRow):

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::PutOperation::perform):

2013-10-22  Andrei Bucur  <abucur@adobe.com>

        [CSS Regions] Possible performance regression after r157567
        https://bugs.webkit.org/show_bug.cgi?id=123016

        Reviewed by Andreas Kling.

        The revision 157567 http://trac.webkit.org/changeset/157567 may have regressed
        Parser/html5-full-render by ~1.1% and Parser/html-parser by ~2%. These changes
        try to optimize the initial patch, based on Andreas Kling's review.

        The patch also adds a couple of refactorings that should make the code easier to read:
        - the CSS Shapes functions are now wrapped in a single #if clause
        - the CSS Shapes and CSS Regions pre-layout preparations are wrapped in a helper function

        The RenderFlowThread::logicalWidthChangedInRegionsForBlock function is optimized by passing
        it information about the state of the relayout children flag. If the flag is true already,
        some of the steps are skipped.

        Tests: no new tests.

        * dom/Element.cpp:
        (WebCore::Element::webkitGetRegionFlowRanges):
        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForElementInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::shapeInfoRequiresRelayout):
        (WebCore::RenderBlock::updateShapesBeforeBlockLayout):
        (WebCore::RenderBlock::computeShapeSize):
        (WebCore::RenderBlock::prepareShapesAndPaginationBeforeBlockLayout):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded):
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        (WebCore::RenderBlockFlow::ensureRareData):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderElement::isRenderNamedFlowFragmentContainer):
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::logicalWidthChangedInRegionsForBlock):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::layoutBlock):
        * rendering/RenderNamedFlowFragment.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):

2013-10-22  Andreas Kling  <akling@apple.com>

        CSSStyleSheet constructor functions should return PassRef.
        <https://webkit.org/b/123156>

        Make CSSStyleSheet::create*() return PassRef and tighten some call
        sites that were using them. Most callers didn't need any tweaks to
        take advantage of PassRef.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLFraction always has a MathMLInlineContainerElement.
        <https://webkit.org/b/123154>

        This renderer is never anonymous and always has a corresponding
        MathMLInlineContainerElement. Overload element() with a tighter
        return type.

        Also marked the class FINAL and made most member functions private.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        FontGlyphs constructor functions should return PassRef.
        <https://webkit.org/b/123159>

        Made the two FontGlyphs creator functions return PassRef and tweaked
        the FontGlyphsCache in Font.cpp to make more efficient use of it.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Fix some more code to use RenderElement instead of RenderObject.
        <https://webkit.org/b/123149>

        Using RenderElement where possible lets us skip the isRenderElement()
        branch in RenderObject::style() and generates much tighter code.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Merge SVG renderers' styleWillChange() into styleDidChange().
        <https://webkit.org/b/123108>

        This work can just as well be done after setting the style.
        Three more styleWillChange() overloads gone.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        CSSValueList constructor functions should return PassRef.
        <https://webkit.org/b/123151>

        These functions always return objects, and thus can return PassRef.
        Also made CSSValueList::createFromParserValueList() take a reference
        since that function is only ever called with a non-null value.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Avoid parent style ref churn in createTextRendererIfNeeded().
        <https://webkit.org/b/123148>

        There's no need to take a temporary ref on the parent's RenderStyle
        while creating a text renderer. It's not going away, and the text
        renderer is not going to participate in ownership afterwards.

        Reviewed by Antti Koivisto.

2013-10-22  Andreas Kling  <akling@apple.com>

        Remove some unnecessary null checks in RenderElement::setStyle().
        <https://webkit.org/b/123146>

        After assigning the new style to RenderElement::m_style, we know that
        it'll be non-null, so remove all the checking for this.

        Reviewed by Antti Koivisto.

2013-10-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Introduce ACCESSIBILITY_OBJECT_TYPE_CASTS to replace manual toFoo() in accessibility child class
        https://bugs.webkit.org/show_bug.cgi?id=123140

        Reviewed by Andreas Kling.

        As a step to let toFoo use TYPE_CASTS_BASE, DEFINE_TYPE_CASTS can be used for toFoo() in accessibility
        child class. The DEFINE_TYPE_CASTS will generate plenty more helper functions for accessibility type cast.

        No new tests, no behavior changes.

        * accessibility/AccessibilityList.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/AccessibilityMockObject.h:
        * accessibility/AccessibilityNodeObject.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilitySVGRoot.h:
        * accessibility/AccessibilityScrollView.h:
        * accessibility/AccessibilitySpinButton.h:
        * accessibility/AccessibilityTable.h:

2013-10-22  Brian Holt  <brian.holt@samsung.com>

        [GTK] Add WebKit2 API for TLS errors
        https://bugs.webkit.org/show_bug.cgi?id=120160

        Reviewed by Carlos Garcia Campos.

        Added a new constructor for CertificateInfo under Soup.

        * platform/network/CertificateInfo.h:
        * platform/network/soup/CertificateInfoSoup.cpp:
        (WebCore::CertificateInfo::CertificateInfo): New constructor using
        GTlsCertificateFlags and GTlsCertificate.

2013-10-22  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Use RenderStyle::hasFlowFrom when needed
        https://bugs.webkit.org/show_bug.cgi?id=122543

        Reviewed by David Hyatt.

        Rename RenderStyle::hasStyleRegion -> RenderStyle::hasFlowFrom.
        Use RenderStyle::hasFlowFrom() helper function instead of directly
        checking the value of RenderStyle::regionThread().

        No change of functionality, covered by existing tests.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::contentToCSSValue):
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::adjustRenderStyle):
        * dom/PseudoElement.cpp:
        (WebCore::PseudoElement::didAttachRenderers):
        * dom/PseudoElement.h:
        (WebCore::pseudoElementRendererIsNeeded):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly):
        * rendering/style/RenderStyle.h:

2013-10-21  Brent Fulgham  <bfulgham@apple.com>

        [WIN] Properly support reverse animations without needing software fallback.
        https://bugs.webkit.org/show_bug.cgi?id=85121

        Reviewed by Dean Jackson.

        Testing is provided by existing animation tests.

        * platform/animation/TimingFunction.h:
        (WebCore::CubicBezierTimingFunction::createReversed): Added.
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::addAnimation): The early return when performing a reverse or
        autoreverse animation is no longer needed.
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (toCAMediaTimingFunction): Use new reversed function.
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFTimingFunction): Ditto.
        (PlatformCAAnimation::setTimingFunction): Pass 'reverse' flag.
        (PlatformCAAnimation::setTimingFunctions): Ditto.

2013-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Use TYPE_CASTS_BASE for CSS_VALUE_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=123126

        Reviewed by Andreas Kling.

        TYPE_CASTS_BASE was moved to common place to be used by all toFoo().
        CSS_VALUE_TYPE_CASTS starts to use it for CSS child value. This change
        generates plenty more helper functions for toCSSFooValue().

        Additionally, this use support that toWebKitCSSFooValue, which couldn't
        use CSS_VALUE_TYPE_CASTS macro.

        No new tests, no behavior change.

        * css/CSSAspectRatioValue.h:
        * css/CSSBorderImageSliceValue.h:
        * css/CSSCalculationValue.h:
        * css/CSSCanvasValue.h:
        * css/CSSCrossfadeValue.h:
        * css/CSSCursorImageValue.h:
        * css/CSSFilterImageValue.h:
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFontFeatureValue.h:
        * css/CSSFontValue.h:
        * css/CSSFunctionValue.h:
        * css/CSSGradientValue.h:
        * css/CSSGridTemplateValue.h:
        * css/CSSImageSetValue.h:
        * css/CSSImageValue.h:
        * css/CSSInheritedValue.h:
        * css/CSSInitialValue.h:
        * css/CSSLineBoxContainValue.h:
        * css/CSSPrimitiveValue.h:
        * css/CSSReflectValue.h:
        * css/CSSShadowValue.h:
        * css/CSSTimingFunctionValue.h:
        * css/CSSUnicodeRangeValue.h:
        * css/CSSValue.h:
        * css/CSSValueList.h:
        * css/CSSVariableValue.h:
        * css/WebKitCSSArrayFunctionValue.h:
        * css/WebKitCSSFilterValue.h:
        * css/WebKitCSSMatFunctionValue.h:
        * css/WebKitCSSMixFunctionValue.h:
        * css/WebKitCSSSVGDocumentValue.h:
        * css/WebKitCSSShaderValue.h:

2013-10-21  Joone Hur  <joone.hur@intel.com>

        Bad cast with toRenderBoxModelObject in RenderBlock::updateFirstLetter()
        https://bugs.webkit.org/show_bug.cgi?id=123013

        Reviewed by Andreas Kling.

        No new tests because this was reported by Google ClusterFuzz.
        https://codereview.chromium.org/25713009/

        There is a case that toRenderBoxModelObject causes a crash in RenderBlock::updateFirstLetter() 
        due to bad cast, so we need to check whether the RenderObject is a RenderBoxModelObject 
        by running isBoxModelObject() before calling toRenderBoxModelObject.  

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter):

2013-10-21  Brady Eidson  <beidson@apple.com>

        Make IDBTransactionCoordinatorLevelDB cross platform
        https://bugs.webkit.org/show_bug.cgi?id=123124

        Enthusiastically reviewed by Tim Horton.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:

        Make more methods pure virtual in the interface:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        Update the name of the class, and use IDBTransactionBackendInterface instead of IDBTransactionBackendLeveDB:
        * Modules/indexeddb/IDBTransactionCoordinator.cpp: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp.
        (WebCore::IDBTransactionCoordinator::create):
        (WebCore::IDBTransactionCoordinator::IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::~IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::didCreateTransaction):
        (WebCore::IDBTransactionCoordinator::didStartTransaction):
        (WebCore::IDBTransactionCoordinator::didFinishTransaction):
        (WebCore::IDBTransactionCoordinator::isActive):
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        (WebCore::doScopesOverlap):
        (WebCore::IDBTransactionCoordinator::canRunTransaction):
        * Modules/indexeddb/IDBTransactionCoordinator.h: Renamed from Source/WebCore/Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.h.

        Update the name of the class elsewhere:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:
        (WebCore::IDBDatabaseBackendLevelDB::transactionCoordinator):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:

2013-10-21  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream JSGlobalObject::shouldInterruptScriptBeforeTimeout()
        https://bugs.webkit.org/show_bug.cgi?id=123045

        Reviewed by Joseph Pecoraro.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage): Added.
        (WebCore::JSDOMWindowBase::shouldInterruptScript): Extracted comment and assertion
        about null Page object into WebCore::shouldInterruptScriptToPreventInfiniteRecursionWhenClosingPage()
        so that it can be shared by both this function and JSDOMWindowBase::shouldInterruptScriptBeforeTimeout().
        (WebCore::JSDOMWindowBase::shouldInterruptScriptBeforeTimeout):
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSWorkerGlobalScopeBase.cpp:
        (WebCore::JSWorkerGlobalScopeBase::shouldInterruptScriptBeforeTimeout): Added.
        * bindings/js/JSWorkerGlobalScopeBase.h:
        * loader/EmptyClients.h: Added isStopping(). We'll land the iOS chrome client implementation
        in a subsequent patch.
        * page/ChromeClient.h: Added isStopping().

2013-10-21  Anders Carlsson  <andersca@apple.com>

        Navigation policy callback not called when performing the same fragment navigation twice
        https://bugs.webkit.org/show_bug.cgi?id=123121
        <rdar://problem/15230466>

        Reviewed by Beth Dakin.

        There's code in PolicyChecker::checkNavigationPolicy that will call the decision function right away 
        if the requests are equal, without consulting any policy client. Because of this, make sure to empty out
        the last checked request of the document loader when doing a fragment navigation.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURL):
        (WebCore::FrameLoader::loadWithDocumentLoader):

2013-10-21  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; unprotect the declaration of updateSleepDisabling();

        * html/HTMLMediaElement.h:

2013-10-20  Mark Lam  <mark.lam@apple.com>

        Avoid JSC debugger overhead unless needed.
        https://bugs.webkit.org/show_bug.cgi?id=123084.

        Reviewed by Geoffrey Garen.

        No new tests.

        - If no breakpoints are set, we now avoid calling the debug hook callbacks.
        - If no break on exception is set, we also avoid exception event debug callbacks.
        - When we return from the ScriptDebugServer to the JSC::Debugger, we may no
          longer call the debug hook callbacks if not needed. Hence, the m_currentCallFrame
          pointer in the ScriptDebugServer may become stale. To avoid this issue, before
          returning, the ScriptDebugServer will clear its m_currentCallFrame if
          needsOpDebugCallbacks() is false.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::dispatchDidContinue):
        (WebCore::ScriptDebugServer::exception):
        (WebCore::ScriptDebugServer::didReachBreakpoint):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::reset):

2013-10-21  Myles C. Maxfield  <mmaxfield@apple.com>

        Grammar markers are not updated when switching between 1x and 2x
        https://bugs.webkit.org/show_bug.cgi?id=122146

        Reviewed by Dean Jackson.

        When running editing/spelling/grammar-markers-hidpi.html, the 2x
        grammar/spelling dot resources are cached. If you then run
        editing/spelling/grammar-markers.html without tearing down WebKit,
        it re-uses the 2x dots. The difference between the two tests is a call
        to testRunner.setBackingScaleFactor().

        We create a NSColor from an NSImage, and remember it in a static
        variable. However, NSColor inspects the current graphics context to
        determine which resolution to use, and then remembers that decision.
        Therefore, we want to recreate the NSColor whenever the device pixel
        ratio changes. This patch adds a new static function to GraphicsContext
        which recreates this NSColor every time the ratio changes.

        Tests: editing/spelling/grammar-markers.html
               editing/spelling/inline_spelling_markers.html

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::makePattern):
        (WebCore::GraphicsContext::drawLineForDocumentMarker):

2013-10-21  Simon Fraser  <simon.fraser@apple.com>

        Use pink layer borders for compositing layers with a contents layer
        https://bugs.webkit.org/show_bug.cgi?id=123118

        Reviewed by Dean Jackson.

        With the existing layer border colors, it's not possible to distinguish an empty
        layer from one with solid color, image or video contents. So use a pink color
        for those. This makes it easier to diagnose bugs like 122784.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::getDebugBorderInfo):

2013-10-21  Jer Noble  <jer.noble@apple.com>

        Limit use of display sleep assertion when <video> element is off-screen.
        https://bugs.webkit.org/show_bug.cgi?id=123041

        Reviewed by Darin Adler.

        Use page visibility changes to suspend and resume the use of sleep assertions in
        HTMLMediaElement.

        Page will propogate the page visibility change notifications to its Documents, which
        will further propogate those notifications to registered elements.  Upon receiving
        these notifications, HTMLMediaElement will release or take a DisplaySleepDisabler
        token if necessary.

        Also, rename HTMLMediaElement's updateDisableSleep() to updateSleepDisabling() and wrap
        the implementation in a PLATFORM(MAC) guard rather than at each call site.

        * dom/Document.cpp:
        (WebCore::Document::registerForVisibilityStateCallbacks): Added registration method.
        (WebCore::Document::unregisterForVisibilityStateCallbacks): Added unregistration method.
        (WebCore::Document::visibilityStateChanged): Call all registered clients.
        * dom/Document.h:
        * dom/Element.h:
        (WebCore::Element::visibilityStateChanged): Added default virtual method to be overridden
            by subclasses.
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Register for the notification, and check the
            current status of Document::hidden().
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Unregister for the notification.
        (WebCore::HTMLMediaElement::visibilityStateChanged): Set m_displaySleepDisablingSuspended
            and call updateSleepDisabling().
        (WebCore::HTMLMediaElement::shouldDisableSleep): Add a check for m_displaySleepDisablingSuspended.
        * html/HTMLMediaElement.h:
        * page/Page.cpp:
        (WebCore::Page::setVisibilityState): Pass to every child document.

        Rename updateDisableSleep() -> updateSleepDisabling():
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::~HTMLMediaElement):
        (WebCore::HTMLMediaElement::parseAttribute):
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):
        (WebCore::HTMLMediaElement::clearMediaPlayer):
        (WebCore::HTMLMediaElement::stop):

2013-10-21  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        MediaStreamTrack now tracks its own state
        https://bugs.webkit.org/show_bug.cgi?id=123025

        Reviewed by Jer Noble.

        The spec says that a MediaStreamSource can be shared by different tracks,
        so a track must have its own state tracking, synchronizing with its MediaStreamSource when
        the underlying MediaStreamSource changes the readyState.
        In the old implementation if a user invoked the stop method, its readyState method was still
        returning the MediaStreamSource state, which was wrong.
        This also adds a setEnabled method, which can be used to set the state of a track when a
        remote peer ends it, for instance.

        No new tests needed.

        * Modules/mediastream/MediaStreamTrack.cpp:
        (WebCore::MediaStreamTrack::readyState):
        (WebCore::MediaStreamTrack::setState):
        (WebCore::MediaStreamTrack::stopProducingData):
        (WebCore::MediaStreamTrack::ended):
        (WebCore::MediaStreamTrack::sourceStateChanged):
        (WebCore::MediaStreamTrack::trackDidEnd):
        * Modules/mediastream/MediaStreamTrack.h:

2013-10-21  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Clean up transaction logging
        https://bugs.webkit.org/show_bug.cgi?id=123116

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        Export some TextStream functions.

2013-10-21  Brady Eidson  <beidson@apple.com>

        Transition most use of IDBBackingStoreLevelDB to IDBBackingStoreInterface
        https://bugs.webkit.org/show_bug.cgi?id=123105

        Reviewed by Anders Carlsson.

        Export more required headers:
        * WebCore.xcodeproj/project.pbxproj:

        Flesh out many of the pure virtual methods on IDBBackingStoreInterface, as well as
        the RecordIdentifier and Cursor classes:

        * Modules/indexeddb/IDBBackingStoreInterface.h:
        (WebCore::IDBBackingStoreInterface::RecordIdentifier::~RecordIdentifier):
        (WebCore::IDBBackingStoreInterface::Cursor::~Cursor):

        Use IDBBackingStoreInterface, IDBBackingStoreInterface::RecordIdentifier, and
        IDBBackingStoreInterface::Cursor wherever possible:

        * Modules/indexeddb/IDBFactoryBackendInterface.cpp:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::ObjectStoreKeyCursorImpl::clone):
        (WebCore::ObjectStoreCursorImpl::clone):
        (WebCore::IndexKeyCursorImpl::clone):
        (WebCore::IndexCursorImpl::clone):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        (WebCore::IDBBackingStoreLevelDB::Transaction::Transaction):
        (WebCore::IDBBackingStoreLevelDB::Transaction::begin):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        (WebCore::IDBBackingStoreLevelDB::RecordIdentifier::RecordIdentifier):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::IDBCursorBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        (WebCore::IDBCursorBackendLevelDB::create):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::create):
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        (WebCore::IDBDatabaseBackendLevelDB::backingStore):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::createTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        (WebCore::IDBFactoryBackendLevelDB::createTransactionBackend):
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::verifyIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::addingKeyAllowed):
        (WebCore::IDBObjectStoreBackendLevelDB::makeIndexWriters):
        (WebCore::IDBObjectStoreBackendLevelDB::generateKey):
        (WebCore::IDBObjectStoreBackendLevelDB::updateKeyGenerator):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        (WebCore::GetOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-21  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes][CSS Regions] Don't apply shape-inside when we have multiple auto-height regions and the height is not resolved
        https://bugs.webkit.org/show_bug.cgi?id=123103

        Reviewed by David Hyatt.

        When we have multiple regions with auto-height, the region's height is not resolved from other elements we can't apply the
        the shape on the region. This patch prevents to apply the shape and fixes the behavior for these cases.

        Test: fast/regions/shape-inside/shape-inside-on-multiple-autoheight-regions.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::updateShapeAndSegmentsForCurrentLineInFlowThread):

2013-10-21  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Backing store should take contentsScale into account
        https://bugs.webkit.org/show_bug.cgi?id=123106

        Reviewed by Simon Fraser.

        * WebCore.exp.in:
        Export FloatRect::scale.

2013-10-21  Andreas Kling  <akling@apple.com>

        RenderScrollbarPart doesn't need styleWillChange().
        <https://webkit.org/b/123113>

        We will call setInline(false) in styleDidChange(), there's no need
        to override styleWillChange() just to do it twice.

        Reviewed by Darin Adler.

2013-10-21  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] The layers from the flow thread should be collected under the regions' layers.
        https://bugs.webkit.org/show_bug.cgi?id=120457

        Reviewed by David Hyatt.

        This patch is based on the work of Alexandru Chiculita at https://bugs.webkit.org/attachment.cgi?id=203872&action=review

        The composited layers inside the named flow threads are collected as part of the regions (as children of the
        GraphicsLayer of the layer that corresponds to the region (which is attached to the parent renderer of
        RenderNameFlowFragment)).
        When a region displays a layer that needs accelerated compositing we activate the accelerated compositing for
        that region too (inside RenderLayerCompositor::computeRegionCompositingRequirements).

        This patch has landed before (as http://trac.webkit.org/changeset/156451), but was reverted because
        fast/multicol/mixed-positioning-stacking-order.html failed. The fix is inside RenderLayerCompositor::canBeComposited
        that only enables compositing for layers inside flow threads that collect the graphics layers under the regions.

        Another change from changeset #156451 is that now the region renderers are created as anonymous renderers under
        the element that has the flow-from property. When a composited layer is needed for the region, it sits in it's
        parent renderer, not in the region renderer (RenderNamedFlowFragment).

        Tests: compositing/regions/crash-transform-inside-region.html
               compositing/regions/floated-region-with-transformed-child.html
               compositing/regions/move-layer-from-one-region-to-another.html
               compositing/regions/propagate-region-box-shadow-border-padding-for-video.html
               compositing/regions/propagate-region-box-shadow-border-padding.html
               compositing/regions/region-as-layer-in-another-flowthread.html
               compositing/regions/transform-transparent-positioned-video-inside-region.html
               compositing/regions/transformed-layer-inside-transformed-layer.html
               compositing/regions/z-index-update.html
               compositing/regions/z-index.html

        * rendering/FlowThreadController.cpp:
        (WebCore::FlowThreadController::updateRenderFlowThreadLayersIfNeeded):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::propagateStyleToAnonymousChildren): Not for RenderFlowThreads, as they are updated
        through the RenderView::styleDidChange function.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::layout): When the layout of the flow thread is over (including the 2 phase layout),
        we update all the mappings between the layers inside the flow thread and the regions where those layers will be
        painted.
        (WebCore::RenderFlowThread::hasCompositingRegionDescendant): Whether any of the regions has a compositing descendant.
        (WebCore::RenderFlowThread::getLayerListForRegion):
        (WebCore::RenderFlowThread::regionForCompositedLayer):
        (WebCore::RenderFlowThread::cachedRegionForCompositedLayer):
        (WebCore::RenderFlowThread::collectsGraphicsLayersUnderRegions):
        (WebCore::RenderFlowThread::updateLayerToRegionMappings): Triggers an update of the layers if a layer has moved
        from a region to another since the last update.
        (WebCore::RenderFlowThread::updateAllLayerToRegionMappings):
        * rendering/RenderFlowThread.h:
        * rendering/RenderGeometryMap.cpp:
        (WebCore::RenderGeometryMap::pushRenderFlowThread):
        * rendering/RenderGeometryMap.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::enclosingFlowThreadAncestor):
        (WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::calculateLayerBounds): When we calculate the bounds of the RenderView, we ignore those
        flow threads that collect the graphics layers under the regions.
        (WebCore::RenderLayer::dirtyZOrderLists):
        (WebCore::RenderLayer::dirtyNormalFlowList):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::shouldClipCompositedBounds): Not if it's a flow thread that collects the graphics
        layers under the regions
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Now adjusts the ancestorCompositingBounds for the FlowThread.
        (WebCore::RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread): Make sure that the region propagates
        its borders, paddings, outlines or box-shadows to layers inside it.
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer):
        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Now calls computeRegionCompositingRequirements.
        (WebCore::RenderLayerCompositor::computeRegionCompositingRequirements):
        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree): Do not iterate the RenderFlowThread directly if
        we are going to collect the composited layers as part of regions.
        (WebCore::RenderLayerCompositor::rebuildRegionCompositingLayerTree):
        (WebCore::RenderLayerCompositor::canBeComposited): CSS Regions flow threads do not need to be composited as we
        use composited RenderRegions to render the background of the RenderFlowThread.
        (WebCore::RenderLayerCompositor::requiresCompositingForIndirectReason): If it's a container of a css region.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderMultiColumnSet.cpp:
        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowFragment.h:
        (WebCore::RenderNamedFlowFragment::layerOwner): When the content inside the region requires the region to have a
        layer, the layer will be created on the region's parent renderer instead. This method returns that renderer
        holding the layer. The return value may be null.
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::RenderNamedFlowThread):
        (WebCore::RenderNamedFlowThread::nextRendererForNode):
        (WebCore::RenderNamedFlowThread::previousRendererForNode):
        (WebCore::RenderNamedFlowThread::addFlowChild):
        (WebCore::RenderNamedFlowThread::removeFlowChild):
        (WebCore::RenderNamedFlowThread::collectsGraphicsLayersUnderRegions):
        * rendering/RenderNamedFlowThread.h: m_flowThreadChildList is now allocated through an OwnPtr to keep the render
        arena under the size limit.
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::adjustRegionBoundsFromFlowThreadPortionRect):
        * rendering/RenderRegion.h:
        (WebCore::toRenderRegion):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeLayers):
        * WebCore.exp.in: WebCore::RenderLayer::isFlowThreadCollectingGraphicsLayersUnderRegions

2013-10-21  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Fixing mediastream debug build
        https://bugs.webkit.org/show_bug.cgi?id=123104

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):

2013-10-21  Andreas Kling  <akling@apple.com>

        Merge RenderListMarker::styleWillChange() into styleDidChange().
        <https://webkit.org/b/123098>

        If the marker's list-style-type or list-style-position changed, we
        need to dirty the layout. Move this logic to styleDidChange() so we
        can get rid of one styleWillChange() overload.

        Reviewed by Antti Koivisto.

2013-10-21  Mihai Maerean  <mmaerean@adobe.com>

        [CSS Regions] Fix WHITESPACE issues in the CSS grammar.
        https://bugs.webkit.org/show_bug.cgi?id=123082

        Reviewed by Andreas Kling.

        This is a port of Rune Lillesveen's patch from https://codereview.chromium.org/25607005

        Fix WHITESPACE issues in the CSS grammar.

        A single WHITESPACE token consumes consecutive spaces, but does not consume
        spaces separated by comments. That means S* and S+ in CSS grammars need to
        accept multiple WHITESPACE tokens. Additionally, white spaces are not
        mandatory to separate an @-symbol and the rest of the prelude.

        Use space non-terminal instead of WHITESPACE for S+ in calc expressions.

        Use maybe_space non-terminal instead of WHITESPACE for S* after @-webkit-filter
        and @-webkit-region.

        Tests: fast/css/calc-comments-allowed.html
               fast/regions/webkit-region-syntax-space.html

        * css/CSSGrammar.y.in:

2013-10-21  Anton Obzhirov  <a.obzhirov@samsung.com>

        [ATK] Use atk_object_notify_state_change instead of manually emitting signals
        https://bugs.webkit.org/show_bug.cgi?id=122968

        Reviewed by Mario Sanchez Prada.

        Refactor emitting "state-change" event to use atk_object_notify_state_change
        instead of using g_signal_emit_by_name.

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange):
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::frameLoadingEventPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        * accessibility/atk/WebKitAccessibleWrapperAtk.cpp:
        (webkitAccessibleDetach):
        * editing/atk/FrameSelectionAtk.cpp:
        (WebCore::maybeEmitTextFocusChange):

2013-10-21  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Make TYPE_CASTS_BASE more flexible
        https://bugs.webkit.org/show_bug.cgi?id=122951

        Reviewed by Andreas Kling.

        TYPE_CASTS_BASE is being used by node|element type casts. However, it is difficult
        to be used by other type casts. For instance, CSSValue, Accessibility and so on.
        This patch modifies TYPE_CASTS_BASE which can support other type casts.

        Besides TYPE_CASTS_BASE body is moved from node.h to Assertions.h.

        No new tests, no behavior changes.

        * dom/Document.h:
        * dom/Node.h:

2013-10-21  Santosh Mahto  <santosh.ma@samsung.com>

        ASSERTION FAILED: !style->propertyIsImportant(propertyID) in WebCore::setTextDecorationProperty
        https://bugs.webkit.org/show_bug.cgi?id=122097

        Reviewed by Ryosuke Niwa.

        When remove format command is called we pushdown the ancestor style
        down to its children. Currently applying inline style to iframe
        while pushing down style which causes iframe to be reinserted in tree and
        triggres again subframe loading which repeats everytime and finally
        crash happens. So we should avoid applying inline style to iframe
        element as it doesnot reflect in its content while pushing down style
        on it.

        And ASSERT call has been removed from setTextDecoration property as
        the scenario is perfectly valid case.

        Test: editing/execCommand/remove-format-textdecoration-in-iframe.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Return if
        element is iframe.
        * editing/EditingStyle.cpp:
        (WebCore::StyleChange::setTextDecorationProperty): Remove ASSERT.

2013-10-20  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 5)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Antti Koivisto.

        - Move m_lineBoxes to RenderBlockFlow.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::innerTextIfTruncated):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::willBeDestroyed):
        (WebCore::RenderBlock::deleteLineBoxTree):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::removeFromDelayedUpdateScrollInfoSet):
        (WebCore::RenderBlock::paintContents):
        (WebCore::blockDirectionOffset):
        (WebCore::inlineDirectionOffset):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::hitTestContents):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::inlineBlockBaseline):
        (WebCore::RenderBlock::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlock::addFocusRingRects):
        (WebCore::RenderBlock::showLineTreeAndMark):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::addOverflowFromInlineChildren):
        (WebCore::RenderBlock::hasInlineBoxChildren):
        (WebCore::RenderBlock::paintInlineChildren):
        (WebCore::RenderBlock::hitTestInlineChildren):
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::RenderBlockFlow):
        (WebCore::RenderBlockFlow::willBeDestroyed):
        (WebCore::RenderBlockFlow::deleteLineBoxTree):
        (WebCore::RenderBlockFlow::hitTestInlineChildren):
        (WebCore::RenderBlockFlow::adjustForBorderFit):
        (WebCore::RenderBlockFlow::fitBorderToLinesIfNeeded):
        (WebCore::RenderBlockFlow::markLinesDirtyInBlockRange):
        (WebCore::RenderBlockFlow::firstLineBoxBaseline):
        (WebCore::RenderBlockFlow::inlineBlockBaseline):
        (WebCore::RenderBlockFlow::inlineSelectionGaps):
        (WebCore::RenderBlockFlow::positionForBox):
        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
        (WebCore::RenderBlockFlow::addFocusRingRectsForInlineChildren):
        (WebCore::RenderBlockFlow::paintInlineChildren):
        (WebCore::RenderBlockFlow::relayoutForPagination):
        (WebCore::RenderBlockFlow::showLineTreeAndMark):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::lineBoxes):
        (WebCore::RenderBlockFlow::firstLineBox):
        (WebCore::RenderBlockFlow::lastLineBox):
        (WebCore::RenderBlockFlow::firstRootBox):
        (WebCore::RenderBlockFlow::lastRootBox):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::addOverflowFromInlineChildren):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):

2013-10-20  Andreas Kling  <akling@apple.com>

        Avoid unnecessary vector copy in AnimationController event dispatch.
        <https://webkit.org/b/122994>

        Use Vector's move constructor instead of making a copy of the pending
        events queue and then clearing it.

        Reviewed by Simon Fraser.

2013-10-19  Brady Eidson  <beidson@apple.com>

        Add abstract IDBBackingStoreInterface, use it to get IDBDatabaseBackendLevelDB closer to going cross-platform
        https://bugs.webkit.org/show_bug.cgi?id=123074

        Reviewed by Andreas Kling.

        * Modules/indexeddb/IDBBackingStoreInterface.h: Added.
        (WebCore::IDBBackingStoreInterface::~IDBBackingStoreInterface):
        (WebCore::IDBBackingStoreInterface::Transaction::~Transaction):

        * Modules/indexeddb/IDBTransactionBackendInterface.h:

        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        (WebCore::IDBBackingStoreLevelDB::updateIDBDatabaseIntVersion):
        (WebCore::IDBBackingStoreLevelDB::createObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteObjectStore):
        (WebCore::IDBBackingStoreLevelDB::getRecord):
        (WebCore::IDBBackingStoreLevelDB::putRecord):
        (WebCore::IDBBackingStoreLevelDB::clearObjectStore):
        (WebCore::IDBBackingStoreLevelDB::deleteRecord):
        (WebCore::IDBBackingStoreLevelDB::getKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::maybeUpdateKeyGeneratorCurrentNumber):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInObjectStore):
        (WebCore::IDBBackingStoreLevelDB::createIndex):
        (WebCore::IDBBackingStoreLevelDB::deleteIndex):
        (WebCore::IDBBackingStoreLevelDB::putIndexDataForRecord):
        (WebCore::IDBBackingStoreLevelDB::findKeyInIndex):
        (WebCore::IDBBackingStoreLevelDB::getPrimaryKeyViaIndex):
        (WebCore::IDBBackingStoreLevelDB::keyExistsInIndex):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreCursor):
        (WebCore::IDBBackingStoreLevelDB::openObjectStoreKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexKeyCursor):
        (WebCore::IDBBackingStoreLevelDB::openIndexCursor):
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        (WebCore::IDBBackingStoreLevelDB::Transaction::reset):
        (WebCore::IDBBackingStoreLevelDB::Transaction::levelDBTransactionFrom):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::deleteFunction):
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::verifyIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::writeIndexKeys):
        (WebCore::IDBObjectStoreBackendLevelDB::IndexWriter::addingKeyAllowed):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:
        (WebCore::IDBTransactionBackendLevelDB::backingStoreTransaction):

        * WebCore.xcodeproj/project.pbxproj:
        * GNUmakefile.list.am:

2013-10-20  Andreas Kling  <akling@apple.com>

        Use PassRef for StyleSheetContents.
        <https://webkit.org/b/123083>

        Let functions that return newly-constructed StyleSheetContents
        objects vend PassRef<StyleSheetContents> instead of PassRefPtr.

        Updated functions that take StyleSheetContents in arguments
        accordingly. And CSSStyleSheet now has a Ref internally. Woo!

        Reviewed by Antti Koivisto.

2013-10-20  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Removing "unused parameter" compiling warnings from WebKit2 and WebCore
        https://bugs.webkit.org/show_bug.cgi?id=123075

        Reviewed by Andreas Kling.

        No new tests needed.

        * Modules/mediastream/RTCDTMFToneChangeEvent.cpp:
        (WebCore::RTCDTMFToneChangeEvent::create):
        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (lineAtPositionForAtkBoundary):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContentsEntry):

2013-10-19  Andreas Kling  <akling@apple.com>

        Use PassRef for constructing StyleRules.
        <https://webkit.org/b/123072>

        Let functions that return newly-constructed StyleRuleFoo objects
        vend PassRef<StyleRuleFoo> instead of PassRefPtr.

        Since StyleRuleBase::copy() has to return something, we can't rely
        on ASSERT_NOT_REACHED() + return nullptr anymore, so I've replaced
        those with CRASH(). No call sites actually handled null anyway.

        Reviewed by Sam Weinig.

2013-10-19  Jer Noble  <jer.noble@apple.com>

        Unreviewed roll out of r157695; broke Mac builds.

        * Configurations/FeatureDefines.xcconfig:

2013-10-07  Jer Noble  <jer.noble@apple.com>

        [MSE] [Mac] Enable MediaSource on the Mac
        https://bugs.webkit.org/show_bug.cgi?id=122484

        Reviewed by Darin Adler.

        Enable ENABLE_MEDIA_SOURCE.

        * Configurations/FeatureDefines.xcconfig:

2013-10-19  Sam Weinig  <sam@webkit.org>

        CTTE: Tighten up type usage around InputType::innerTextElement()
        https://bugs.webkit.org/show_bug.cgi?id=123078

        Reviewed by Anders Carlsson.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleReplacedElement):
        * html/HTMLElement.h:
        (WebCore::HTMLElement::isTextControlInnerTextElement):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::innerTextElement):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::innerTextElement):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTextFormControlElement.cpp:
        (WebCore::hasVisibleTextArea):
        (WebCore::HTMLTextFormControlElement::selection):
        (WebCore::HTMLTextFormControlElement::innerTextValue):
        (WebCore::HTMLTextFormControlElement::valueWithHardLineBreaks):
        * html/HTMLTextFormControlElement.h:
        * html/InputType.h:
        (WebCore::InputType::innerTextElement):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::forwardEvent):
        (WebCore::TextFieldInputType::innerTextElement):
        * html/TextFieldInputType.h:
        * html/shadow/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::renderer):
        * html/shadow/TextControlInnerElements.h:
        (WebCore::isTextControlInnerTextElement):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isTextControlInnerBlock):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::innerTextElement):
        (WebCore::RenderTextControl::styleDidChange):
        (WebCore::RenderTextControl::textBlockLogicalWidth):
        (WebCore::RenderTextControl::updateFromElement):
        (WebCore::RenderTextControl::computeLogicalHeight):
        (WebCore::RenderTextControl::hitInnerTextElement):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::autoscroll):
        (WebCore::RenderTextControlSingleLine::scroll):
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::toRenderTextControlInnerBlock):

2013-10-19  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 4)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Andreas Kling.

        - Fix classes derived from RenderBlockFlow that were still calling
          up to RenderBlock rather than RenderBlockFlow.

        * rendering/RenderDetailsMarker.cpp:
        (WebCore::RenderDetailsMarker::paint):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::styleDidChange):
        (WebCore::RenderFlowThread::layout):
        (WebCore::RenderFlowThread::nodeAtPoint):
        * rendering/RenderFullScreen.cpp:
        (RenderFullScreenPlaceholder::willBeDestroyed):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::styleDidChange):
        * rendering/RenderMultiColumnBlock.cpp:
        (WebCore::RenderMultiColumnBlock::styleDidChange):
        (WebCore::RenderMultiColumnBlock::updateLogicalWidthAndColumnWidth):
        (WebCore::RenderMultiColumnBlock::addChild):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateFromElement):
        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsBlock::styleDidChange):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::rubyBaseSafe):
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::removeChild):
        (WebCore::RenderRubyRun::layout):
        * rendering/RenderRubyText.cpp:
        (WebCore::RenderRubyText::textAlignmentForLine):
        (WebCore::RenderRubyText::adjustInlineDirectionLineBounds):
        * rendering/RenderTableCaption.cpp:
        (WebCore::RenderTableCaption::willBeRemovedFromTree):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::willBeRemovedFromTree):
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        (WebCore::RenderTableCell::offsetFromContainer):
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::computeRectForRepaint):
        (WebCore::RenderTableCell::styleDidChange):
        (WebCore::RenderTableCell::borderLeft):
        (WebCore::RenderTableCell::borderRight):
        (WebCore::RenderTableCell::borderTop):
        (WebCore::RenderTableCell::borderBottom):
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        (WebCore::RenderTableCell::paint):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::styleDidChange):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::scrollWidth):
        (WebCore::RenderTextControlSingleLine::scrollHeight):
        (WebCore::RenderTextControlSingleLine::scrollLeft):
        (WebCore::RenderTextControlSingleLine::scrollTop):
        (WebCore::RenderTextControlSingleLine::scroll):
        (WebCore::RenderTextControlSingleLine::logicalScroll):
        * rendering/RenderTextTrackCue.cpp:
        (WebCore::RenderTextTrackCue::layout):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layoutContent):
        (WebCore::RenderView::addChild):
        (WebCore::RenderView::visualOverflowRect):
        (WebCore::RenderView::styleDidChange):
        * rendering/svg/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::setStyle):
        (WebCore::RenderSVGBlock::updateFromStyle):
        (WebCore::RenderSVGBlock::willBeDestroyed):
        (WebCore::RenderSVGBlock::styleWillChange):
        (WebCore::RenderSVGBlock::styleDidChange):
        * rendering/svg/SVGTextQuery.cpp:
        (WebCore::flowBoxForRenderer):

2013-10-19  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 3)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Andreas Kling.

        - Move containsNonZeroBidiLevel to RenderBlockFlow.

        * editing/Editor.cpp:
        (WebCore::Editor::hasBidiSelection):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::containsNonZeroBidiLevel):
        * rendering/RenderBlockFlow.h:

2013-10-18  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 2)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Antti Koivisto.

        - Move truncation (e.g. line clamp and ellipse) support to RenderBlockFlow.

        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::EllipsisBox):
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::markupBox):
        (WebCore::EllipsisBox::selectionRect):
        (WebCore::EllipsisBox::paintSelection):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/EllipsisBox.h:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.cpp:
        (WebCore::shouldCheckLines):
        (WebCore::RenderBlockFlow::lineAtIndex):
        (WebCore::RenderBlockFlow::lineCount):
        (WebCore::getHeightForLineCount):
        (WebCore::RenderBlockFlow::heightForLineCount):
        (WebCore::RenderBlockFlow::clearTruncation):
        * rendering/RenderBlockFlow.h:
        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
        (WebCore::RenderDeprecatedFlexibleBox::clearLineClamp):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::placeEllipsis):

2013-10-19  Andreas Kling  <akling@apple.com>

        StyleResolver should deal in PassRef<RenderStyle> where possible.
        <https://webkit.org/b/123061>

        Make StyleResolver functions that returned or took RenderStyles
        by PassRefPtr use PassRef instead where possible.

        Reviewed by Anders Carlsson.

2013-10-19  Brady Eidson  <beidson@apple.com>

        Global rename of the class "IDBBackingStore" to "IDBBackingStoreLevelDB"

        Rubberstamped by Anders Carlsson (And Andreas Kling wanted to, but he wasn’t around)

        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp:
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h:

2013-10-19  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Link fails.
        https://bugs.webkit.org/show_bug.cgi?id=123019

        Reviewed by Darin Adler.

        Added empty CertificateInfo implementation for Curl.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * platform/network/curl/CertificateInfoCurl.cpp: Added.
        (WebCore::CertificateInfo::CertificateInfo):
        (WebCore::CertificateInfo::~CertificateInfo):

2013-10-19  Filip Pizlo  <fpizlo@apple.com>

        libWebCoreTestSupport should have explicit exports
        https://bugs.webkit.org/show_bug.cgi?id=123053

        Reviewed by Oliver Hunt.

        No new tests because there is no change in behavior.

        * Configurations/WebCoreTestSupport.xcconfig:
        * testing/js/WebCoreTestSupport.h:

2013-10-18  Andreas Kling  <akling@apple.com>

        Start passing RenderStyle around with PassRef.
        <https://webkit.org/b/123051>

        Made the RenderStyle::create methods return PassRef<RenderStyle>
        and RenderElement::setStyle take a PassRef<RenderStyle>.

        Reviewed by Darin Adler.

2013-10-18  Sam Weinig  <sam@webkit.org>

        Move m_lineBoxes from RenderBlock to RenderBlockFlow (Part 1)
        https://bugs.webkit.org/show_bug.cgi?id=122969

        Reviewed by Dan Bernstein.

        - Make the RootInlineBox constructor take a RenderBlockFlow.
        - Move createRootInlineBox, and createAndAppendRootInlineBox to RenderBlockFlow.

        * editing/VisibleUnits.cpp:
        (WebCore::absoluteLineDirectionPointToLocalPointInBlock):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::locationIncludingFlipping):
        (WebCore::InlineBox::flipForWritingMode):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxRangeInInlineDirection):
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBlockFlow.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlockFlow::createRootInlineBox):
        (WebCore::RenderBlockFlow::createAndAppendRootInlineBox):
        (WebCore::createInlineBoxForRenderer):
        (WebCore::RenderBlockFlow::createLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::positionLineBox):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::localSelectionRect):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::rendererLineBoxes):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::containingRegion):
        (WebCore::RootInlineBox::setContainingRegion):
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::beforeAnnotationsAdjustment):
        (WebCore::RootInlineBox::lineSnapAdjustment):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::computeCaretRect):
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::selectionTopAdjustedForPrecedingBlock):
        (WebCore::RootInlineBox::selectionBottom):
        (WebCore::RootInlineBox::blockDirectionPointInLine):
        (WebCore::RootInlineBox::blockFlow):
        (WebCore::RootInlineBox::closestLeafChildForPoint):
        (WebCore::RootInlineBox::removeLineBoxFromRenderObject):
        (WebCore::RootInlineBox::extractLineBoxFromRenderObject):
        (WebCore::RootInlineBox::attachLineBoxToRenderObject):
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/svg/RenderSVGText.h:
        (WebCore::toRenderSVGText):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        (WebCore::SVGRootInlineBox::renderSVGText):
        (WebCore::SVGRootInlineBox::paint):
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation):
        (WebCore::SVGRootInlineBox::layoutRootBox):
        * rendering/svg/SVGRootInlineBox.h:

2013-10-18  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Double-buffering and minimization of repaints
        https://bugs.webkit.org/show_bug.cgi?id=123043

        Reviewed by Simon Fraser.

        No new tests, not yet testable.

        * WebCore.exp.in:
        Export one version of drawLayerContents and Region::contains.

        * WebCore.xcodeproj/project.pbxproj:
        Expose WebLayer.h as a private header.

        * platform/graphics/mac/WebLayer.h:
        Clean up this header, and add a new drawLayerContents that can operate without a CALayer.

        * platform/graphics/mac/WebLayer.mm:
        (WebCore::drawLayerContents):
        Split drawLayerContents into one method that acquires properties CALayer,
        and one that just does the painting.

2013-10-18  Anders Carlsson  <andersca@apple.com>

        Try to fix the Lion build.

        * bindings/objc/ObjCNodeFilterCondition.h:

2013-10-18  Daniel Bates  <dabates@apple.com>

        [iOS] Upstream WebSafe{GCActivityCallback, IncrementalSweeper}IOS
        https://bugs.webkit.org/show_bug.cgi?id=123049

        Reviewed by Mark Hahnenberg.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/ios/WebSafeGCActivityCallbackIOS.h: Added.
        * platform/ios/WebSafeIncrementalSweeperIOS.h: Added.

2013-10-18  Anders Carlsson  <andersca@apple.com>

        Remove spaces between template angle brackets
        https://bugs.webkit.org/show_bug.cgi?id=123040

        Reviewed by Andreas Kling.

        * Modules/encryptedmedia/MediaKeySession.h:
        * Modules/encryptedmedia/MediaKeys.h:
        * Modules/geolocation/Geolocation.h:
        * Modules/geolocation/GeolocationController.cpp:
        (WebCore::GeolocationController::positionChanged):
        (WebCore::GeolocationController::errorOccurred):
        * Modules/geolocation/GeolocationController.h:
        * Modules/indexeddb/IDBCallbacks.h:
        * Modules/indexeddb/IDBDatabase.h:
        * Modules/indexeddb/IDBDatabaseBackendInterface.h:
        * Modules/indexeddb/IDBEventDispatcher.cpp:
        (WebCore::IDBEventDispatcher::dispatch):
        * Modules/indexeddb/IDBEventDispatcher.h:
        * Modules/indexeddb/IDBKey.h:
        * Modules/indexeddb/IDBObjectStore.h:
        * Modules/indexeddb/IDBPendingTransactionMonitor.cpp:
        * Modules/indexeddb/IDBRequest.cpp:
        (WebCore::IDBRequest::dispatchEvent):
        * Modules/indexeddb/IDBRequest.h:
        (WebCore::IDBRequest::onSuccessWithPrefetch):
        * Modules/indexeddb/IDBTransaction.cpp:
        (WebCore::IDBTransaction::dispatchEvent):
        * Modules/indexeddb/IDBTransaction.h:
        * Modules/mediacontrols/MediaControlsHost.cpp:
        (WebCore::MediaControlsHost::sortedTrackListForMenu):
        * Modules/mediacontrols/MediaControlsHost.h:
        * Modules/mediasource/MediaSource.cpp:
        (WebCore::MediaSource::activeRanges):
        * Modules/mediasource/MediaSource.h:
        * Modules/mediasource/MediaSourceBase.cpp:
        (WebCore::MediaSourceBase::buffered):
        * Modules/mediasource/MediaSourceBase.h:
        * Modules/mediasource/MediaSourceRegistry.cpp:
        (WebCore::MediaSourceRegistry::unregisterURL):
        * Modules/mediasource/MediaSourceRegistry.h:
        * Modules/mediasource/SourceBufferList.h:
        * Modules/mediasource/WebKitMediaSource.cpp:
        (WebCore::WebKitMediaSource::activeRanges):
        * Modules/mediasource/WebKitMediaSource.h:
        * Modules/mediasource/WebKitSourceBufferList.h:
        * Modules/mediastream/MediaStream.cpp:
        (WebCore::MediaStream::scheduledEventTimerFired):
        * Modules/mediastream/MediaStream.h:
        * Modules/mediastream/MediaStreamRegistry.h:
        * Modules/mediastream/MediaStreamTrack.h:
        * Modules/mediastream/RTCDTMFSender.cpp:
        (WebCore::RTCDTMFSender::scheduledEventTimerFired):
        * Modules/mediastream/RTCDTMFSender.h:
        * Modules/mediastream/RTCDataChannel.cpp:
        (WebCore::RTCDataChannel::scheduledEventTimerFired):
        * Modules/mediastream/RTCDataChannel.h:
        * Modules/mediastream/RTCPeerConnection.cpp:
        (WebCore::RTCPeerConnection::stop):
        (WebCore::RTCPeerConnection::scheduledEventTimerFired):
        * Modules/mediastream/RTCPeerConnection.h:
        * Modules/mediastream/RTCStatsResponse.h:
        (WebCore::RTCStatsResponse::result):
        * Modules/notifications/Notification.h:
        * Modules/notifications/NotificationCenter.h:
        * Modules/speech/SpeechSynthesis.cpp:
        (WebCore::SpeechSynthesis::getVoices):
        * Modules/speech/SpeechSynthesis.h:
        * Modules/webaudio/AudioBuffer.h:
        * Modules/webaudio/AudioNode.h:
        * Modules/webaudio/AudioNodeOutput.h:
        * Modules/webaudio/MediaStreamAudioSource.cpp:
        (WebCore::MediaStreamAudioSource::setAudioFormat):
        (WebCore::MediaStreamAudioSource::consumeAudio):
        * Modules/webaudio/PeriodicWave.h:
        * Modules/webaudio/ScriptProcessorNode.h:
        * Modules/webdatabase/AbstractDatabaseServer.h:
        * Modules/webdatabase/DatabaseBackend.h:
        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::origins):
        * Modules/webdatabase/DatabaseManager.h:
        * Modules/webdatabase/DatabaseServer.cpp:
        (WebCore::DatabaseServer::origins):
        * Modules/webdatabase/DatabaseServer.h:
        * Modules/webdatabase/DatabaseThread.h:
        * Modules/webdatabase/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        (WebCore::DatabaseTracker::origins):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::deleteAllDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * Modules/webdatabase/DatabaseTracker.h:
        * Modules/webdatabase/SQLStatementBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.cpp:
        * Modules/webdatabase/SQLTransactionBackend.h:
        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::shutdown):
        * Modules/webdatabase/SQLTransactionCoordinator.h:
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryDataCallback):
        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
        * Modules/websockets/WebSocket.cpp:
        (WebCore::WebSocket::didReceiveBinaryData):
        * Modules/websockets/WebSocket.h:
        * Modules/websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processFrame):
        * Modules/websockets/WebSocketChannel.h:
        * Modules/websockets/WebSocketChannelClient.h:
        (WebCore::WebSocketChannelClient::didReceiveBinaryData):
        * Modules/websockets/WebSocketExtensionDispatcher.h:
        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::workerGlobalScopeDidReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
        (WebCore::WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer):
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
        * Modules/websockets/WorkerThreadableWebSocketChannel.h:
        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::~AXObjectCache):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::ariaLabeledByText):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityText::AccessibilityText):
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        (WebCore::toRefPtrNativeArray):
        * bindings/js/JSDOMGlobalObject.h:
        * bindings/js/JSMutationCallback.cpp:
        (WebCore::JSMutationCallback::call):
        * bindings/js/JSMutationCallback.h:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        * bindings/js/PageScriptDebugServer.h:
        * bindings/js/ScheduledAction.h:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::collectIsolatedContexts):
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptDebugServer.h:
        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * bindings/objc/ObjCNodeFilterCondition.h:
        * bridge/objc/objc_class.h:
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::invalidate):
        * bridge/runtime_root.h:
        * css/BasicShapeFunctions.cpp:
        (WebCore::basicShapeForValue):
        * css/CSSBasicShapes.h:
        (WebCore::CSSBasicShapePolygon::values):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::valueForFilter):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontFace):
        (WebCore::CSSFontSelector::beginLoadTimerFired):
        * css/CSSFontSelector.h:
        * css/CSSGroupingRule.h:
        * css/CSSImageGeneratorValue.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::adoptSelectorVector):
        * css/CSSParserValues.h:
        * css/CSSPropertySourceData.h:
        * css/CSSRuleList.h:
        (WebCore::StaticCSSRuleList::rules):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::fontLoaded):
        * css/CSSSegmentedFontFace.h:
        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::adoptSelectorVector):
        * css/CSSSelectorList.h:
        * css/CSSStyleSheet.h:
        * css/CSSValue.h:
        (WebCore::compareCSSValueVector):
        * css/CSSValuePool.h:
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::collectRulesFromUserStyleSheets):
        (WebCore::DocumentRuleSets::appendAuthorStyleSheets):
        * css/DocumentRuleSets.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchedRuleList):
        * css/ElementRuleCollector.h:
        * css/FontLoader.h:
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheetContents):
        (WebCore::InspectorCSSOMWrappers::collectFromStyleSheets):
        * css/InspectorCSSOMWrappers.h:
        * css/MediaList.cpp:
        (WebCore::MediaQuerySet::parse):
        (WebCore::MediaList::item):
        (WebCore::reportMediaQueryWarningIfNeeded):
        * css/MediaList.h:
        (WebCore::MediaQuerySet::queryVector):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryMatcher.h:
        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::cloneAndCacheForCSSOM):
        * css/PropertySetCSSStyleDeclaration.h:
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addToRuleSet):
        (WebCore::RuleSet::addRegionRule):
        (WebCore::RuleSet::addChildRules):
        (WebCore::RuleSet::addRulesFromSheet):
        * css/RuleSet.h:
        * css/SelectorFilter.h:
        * css/StyleInvalidationAnalysis.cpp:
        (WebCore::StyleInvalidationAnalysis::analyzeStyleSheet):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getLayeredShorthandValue):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::appendAuthorStyleSheets):
        (WebCore::StyleResolver::keyframeStylesForAnimation):
        (WebCore::StyleResolver::styleRulesForElement):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):
        (WebCore::StyleResolver::resolveVariables):
        (WebCore::StyleResolver::applyProperty):
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        (WebCore::StyleResolver::loadPendingShaders):
        * css/StyleResolver.h:
        * css/StyleRule.cpp:
        (WebCore::StyleRule::splitIntoMultipleRulesWithMaximumSelectorComponentCount):
        (WebCore::StyleRuleGroup::StyleRuleGroup):
        (WebCore::StyleRuleMedia::StyleRuleMedia):
        (WebCore::StyleRuleSupports::StyleRuleSupports):
        (WebCore::StyleRuleRegion::StyleRuleRegion):
        * css/StyleRule.h:
        (WebCore::StyleRule::parserAdoptSelectorVector):
        (WebCore::StyleRulePage::parserAdoptSelectorVector):
        (WebCore::StyleRuleGroup::childRules):
        (WebCore::StyleRuleMedia::create):
        (WebCore::StyleRuleSupports::create):
        (WebCore::StyleRuleRegion::create):
        (WebCore::StyleRuleHost::create):
        (WebCore::StyleRuleHost::StyleRuleHost):
        * css/StyleScopeResolver.h:
        * css/StyleSheetContents.cpp:
        (WebCore::StyleSheetContents::parserAppendRule):
        (WebCore::childRulesHaveFailedOrCanceledSubresources):
        * css/StyleSheetContents.h:
        (WebCore::StyleSheetContents::childRules):
        (WebCore::StyleSheetContents::importRules):
        * css/StyleSheetList.cpp:
        (WebCore::StyleSheetList::styleSheets):
        (WebCore::StyleSheetList::item):
        * css/StyleSheetList.h:
        * css/WebKitCSSKeyframesRule.h:
        (WebCore::StyleRuleKeyframes::keyframes):
        * dom/CheckedRadioButtons.h:
        * dom/ClientRectList.h:
        * dom/ContainerNode.h:
        (WebCore::ChildNodesLazySnapshot::nextNode):
        (WebCore::ChildNodesLazySnapshot::takeSnapshot):
        * dom/CrossThreadTask.h:
        * dom/Document.cpp:
        (WebCore::Document::webkitCancelFullScreen):
        (WebCore::Document::webkitExitFullscreen):
        (WebCore::Document::fullScreenChangeDelayTimerFired):
        (WebCore::Document::didAssociateFormControlsTimerFired):
        * dom/Document.h:
        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::removeMarkers):
        * dom/DocumentMarkerController.h:
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::injectedUserStyleSheets):
        (WebCore::DocumentStyleSheetCollection::injectedAuthorStyleSheets):
        (WebCore::DocumentStyleSheetCollection::collectActiveStyleSheets):
        (WebCore::DocumentStyleSheetCollection::analyzeStyleSheetChange):
        (WebCore::styleSheetsUseRemUnits):
        (WebCore::filterEnabledNonemptyCSSStyleSheets):
        (WebCore::collectActiveCSSStyleSheetsFromSeamlessParents):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/DocumentStyleSheetCollection.h:
        * dom/Element.cpp:
        (WebCore::Element::attrNodeList):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * dom/Element.h:
        * dom/EventListenerMap.h:
        * dom/EventSender.h:
        (WebCore::EventSender::timerFired):
        * dom/IdTargetObserverRegistry.h:
        * dom/MutationCallback.h:
        * dom/MutationObserver.cpp:
        (WebCore::MutationObserver::takeRecords):
        (WebCore::MutationObserver::deliver):
        (WebCore::MutationObserver::deliverAllMutations):
        * dom/MutationObserver.h:
        * dom/MutationObserverRegistration.h:
        * dom/NamedFlowCollection.cpp:
        (WebCore::NamedFlowCollection::namedFlows):
        * dom/NamedFlowCollection.h:
        * dom/Node.cpp:
        (WebCore::Node::didMoveToNewDocument):
        (WebCore::Node::mutationObserverRegistry):
        (WebCore::Node::registerMutationObserver):
        (WebCore::Node::unregisterMutationObserver):
        (WebCore::Node::notifyMutationObserversNodeWillDetach):
        * dom/Node.h:
        * dom/NodeRareData.h:
        * dom/Range.cpp:
        (WebCore::Range::processContents):
        (WebCore::Range::processNodes):
        (WebCore::Range::processAncestorsAndTheirSiblings):
        * dom/Range.h:
        * dom/ScopedEventQueue.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::reportException):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptedAnimationController.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeChildrenInRange):
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        (WebCore::CompositeEditCommand::cloneParagraphUnderNewElement):
        * editing/CompositeEditCommand.h:
        * editing/EditingStyle.cpp:
        (WebCore::htmlElementEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfElement):
        (WebCore::htmlAttributeEquivalents):
        (WebCore::EditingStyle::conflictsWithImplicitStyleOfAttributes):
        (WebCore::EditingStyle::extractConflictingImplicitStyleOfAttributes):
        (WebCore::EditingStyle::elementIsStyledSpanOrHTMLEquivalent):
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):
        (WebCore::styleFromMatchedRulesForElement):
        * editing/Editor.cpp:
        (WebCore::Editor::countMatchesForText):
        * editing/Editor.h:
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::getAncestorsInsideBlock):
        (WebCore::InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock):
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doApply):
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/RemoveNodePreservingChildrenCommand.cpp:
        (WebCore::RemoveNodePreservingChildrenCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::removeUnrenderedNodes):
        * editing/SimplifyMarkupCommand.cpp:
        (WebCore::SimplifyMarkupCommand::doApply):
        (WebCore::SimplifyMarkupCommand::pruneSubsequentAncestorsToRemove):
        * editing/SimplifyMarkupCommand.h:
        * editing/SpellChecker.h:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        (WebCore::SplitElementCommand::doUnapply):
        * editing/WrapContentsInDummySpanCommand.cpp:
        (WebCore::WrapContentsInDummySpanCommand::executeApply):
        (WebCore::WrapContentsInDummySpanCommand::doUnapply):
        * editing/mac/AlternativeTextUIController.h:
        * fileapi/FileList.h:
        * history/BackForwardList.h:
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::setRedirectURLs):
        * history/HistoryItem.h:
        * history/mac/HistoryItemMac.mm:
        (WebCore::HistoryItem::setTransientProperty):
        * html/FormController.h:
        * html/HTMLAnchorElement.cpp:
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::append):
        * html/HTMLCollection.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::checkValidity):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        (WebCore::HTMLFormElement::checkValidity):
        (WebCore::HTMLFormElement::checkInvalidControlsAndCollectUnhandled):
        * html/HTMLFormElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateActiveTextTrackCues):
        (WebCore::HTMLMediaElement::platformTextTracks):
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
        * html/HTMLMediaElement.h:
        * html/HTMLPlugInImageElement.cpp:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setLength):
        * html/MediaController.cpp:
        (MediaController::asyncEventTimerFired):
        * html/MediaController.h:
        * html/MediaFragmentURIParser.h:
        * html/ValidationMessage.h:
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLTexture.h:
        * html/parser/BackgroundHTMLParser.cpp:
        (WebCore::BackgroundHTMLParser::BackgroundHTMLParser):
        * html/parser/BackgroundHTMLParser.h:
        (WebCore::BackgroundHTMLParser::create):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::startBackgroundParser):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLMetaCharsetParser.h:
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::TokenPreloadScanner::scan):
        (WebCore::TokenPreloadScanner::scanCommon):
        * html/parser/HTMLResourcePreloader.h:
        * html/parser/XSSAuditor.h:
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ensureInsertionPointList):
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/ContentDistributor.h:
        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlClosedCaptionsTrackListElement::rebuildTrackListMenu):
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
        * html/shadow/MediaControlElements.h:
        * html/track/InbandGenericTextTrack.h:
        * html/track/InbandWebVTTTextTrack.cpp:
        (WebCore::InbandWebVTTTextTrack::newCuesParsed):
        * html/track/LoadableTextTrack.cpp:
        (WebCore::LoadableTextTrack::newCuesAvailable):
        (WebCore::LoadableTextTrack::newRegionsAvailable):
        * html/track/TextTrackCueList.h:
        * html/track/TextTrackList.cpp:
        (TextTrackList::invalidateTrackIndexesAfterTrack):
        (TextTrackList::remove):
        (TextTrackList::contains):
        * html/track/TextTrackList.h:
        * html/track/TrackListBase.cpp:
        (TrackListBase::asyncEventTimerFired):
        * html/track/TrackListBase.h:
        * html/track/WebVTTParser.cpp:
        (WebCore::WebVTTParser::getNewCues):
        (WebCore::WebVTTParser::getNewRegions):
        * html/track/WebVTTParser.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/ContentSearchUtils.cpp:
        (WebCore::ContentSearchUtils::getRegularExpressionMatchesByLines):
        (WebCore::ContentSearchUtils::lineEndings):
        (WebCore::ContentSearchUtils::searchInTextByLines):
        * inspector/ContentSearchUtils.h:
        * inspector/DOMPatchSupport.cpp:
        (WebCore::DOMPatchSupport::patchNode):
        (WebCore::DOMPatchSupport::diff):
        (WebCore::DOMPatchSupport::innerPatchChildren):
        * inspector/DOMPatchSupport.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::getProperties):
        (WebCore::InjectedScript::getInternalProperties):
        (WebCore::InjectedScript::wrapCallFrames):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorAgent.cpp:
        (WebCore::InspectorAgent::enable):
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getFramesWithManifests):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBaseAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::SelectorProfile::toInspectorObject):
        (WebCore::UpdateRegionLayoutTask::onTimer):
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode):
        (WebCore::InspectorCSSAgent::getAllStyleSheets):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::getNamedFlowCollection):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForRegions):
        (WebCore::InspectorCSSAgent::buildObjectForNamedFlow):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::RevalidateStyleAttributeTask::onTimer):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::pushNodePathToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::getSearchResults):
        (WebCore::InspectorDOMAgent::getAttributes):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::styleAttributeInvalidated):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):
        * inspector/InspectorDOMStorageAgent.h:
        * inspector/InspectorDatabaseAgent.cpp:
        (WebCore::InspectorDatabaseAgent::getDatabaseTableNames):
        * inspector/InspectorDatabaseAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpointByUrl):
        (WebCore::InspectorDebuggerAgent::searchInContent):
        (WebCore::InspectorDebuggerAgent::setScriptSource):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorHeapProfilerAgent.cpp:
        (WebCore::InspectorHeapProfilerAgent::getProfileHeaders):
        * inspector/InspectorHeapProfilerAgent.h:
        * inspector/InspectorHistory.h:
        * inspector/InspectorIndexedDBAgent.cpp:
        * inspector/InspectorLayerTreeAgent.cpp:
        (WebCore::InspectorLayerTreeAgent::layersForNode):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy):
        (WebCore::InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy):
        * inspector/InspectorLayerTreeAgent.h:
        * inspector/InspectorMemoryAgent.h:
        * inspector/InspectorPageAgent.cpp:
        (WebCore::buildArrayForCookies):
        (WebCore::InspectorPageAgent::getCookies):
        (WebCore::InspectorPageAgent::searchInResource):
        (WebCore::InspectorPageAgent::searchInResources):
        (WebCore::InspectorPageAgent::buildObjectForFrameTree):
        * inspector/InspectorPageAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorResourceAgent.h:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::getProperties):
        * inspector/InspectorRuntimeAgent.h:
        * inspector/InspectorState.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyle::buildArrayForComputedStyle):
        (WebCore::InspectorStyle::styleWithProperties):
        (WebCore::selectorsFromSource):
        (WebCore::InspectorStyleSheet::buildObjectForSelectorList):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::lineEndings):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::lineEndings):
        * inspector/InspectorStyleSheet.h:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorArrayBase::writeJSON):
        * inspector/InspectorValues.h:
        * inspector/PageRuntimeAgent.cpp:
        (WebCore::PageRuntimeAgent::reportExecutionContextCreation):
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::buildInspectorArray):
        * inspector/ScriptCallStack.h:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll):
        (WebCore::setAllDefersLoading):
        (WebCore::DocumentLoader::getSubresources):
        * loader/DocumentLoader.h:
        * loader/FormState.h:
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::create):
        * loader/ProgressTracker.h:
        * loader/ResourceLoadScheduler.h:
        * loader/TextTrackLoader.cpp:
        (WebCore::TextTrackLoader::getNewCues):
        (WebCore::TextTrackLoader::getNewRegions):
        * loader/TextTrackLoader.h:
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::workerGlobalScopeDidReceiveData):
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::removeResource):
        (WebCore::ApplicationCache::dump):
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::getOriginsWithCache):
        * loader/archive/Archive.cpp:
        (WebCore::Archive::clearAllSubframeArchives):
        (WebCore::Archive::clearAllSubframeArchivesImpl):
        * loader/archive/Archive.h:
        (WebCore::Archive::subresources):
        (WebCore::Archive::subframeArchives):
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::addAllResources):
        * loader/archive/ArchiveResourceCollection.h:
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::createFromSelection):
        * loader/archive/cf/LegacyWebArchive.h:
        * loader/archive/mhtml/MHTMLParser.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/MemoryCache.h:
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::notifyPendingLoadDecisions):
        * loader/icon/IconDatabase.h:
        * page/CaptionUserPreferencesMediaAF.cpp:
        (WebCore::CaptionUserPreferencesMediaAF::sortedTrackListForMenu):
        * page/CaptionUserPreferencesMediaAF.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::didAssociateFormControls):
        * page/Console.h:
        * page/ContentSecurityPolicy.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/DeviceController.cpp:
        (WebCore::DeviceController::dispatchDeviceEvent):
        (WebCore::DeviceController::fireDeviceEvent):
        * page/DeviceController.h:
        * page/EditorClient.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent):
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::serviceScriptedAnimations):
        * page/Page.cpp:
        (WebCore::Page::findStringMatchingRanges):
        * page/Page.h:
        * page/PageGroup.h:
        * page/Performance.cpp:
        (WebCore::Performance::webkitGetEntriesByType):
        (WebCore::Performance::webkitGetEntriesByName):
        * page/Performance.h:
        * page/PerformanceEntryList.cpp:
        (WebCore::PerformanceEntryList::appendAll):
        * page/PerformanceEntryList.h:
        * page/SecurityOriginHash.h:
        * page/SecurityPolicy.cpp:
        * page/SpeechInputResult.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::fireEventsAndUpdateStyle):
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap):
        * page/animation/CompositeAnimation.h:
        * page/scrolling/ScrollingStateNode.cpp:
        (WebCore::ScrollingStateNode::appendChild):
        * page/scrolling/ScrollingStateNode.h:
        (WebCore::ScrollingStateNode::children):
        * page/scrolling/ScrollingThread.cpp:
        (WebCore::ScrollingThread::dispatchFunctionsFromScrollingThread):
        * page/scrolling/ScrollingThread.h:
        * page/scrolling/ScrollingTree.cpp:
        (WebCore::ScrollingTree::updateTreeFromStateNode):
        * page/scrolling/ScrollingTreeNode.cpp:
        (WebCore::ScrollingTreeNode::appendChild):
        * page/scrolling/ScrollingTreeNode.h:
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::syncChildPositions):
        * platform/CrossThreadCopier.cpp:
        * platform/CrossThreadCopier.h:
        * platform/DragData.h:
        * platform/MainThreadTask.h:
        * platform/PODFreeListArena.h:
        (WebCore::PODFreeListArena::freeObject):
        (WebCore::PODFreeListArena::allocate):
        * platform/PODIntervalTree.h:
        * platform/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::PODRedBlackTree):
        * platform/PlatformSpeechSynthesizer.cpp:
        (WebCore::PlatformSpeechSynthesizer::voiceList):
        * platform/PlatformSpeechSynthesizer.h:
        * platform/RunLoop.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::frameRectsChanged):
        (WebCore::ScrollView::clipRectChanged):
        (WebCore::ScrollView::setParentVisible):
        (WebCore::ScrollView::show):
        (WebCore::ScrollView::hide):
        * platform/ScrollView.h:
        * platform/SharedBuffer.h:
        * platform/Supplementable.h:
        (WebCore::Supplement::provideTo):
        (WebCore::Supplementable::provideSupplement):
        * platform/URL.cpp:
        (WebCore::findHostnamesInMailToURL):
        (WebCore::encodeHostnames):
        * platform/audio/AudioBus.h:
        * platform/audio/AudioDSPKernelProcessor.h:
        * platform/audio/AudioResampler.h:
        * platform/audio/DynamicsCompressor.h:
        * platform/audio/DynamicsCompressorKernel.h:
        * platform/audio/HRTFDatabase.h:
        * platform/audio/HRTFKernel.h:
        * platform/audio/MultiChannelResampler.h:
        * platform/audio/Reverb.h:
        * platform/audio/ReverbConvolver.h:
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::copyBufferAndClear):
        (WebCore::SharedBuffer::copySomeDataFromDataArray):
        * platform/graphics/FloatPolygon.cpp:
        (WebCore::FloatPolygon::FloatPolygon):
        * platform/graphics/FloatPolygon.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontCache::getCachedFontData):
        (WebCore::FontCache::purgeInactiveFontData):
        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::::locatePageSlowCase):
        * platform/graphics/GlyphPageTreeNode.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsLayer.cpp:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/PlatformTextTrackMenu.h:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/WidthCache.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::processNewAndRemovedTextTracks):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        (WebCore::GraphicsLayerCA::fetchCloneLayers):
        * platform/graphics/ca/GraphicsLayerCA.h:
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/LayerPool.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::setValues):
        * platform/graphics/ca/mac/TileController.h:
        * platform/graphics/cg/SubimageCacheWithTimer.h:
        * platform/graphics/filters/CustomFilterParameterList.h:
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/FilterOperations.h:
        (WebCore::FilterOperations::operations):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::Texture):
        (WebCore::Texture::create):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::operations):
        * platform/ios/PasteboardIOS.mm:
        (WebCore::documentFragmentWithRTF):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        * platform/mediastream/MediaStreamDescriptor.h:
        * platform/mediastream/MediaStreamSource.h:
        * platform/mediastream/RTCConfiguration.h:
        * platform/network/BlobRegistryImpl.h:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::parseCacheControlDirectives):
        (WebCore::parseCacheHeader):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::clientCerts):
        (WebCore::ResourceHandle::createCFURLConnection):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForNullKey):
        (WebCore::::createValueForKey):
        (WebCore::cfLocaleCache):
        * plugins/PluginMainThreadScheduler.h:
        * rendering/HitTestResult.h:
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContinuationOutlines):
        (WebCore::RenderBlock::removeFromTrackedRendererMaps):
        * rendering/RenderBlock.h:
        * rendering/RenderButton.h:
        * rendering/RenderCounter.cpp:
        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::GridIterator::GridIterator):
        * rendering/RenderGrid.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateDescendantsAreContiguousInStackingOrder):
        (WebCore::RenderLayer::rebuildZOrderLists):
        (WebCore::RenderLayer::collectLayers):
        * rendering/RenderLayer.h:
        * rendering/RenderNamedFlowThread.cpp:
        (WebCore::RenderNamedFlowThread::getRanges):
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::getRanges):
        * rendering/RenderRegion.h:
        * rendering/RenderView.cpp:
        (WebCore::RenderView::selectionBounds):
        (WebCore::RenderView::setSelection):
        * rendering/RootInlineBox.h:
        * rendering/shapes/PolygonShape.cpp:
        (WebCore::computeShapePaddingBounds):
        (WebCore::computeShapeMarginBounds):
        * rendering/shapes/PolygonShape.h:
        (WebCore::PolygonShape::PolygonShape):
        * rendering/shapes/Shape.cpp:
        (WebCore::createPolygonShape):
        (WebCore::Shape::createShape):
        * rendering/shapes/ShapeInfo.h:
        * rendering/shapes/ShapeInterval.h:
        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::create):
        (WebCore::QuotesData::QuotesData):
        * rendering/style/QuotesData.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::requireTransformOrigin):
        (WebCore::RenderStyle::applyTransform):
        * rendering/style/StyleGridData.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        * rendering/svg/RenderSVGResourcePattern.h:
        * rendering/svg/SVGResourcesCache.h:
        * storage/StorageEventDispatcher.cpp:
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
        * storage/StorageEventDispatcher.h:
        * storage/StorageNamespaceImpl.h:
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::origins):
        * storage/StorageTracker.h:
        * svg/SVGAnimatedPath.cpp:
        (WebCore::SVGAnimatedPathAnimator::startAnimValAnimation):
        * svg/SVGAnimatedTypeAnimator.cpp:
        (WebCore::SVGElementAnimatedProperties::SVGElementAnimatedProperties):
        (WebCore::SVGAnimatedTypeAnimator::findAnimatedPropertiesForAttributeName):
        * svg/SVGAnimatedTypeAnimator.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::startAnimations):
        (WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements):
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::isElementPendingResources):
        (WebCore::SVGDocumentExtensions::removeElementFromPendingResources):
        (WebCore::SVGDocumentExtensions::setOfElementsReferencingTarget):
        (WebCore::SVGDocumentExtensions::addElementReferencingTarget):
        (WebCore::SVGDocumentExtensions::rebuildAllElementReferencesForTarget):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGFontElement.h:
        * svg/SVGGlyphMap.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientTypeAnimated):
        * svg/SVGMarkerElement.h:
        * svg/SVGPathSegList.h:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/SVGImageCache.h:
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::addBuiltinEffects):
        * svg/properties/SVGAnimatedEnumerationPropertyTearOff.h:
        (WebCore::SVGAnimatedEnumerationPropertyTearOff::create):
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::create):
        * svg/properties/SVGAnimatedPropertyTearOff.h:
        (WebCore::SVGAnimatedPropertyTearOff::create):
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h:
        (WebCore::SVGAnimatedStaticPropertyTearOff::create):
        * svg/properties/SVGAttributeToPropertyMap.cpp:
        (WebCore::SVGAttributeToPropertyMap::animatedPropertiesForAttribute):
        * svg/properties/SVGAttributeToPropertyMap.h:
        * svg/properties/SVGStaticListPropertyTearOff.h:
        (WebCore::SVGStaticListPropertyTearOff::create):
        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::create):
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
        (WebCore::SVGTransformListPropertyTearOff::consolidate):
        * workers/DefaultSharedWorkerRepository.h:
        * workers/WorkerMessagingProxy.h:
        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchDeferredEvents):
        * xml/XMLHttpRequestProgressEventThrottle.h:
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::sort):
        (WebCore::XPath::NodeSet::traversalSort):
        * xml/XSLStyleSheet.h:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-10-18  Thiago de Barros Lacerda  <thiago.lacerda@openbossa.org>

        Cleaning warning messages from StyleResolveTree
        https://bugs.webkit.org/show_bug.cgi?id=123030

        Reviewed by Andreas Kling.

        No new tests needed.

        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):
        (WebCore::Style::createRendererIfNeeded):

2013-10-18  Brady Eidson  <beidson@apple.com>

        Get rid of IDBFactoryBackendLevelDB and IDBTransactionBackendLevelDB in IDBDatabaseBackendLevelDB.
        https://bugs.webkit.org/show_bug.cgi?id=123039

        Reviewed by Anders Carlsson.

        Add a few concepts to the interfaces to make this work:
        * Modules/indexeddb/IDBFactoryBackendInterface.h:
        * Modules/indexeddb/IDBTransactionBackendInterface.h:
        (WebCore::IDBTransactionBackendInterface::id):
        (WebCore::IDBTransactionBackendInterface::IDBTransactionBackendInterface):

        Adapt to using Interface ptr’s instead of LevelDB ptr’s:
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp:
        (WebCore::IDBDatabaseBackendLevelDB::create):
        (WebCore::IDBDatabaseBackendLevelDB::IDBDatabaseBackendLevelDB):
        (WebCore::IDBDatabaseBackendLevelDB::createObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::deleteObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::createIndex):
        (WebCore::IDBDatabaseBackendLevelDB::deleteIndex):
        (WebCore::IDBDatabaseBackendLevelDB::get):
        (WebCore::IDBDatabaseBackendLevelDB::put):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexKeys):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        (WebCore::IDBDatabaseBackendLevelDB::openCursor):
        (WebCore::IDBDatabaseBackendLevelDB::count):
        (WebCore::IDBDatabaseBackendLevelDB::deleteRange):
        (WebCore::IDBDatabaseBackendLevelDB::clear):
        (WebCore::IDBDatabaseBackendLevelDB::transactionStarted):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinished):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinishedAndAbortFired):
        (WebCore::IDBDatabaseBackendLevelDB::transactionFinishedAndCompleteFired):
        (WebCore::IDBDatabaseBackendLevelDB::runIntVersionChangeTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp:
        (WebCore::IDBObjectStoreBackendLevelDB::makeIndexWriters):
        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp:
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::commit):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

2013-10-18  Dean Jackson  <dino@apple.com>

        Unable to upload <img src="foo.svg"> as WebGL texture
        https://bugs.webkit.org/show_bug.cgi?id=123035

        Reviewed by Tim Horton.

        If the HTMLImageElement passed to texture2D is an SVG
        image, paint it first into a bitmap buffer and upload that.
        Note that the SVG image still needs to have an intrinsic
        or explicit size - see how the test case must set width and
        height.

        I also renamed the cache of ImageBuffers since it is
        no longer only being used for video frames.

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-svg-image.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Rename m_videoCache to m_generatedImageCache.
        (WebCore::WebGLRenderingContext::drawImageIntoBuffer): New method that creates an ImageBuffer
        of the appropriate size and renders into that.
        (WebCore::WebGLRenderingContext::texImage2D): If we see an SVG image, render it first.
        (WebCore::WebGLRenderingContext::videoFrameToImage): Renamed m_generatedImageCache.
        (WebCore::WebGLRenderingContext::texSubImage2D): If we see an SVG image, render it first.
        * html/canvas/WebGLRenderingContext.h: Renaming.

2013-10-18  Brady Eidson  <beidson@apple.com>

        Move IDBTransactionBackend operations to the IDBTransactionBackend itself..
        https://bugs.webkit.org/show_bug.cgi?id=123028

        Reviewed by Alexey Proskuryakov.

        This gets rid of a big blob of LevelDB specific code from IDBDatabaseBackendLevelDB.cpp,
        bringing us much closer to having it be cross platform.

        * CMakeLists.txt:
        * GNUmakefile.list.am:

        * Modules/indexeddb/IDBTransactionBackendInterface.h: Added.
        (WebCore::IDBTransactionBackendInterface::~IDBTransactionBackendInterface):

        * Modules/indexeddb/leveldb/IDBCursorBackendLevelDB.cpp:
        (WebCore::IDBCursorBackendLevelDB::CursorAdvanceOperation::perform): Update for new method signature.
        (WebCore::IDBCursorBackendLevelDB::CursorIterationOperation::perform): Ditto.
        (WebCore::IDBCursorBackendLevelDB::CursorPrefetchIterationOperation::perform): Ditto.

        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.cpp: Move all operations into
          IDBTransactionBackendLevelDBOperations, then start scheduling them using the new
          IDBTransactionBackendInterface scheduling methods.
        (WebCore::IDBDatabaseBackendLevelDB::createObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::deleteObjectStore):
        (WebCore::IDBDatabaseBackendLevelDB::createIndex):
        (WebCore::IDBDatabaseBackendLevelDB::deleteIndex):
        (WebCore::IDBDatabaseBackendLevelDB::get):
        (WebCore::IDBDatabaseBackendLevelDB::put):
        (WebCore::IDBDatabaseBackendLevelDB::setIndexesReady):
        (WebCore::IDBDatabaseBackendLevelDB::openCursor):
        (WebCore::IDBDatabaseBackendLevelDB::count):
        (WebCore::IDBDatabaseBackendLevelDB::deleteRange):
        (WebCore::IDBDatabaseBackendLevelDB::clear):
        (WebCore::IDBDatabaseBackendLevelDB::createTransaction):
        (WebCore::IDBDatabaseBackendLevelDB::runIntVersionChangeTransaction):
        * Modules/indexeddb/leveldb/IDBDatabaseBackendLevelDB.h: Move definitions of PendingOpenCall and
          PendingDeleteCall to the header.
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::create):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::callbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::databaseCallbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::version):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::transactionId):
        (WebCore::IDBDatabaseBackendLevelDB::PendingOpenCall::PendingOpenCall):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::create):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::callbacks):
        (WebCore::IDBDatabaseBackendLevelDB::PendingDeleteCall::PendingDeleteCall):

        * Modules/indexeddb/leveldb/IDBObjectStoreBackendLevelDB.cpp: Add a newly required include.
        * Modules/indexeddb/leveldb/IDBTransactionCoordinatorLevelDB.cpp: Ditto.

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.cpp: Implement the new interface to
          handle scheduling of operations in a cross platform manner, then rely on the new
          IDBTransactionBackendLevelDBOperations classes for the actual operations.
        (WebCore::IDBTransactionBackendLevelDB::create):
        (WebCore::IDBTransactionBackendLevelDB::IDBTransactionBackendLevelDB):
        (WebCore::IDBTransactionBackendLevelDB::abort):
        (WebCore::IDBTransactionBackendLevelDB::taskTimerFired):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCreateObjectStoreOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteObjectStoreOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleVersionChangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCreateIndexOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteIndexOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleGetOperation):
        (WebCore::IDBTransactionBackendLevelDB::schedulePutOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleSetIndexesReadyOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleOpenCursorOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleCountOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleDeleteRangeOperation):
        (WebCore::IDBTransactionBackendLevelDB::scheduleClearOperation):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDB.h:

        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.cpp: Added.
          Move all the LevelDB transaction operations from IDBDatabaseBackendLevelDB to here.
        (WebCore::CreateObjectStoreOperation::perform):
        (WebCore::CreateIndexOperation::perform):
        (WebCore::CreateIndexAbortOperation::perform):
        (WebCore::DeleteIndexOperation::perform):
        (WebCore::DeleteIndexAbortOperation::perform):
        (WebCore::GetOperation::perform):
        (WebCore::PutOperation::perform):
        (WebCore::SetIndexesReadyOperation::perform):
        (WebCore::OpenCursorOperation::perform):
        (WebCore::CountOperation::perform):
        (WebCore::DeleteRangeOperation::perform):
        (WebCore::ClearOperation::perform):
        (WebCore::DeleteObjectStoreOperation::perform):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::perform):
        (WebCore::CreateObjectStoreAbortOperation::perform):
        (WebCore::DeleteObjectStoreAbortOperation::perform):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::perform):
        * Modules/indexeddb/leveldb/IDBTransactionBackendLevelDBOperations.h: Added.
        (WebCore::CreateObjectStoreOperation::create):
        (WebCore::CreateObjectStoreOperation::CreateObjectStoreOperation):
        (WebCore::DeleteObjectStoreOperation::create):
        (WebCore::DeleteObjectStoreOperation::DeleteObjectStoreOperation):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::create):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeOperation::VersionChangeOperation):
        (WebCore::CreateObjectStoreAbortOperation::create):
        (WebCore::CreateObjectStoreAbortOperation::CreateObjectStoreAbortOperation):
        (WebCore::DeleteObjectStoreAbortOperation::create):
        (WebCore::DeleteObjectStoreAbortOperation::DeleteObjectStoreAbortOperation):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::create):
        (WebCore::IDBDatabaseBackendLevelDB::VersionChangeAbortOperation::VersionChangeAbortOperation):
        (WebCore::CreateIndexOperation::create):
        (WebCore::CreateIndexOperation::CreateIndexOperation):
        (WebCore::CreateIndexAbortOperation::create):
        (WebCore::CreateIndexAbortOperation::CreateIndexAbortOperation):
        (WebCore::DeleteIndexOperation::create):
        (WebCore::DeleteIndexOperation::DeleteIndexOperation):
        (WebCore::DeleteIndexAbortOperation::create):
        (WebCore::DeleteIndexAbortOperation::DeleteIndexAbortOperation):
        (WebCore::GetOperation::create):
        (WebCore::GetOperation::GetOperation):
        (WebCore::PutOperation::create):
        (WebCore::PutOperation::PutOperation):
        (WebCore::SetIndexesReadyOperation::create):
        (WebCore::SetIndexesReadyOperation::SetIndexesReadyOperation):
        (WebCore::OpenCursorOperation::create):
        (WebCore::OpenCursorOperation::OpenCursorOperation):
        (WebCore::CountOperation::create):
        (WebCore::CountOperation::CountOperation):
        (WebCore::DeleteRangeOperation::create):
        (WebCore::DeleteRangeOperation::DeleteRangeOperation):
        (WebCore::ClearOperation::create):
        (WebCore::ClearOperation::ClearOperation):

2013-10-18  Beth Dakin  <bdakin@apple.com>

        Rubber-banding is often not smooth on infinitely scrolling websites
        https://bugs.webkit.org/show_bug.cgi?id=122985

        Reviewed by Simon Fraser.

        totalContentsSize is an important part of the calculation for 
        maximumScrollPosition(). This function is called repeatedly throughout the curve 
        of a rubber-band to determine the stretch amount. To keep the rubber-band 
        animation smooth, it should be allowed to finish its animation using the old 
        totalContentsSize. This patch does that by adding a new variable, 
        m_totalContentsSizeForRubberBand. This value should almost always be equivalent to 
        m_totalContentsSize. It will only vary if m_totalContentsSize has changed in the 
        middle of a rubber-band, and in that case, it will stay equivalent to the old 
        totalContentSize value until the rubber band animation finishes.

        * page/scrolling/ScrollingTreeScrollingNode.cpp:
        (WebCore::ScrollingTreeScrollingNode::updateBeforeChildren):
        * page/scrolling/ScrollingTreeScrollingNode.h:
        (WebCore::ScrollingTreeScrollingNode::totalContentsSizeForRubberBand):
        (WebCore::ScrollingTreeScrollingNode::setTotalContentsSizeForRubberBand):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::stopSnapRubberbandTimer):
        (WebCore::ScrollingTreeScrollingNodeMac::maximumScrollPosition):

2013-10-18  ChangSeok Oh  <changseok.oh@collabora.com>

        Unreviewed build fix for --no-svg option.
        m_svgStyle of RenderStyle is guarded with the ENABLE_SVG flag.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::RenderStyle):

2013-10-17  Brady Eidson  <beidson@apple.com>

        Cleanup the Modules group in the WebCore.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=123009

        Rubberstamped by Antti Koivisto.

        * WebCore.xcodeproj/project.pbxproj:

2013-10-18  Denis Nomiyama  <d.nomiyama@samsung.com>

        [ATK] Fix invalid signal to set objects to an unknown state "layout-complete"
        https://bugs.webkit.org/show_bug.cgi?id=122970

        Reviewed by Mario Sanchez Prada.

        Removed an invalid signal to set objects to an unknown state
        layout-complete. This signal was originally generated to notify DRT
        and WKTR in case of page load complete.
        It was replaced by ATK:AtkDocument:load-complete, which is already sent
        by AXObjectCache::frameLoadingEventPlatformNotification().

        There is no new test since the changes are covered by existing ones
        (e.g. accessibility/loading-iframe-sends-notification.html).

        * accessibility/atk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Removed an invalid
        signal to set objects to an unknown state layout-complete.

2013-10-18  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Generate API documentation for GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=121538

        Reviewed by Gustavo Noronha Silva.

        * bindings/gobject/GNUmakefile.am: Add a explicit rule for all
        .symbols file making them depend on the corresponding header file,
        since the .symbols file is generated by the bindings generator.

2013-10-18  Mario Sanchez Prada  <mario.prada@samsung.com>

        [ATK] Simplify implementation of atk_text_get_text
        https://bugs.webkit.org/show_bug.cgi?id=122644

        Reviewed by Chris Fleizach.

        Simplified code so we only call textUnderElement() directly once
        and only when needed. Also, moved the specific code for ColorWell
        objects up to the beginning of that function, so we don't do any
        additional efforts like computing text ranges in those cases.

        No new tests are needed, just to make sure that the current layout
        and unit tests are still passing, which they are.

        * accessibility/atk/WebKitAccessibleInterfaceText.cpp:
        (textForObject): Fixed a issue that got detected while working on
        this patch, which was causing a '\n' to be artificially appended
        at the end of text controls all the time.
        (webkitAccessibleTextGetText): Simplified function.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAXStringForRange): Removed
        the check that prevents from pass ranges exceeding the limits of
        the element's text, since those will be checked anyway when
        calling String::substring().

2013-10-18  Brendan Long  <b.long@cablelabs.com>

        [GStreamer][GTK] Add GRefPtr::outPtr()
        https://bugs.webkit.org/show_bug.cgi?id=122996

        Reviewed by Philippe Normand.

        No new tests because this is just simplifying existing code.

        * platform/graphics/gstreamer/GRefPtrGStreamer.cpp: Add GRefPtr specialization for GstToc.
        * platform/graphics/gstreamer/GRefPtrGStreamer.h: Same.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Use GRefPtr::outPtr() to simplify code.
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        (WebCore::GStreamerGWorld::removePlatformVideoSink):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Same.
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfText):
        (WebCore::MediaPlayerPrivateGStreamer::newTextSample):
        (WebCore::MediaPlayerPrivateGStreamer::processTableOfContents):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp: Same.
        (WebCore::MediaPlayerPrivateGStreamerBase::currentVideoSinkCaps):
        * platform/network/soup/ResourceHandleSoup.cpp: Same.
        (WebCore::HostTLSCertificateSet::computeCertificateHash):

2013-10-17  Alexey Proskuryakov  <ap@apple.com>

        Don't add an include for return type of a [Custom] function in generated bindings code
        https://bugs.webkit.org/show_bug.cgi?id=122972

        Reviewed by Sam Weinig.

        * bindings/scripts/CodeGeneratorJS.pm: (GenerateImplementation): Don't.

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLSpace always has a MathMLTextElement.
        <https://webkit.org/b/122992>

        The renderer is never anonymous and always has a corresponding
        MathMLTextElement. Overload element() with a tighter return type.

        Also marked the class FINAL and made most methods private.

        Reviewed by Antti Koivisto.

        * rendering/mathml/RenderMathMLSpace.cpp:
        (WebCore::RenderMathMLSpace::RenderMathMLSpace):
        (WebCore::RenderMathMLSpace::updateFromElement):
        * rendering/mathml/RenderMathMLSpace.h:

2013-10-17  Tim Horton  <timothy_horton@apple.com>

        PlatformCALayer constructor should take layer type as an argument
        https://bugs.webkit.org/show_bug.cgi?id=122915

        Reviewed by Anders Carlsson.

        No new tests, just restoring old code.

        Un-do part of the patch for bug 122915; we can't early-return
        in the constructor, there's still more work to do.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):

2013-10-17  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: [CSS Regions] Crash when highlighting a node of a flow with no regions
        https://bugs.webkit.org/show_bug.cgi?id=122993

        Reviewed by Joseph Pecoraro.

        Test: inspector-protocol/dom/highlight-flow-with-no-region.html

        Even if a named flow has no regions the content of the flow will still have renderer objects created.
        Removed the assumption that all renderers inside a RenderFlowThread will always have an enclosing RenderRegion.

        * inspector/InspectorOverlay.cpp:
        (WebCore::buildObjectForRendererFragments):
        (WebCore::InspectorOverlay::buildObjectForHighlightedNode):

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLOperator always has a MathMLElement.
        <https://webkit.org/b/122988>

        Reviewed by Antti Koivisto.

        The renderer is never anonymous and always has a corresponding
        MathMLElement. Overload element() with a tighter return type.

        Also marked the class FINAL and made most methods private.

2013-10-17  Nico Weber  <thakis@chromium.org>

        Fix three bugs in the equals() implementations for css gradients.
        https://bugs.webkit.org/show_bug.cgi?id=122987

        Reviewed by Andreas Kling.

        1. Linear gradients were considered equal if the first gradient has no x and y
           position and the second has no x but does have y.
        2. Same as 1, for radial gradients. (This doesn't happen in practice as
           CSSParser::parseRadialGradient rejects such input, so no test for this case.)
        3. Radial gradients without x and y position weren't considered equal even if
           they were.

        * css/CSSGradientValue.cpp:
        (WebCore::CSSLinearGradientValue::equals):
        (WebCore::CSSRadialGradientValue::equals):

2013-10-17  Antoine Quint  <graouts@apple.com>

        Web Inspector: allow front-end to trigger the system beep sound to signal an error
        https://bugs.webkit.org/show_bug.cgi?id=122955

        Reviewed by Timothy Hatcher.

        New beep() method exposed on InspectorFrontendHost calling into WebCore's systemBeep().

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::beep):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:

2013-10-17  Anders Carlsson  <andersca@apple.com>

        Remove PlatformCAAnimation::supportsValueFunction()
        https://bugs.webkit.org/show_bug.cgi?id=122990

        Reviewed by Tim Horton.

        PlatformCAAnimation::supportsValueFunction always returns true now, so there's no need for it to exist anymore.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        * platform/graphics/ca/PlatformCAAnimation.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:

2013-10-17  Andreas Kling  <akling@apple.com>

        CTTE: RenderMathMLFenced always has a MathMLInlineContainerElement.
        <https://webkit.org/b/122986>

        This renderer is never anonymous and always has a corresponding
        MathMLInlineContainerElement. Overload element() with a tighter
        return type.

        Also marked the class FINAL and made most methods private.

        Reviewed by Anders Carlsson.

2013-10-17  Myles C. Maxfield  <mmaxfield@apple.com>

        Comment AffineTransform::xScale() and yScale() to make their meanings clearer
        https://bugs.webkit.org/show_bug.cgi?id=122981

        Reviewed by Simon Fraser.

        * platform/graphics/transforms/AffineTransform.h:

2013-10-17  Vivek Galatage  <vivek.vg@samsung.com>

        Remove unnecessary check for RenderLayer and rename ensureLayer to createLayer in RenderLayerModelObject.
        https://bugs.webkit.org/show_bug.cgi?id=122928

        Reviewed by Darin Adler.

        No new tests due to code refactoring.

        RenderLayerModelObject::styleDidChange invokes the ensureLayer() only in case of !layer().
        Again checking for layer existence would be deemed redundant in ensureLayer.
        Replacing it with an ASSERT(!m_layer) and also renaming it to createLayer.

        Blink review URL: https://codereview.chromium.org/27246003/

        * rendering/RenderLayerModelObject.cpp:
        (WebCore::RenderLayerModelObject::createLayer):
        (WebCore::RenderLayerModelObject::styleDidChange):
        * rendering/RenderLayerModelObject.h:

2013-10-17  Tim Horton  <timothy_horton@apple.com>

        Remove PlatformCALayerMac workaround for <rdar://problem/7390716>
        https://bugs.webkit.org/show_bug.cgi?id=122983

        Reviewed by Simon Fraser.

        Remove a workaround for a bug fixed in Lion.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::setSublayers):
        (PlatformCALayerMac::removeAllSublayers):
        (PlatformCALayerMac::adoptSublayers):

2013-10-17  Robert Hogan  <robert@webkit.org>

        "border-collapse: collapse;" for table removes part of its border (was: Border disappears when close to some elements)
        https://bugs.webkit.org/show_bug.cgi?id=8914

        Reviewed by David Hyatt.

        The table section's side of a collapsed border won't get painted if there are no cells there to paint it. So instead
        of relying solely on cells to paint the collapsed border paint the appropriate section of the border if there's no
        cell to take care of it.

        Tests: fast/table/paint-section-borders-without-cells-rtl.html
               fast/table/paint-section-borders-without-cells-vertical-lr-rtl.html
               fast/table/paint-section-borders-without-cells-vertical-lr.html
               fast/table/paint-section-borders-without-cells-vertical-rl.html
               fast/table/paint-section-borders-without-cells.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintRowGroupBorder):
        (WebCore::RenderTableSection::offsetLeftForRowGroupBorder):
        (WebCore::RenderTableSection::offsetTopForRowGroupBorder):
        (WebCore::RenderTableSection::verticalRowGroupBorderHeight):
        (WebCore::RenderTableSection::horizontalRowGroupBorderWidth):
        (WebCore::RenderTableSection::paintRowGroupBorderIfRequired):
        (WebCore::physicalBorderForDirection):
        (WebCore::RenderTableSection::paintObject):
        * rendering/RenderTableSection.h:

2013-10-17  Andreas Kling  <akling@apple.com>

        StyleRuleFoo::mutableProperties() should return a reference.
        <https://webkit.org/b/122962>

        The mutableProperties() functions always return objects, so make
        them return MutableStylePropertySet&.

        Also tweaked the StyleRuleCSSStyleDeclaration constructor to take
        references to both the properties and the owner rule since both
        are required.

        Reviewed by Antti Koivisto.

2013-10-17  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Improve the performance of image valued shapes with large shape-margins
        https://bugs.webkit.org/show_bug.cgi?id=122613

        Reviewed by Andreas Kling.

        The cost of computing the shape-margin boundary of an image-valued shape-outside
        is now proportional to (2 * shape-margin + image.height) rather than
        (2 * shape-margin * image.height). The performance improvement comes from skipping
        sequences of rounded-rectangle intervals that will not contribute to the final
        result. Each non-empty row in the original image contributes one rounded-rectangle
        whose corner radius is shape-margin, height is 2 * shape-margin, and width is
        2 * shape-margin plus the width of the limits of the intervals on the row.

        Renamed private method RasterShape::getIntervals() to intervalsAt() to be a little
        more consistent with WebKit naming conventions.

        There are no new tests since is just an internal refactoring.

        * rendering/shapes/RasterShape.cpp:
        (WebCore::MarginIntervalGenerator::set): Changed the x1,x2 parameters to an IntShapeInterval.
        (WebCore::RasterShapeIntervals::contains): Refactor for the getIntervals() => intervalsAt() rename.
        (WebCore::RasterShapeIntervals::getIntervalX1Values): Ditto.
        (WebCore::RasterShapeIntervals::getIncludedIntervals): Ditto.
        (WebCore::RasterShapeIntervals::getExcludedIntervals): Ditto.
        (WebCore::RasterShapeIntervals::computeShapeMarginIntervals): Performance tuning.
        * rendering/shapes/RasterShape.h:
        (WebCore::RasterShapeIntervals::intervalsAt): Renamed getIntervals().
        (WebCore::RasterShapeIntervals::limitIntervalAt): Return the min/max limits of the intervals at Y.
        * rendering/shapes/ShapeInterval.h:
        (WebCore::ShapeInterval::isEmpty): Added.

2013-10-15  Philippe Normand  <pnormand@igalia.com>

        [GTK] Add URLMediaStream in the build
        https://bugs.webkit.org/show_bug.cgi?id=122833

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Add mediastream/gstreamer in include directories list.
        * GNUmakefile.list.am: Add DOMURLMediaStream files in the build.

2013-10-17  Andreas Kling  <akling@apple.com>

        Use PassRef for constructing StylePropertySets.
        <https://webkit.org/b/122948>

        Make functions that construct StylePropertySets return PassRef
        instead of PassRefPtr. Since they never return null, this gets rid
        of the extra branch in ~PassRefPtr everywhere.

        Also StyleRule* classes now hold a Ref<StylePropertySet>, codifying
        the fact that they always have a property set.

        Reviewed by Antti Koivisto.

2013-10-17  Andreas Kling  <akling@apple.com>

        DataRef<T> should use Ref<T> internally.
        <https://webkit.org/b/122953>

        DataRef is used to hold RenderStyle substructures, and due to the
        way style inheritance is implemented, DataRef will always point to
        a live object.

        Codify this by making DataRef::m_data a Ref, and making all methods
        that create substructure objects return PassRef.

        Reviewed by Antti Koivisto.

2013-10-17  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSS Regions] Anonymous nested regions
        https://bugs.webkit.org/show_bug.cgi?id=119135

        Reviewed by David Hyatt.

        Tests: fast/regions/table-caption-as-region.html
               fast/regions/table-cell-as-region.html

        This patch allows any non-replaced block to behave like a region. When an element is styled with the
        -webkit-flow-from property, instead of making the renderer a RenderRegion, we let the original
        renderer be created the same way and we add a region as an anonymous child for the renderer.
        The anonymous block child, modeled by the new RenderNamedFlowFragment class, will be responsible
        for the fragmentation of the named flow thread content.

        A RenderBlockFlow object will keep a reference to a RenderNamedFlowFragment(RenderRegion) inside its
        rare data structures.

        Contains code contributed by Catalin Badea.
 
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp: Changed to take the anonymous region into account.
        (WebCore::Element::renderRegion):
        (WebCore::Element::webkitGetRegionFlowRanges):
        * dom/WebKitNamedFlow.cpp: Ditto.
        (WebCore::WebKitNamedFlow::firstEmptyRegionIndex):
        (WebCore::WebKitNamedFlow::getRegionsByContent):
        (WebCore::WebKitNamedFlow::getRegions):
        * inspector/InspectorOverlay.cpp: Take into account the new model for regions, with an anonymous region inside a block.
        (WebCore::buildObjectForRegionHighlight):
        (WebCore::buildObjectForElementInfo):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computeShapeSize): For a render named flow fragment, there is no need to recompute the shape inside
        we can take it from the parent.
        (WebCore::RenderBlock::renderName): Make the block that contains a render named flow fragment (region) report RenderRegion.
        A future patch that will change this will need to rebase a lot of tests.
        * rendering/RenderBlockFlow.cpp:
        (WebCore::RenderBlockFlow::insertedIntoTree): Create the anonymous region if needed (change of -webkit-flow-from determines Node reattach).
        (WebCore::RenderBlockFlow::willBeDestroyed): Clean-up the anonymous region if necessary.
        (WebCore::RenderBlockFlow::clearFloats): Small style change to make sure that check-webkit-style reports 0 failures on RenderBlockFlow.cpp.
        (WebCore::RenderBlockFlow::layoutBlock):
        (WebCore::RenderBlockFlow::styleDidChange): Update the style of the anonymous region too.
        (WebCore::RenderBlockFlow::createRenderNamedFlowFragmentIfNeeded): Helper function to create the anonymous region
        and to add it as a child to the block.
        (WebCore::RenderBlockFlow::canHaveChildren):
        (WebCore::RenderBlockFlow::canHaveGeneratedChildren):
        (WebCore::RenderBlockFlow::namedFlowFragmentNeedsUpdate): Force a layout of the anonymous region if the
        parent block has percentage height (similar to RenderBlock::updateBlockChildDirtyBitsBeforeLayout)
        (WebCore::RenderBlockFlow::updateLogicalHeight): Update the logical height of anonymous region when the height of parent is updated.
        (WebCore::RenderBlockFlow::setRenderNamedFlowFragment):
        * rendering/RenderBlockFlow.h:
        (WebCore::RenderBlockFlow::RenderBlockFlowRareData::RenderBlockFlowRareData):
        (WebCore::RenderBlockFlow::renderNamedFlowFragment):
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::createFor): Remove the direct creation of RenderRegion objects since they will be
        created as anonymous children of block flow objects.
        * rendering/RenderElement.h:
        (WebCore::RenderElement::generatingElement): Account for anonymous region if necessary.
        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::adjustedPositionRelativeToOffsetParent): Take anonymous region into account
        and use the anonymous region parent offset/border.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly): Check for style instead of isRenderRegion since
        the parent of the anonymous region will get the layer.
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::insertedIntoTree): Call RenderBlockFlow method instead.
        * rendering/RenderNamedFlowFragment.cpp: Added. Model the behaviour of the anonymous region.
        Has RenderRegion as a base class.
        (WebCore::RenderNamedFlowFragment::RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::~RenderNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::setStyleForNamedFlowFragment):
        (WebCore::RenderNamedFlowFragment::styleDidChange):
        (WebCore::RenderNamedFlowFragment::shouldHaveAutoLogicalHeight):
        (WebCore::RenderNamedFlowFragment::maxPageLogicalHeight):
        * rendering/RenderNamedFlowFragment.h: Added.
        (WebCore::RenderNamedFlowFragment::isPseudoElementRegion):
        (WebCore::RenderNamedFlowFragment::renderName):
        (WebCore::toRenderNamedFlowFragment):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isRenderNamedFlowFragmentContainer):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isRenderNamedFlowFragment):
        * rendering/RenderRegion.h:
        * rendering/RenderTableCaption.cpp: Call RenderBlockFlow method instead.
        (WebCore::RenderTableCaption::insertedIntoTree):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        (WebCore::writeRenderRegionList):
        * rendering/shapes/ShapeInfo.h:
        (WebCore::ShapeInfo::shapeSize):
        * style/StyleResolveTree.cpp:
        (WebCore::Style::elementInsideRegionNeedsRenderer):

2013-10-17  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Properly expose tables in accessibility
        https://bugs.webkit.org/show_bug.cgi?id=122894

        Reviewed by Chris Fleizach.

        All tables should exposed as tables.

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::computeAccessibilityIsIgnored):
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::computeAccessibilityIsIgnored):

2013-10-17  Brendan Long  <b.long@cablelabs.com>

        [GStreamer] Too many arguments for format in WebKitWebAudioSourceGStreamer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=122932

        Reviewed by Philippe Normand.

        No new tests because this just fixes a build warning.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop): Add another %s for the second part of the pad name.

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Attempt to fix the Windows build after http://trac.webkit.org/changeset/157547.

        The relevant conversion doesn't happen implicitly.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Attempt to fix the Windows build after http://trac.webkit.org/changeset/157547.

        Apparently some Windows code uses setFrame and I missed it.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        Remote Layer Tree: Complete support for simple layer properties
        https://bugs.webkit.org/show_bug.cgi?id=122933

        Reviewed by Anders Carlsson.

        No new tests, not yet testable.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setName):
        Don't dump the CALayer pointer if we own a PlatformCALayerRemote.

        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        Fix the visible tile wash (my fault!), and make it use setPosition and
        setBounds instead of setFrame; while more convenient, it is the only
        caller of setFrame, so we'll remove it.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::isRemote): Added.

        * platform/graphics/ca/mac/PlatformCALayerMac.h:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (nullActionsDictionary):
        (toCAFilterType):
        (PlatformCALayerMac::synchronouslyDisplayTilesInRect):
        (PlatformCALayerMac::playerLayer):
        Remove setFrame, fix some pointer sides.

        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        * platform/graphics/ca/win/PlatformCALayerWin.h:
        Remove setFrame.

2013-10-16  Andreas Kling  <akling@apple.com>

        Take RenderObjects out of the arena.
        <https://webkit.org/b/122895>

        Reviewed by Antti Koivisto.

        Stop arena-allocating renderers so we can move forward on improving
        render tree memory management. This will also allow rendering code
        to take advantage of malloc optimizations.

        Line boxes and BiDi runs remain in the arena for now.

2013-10-16  Roger Fong  <roger_fong@apple.com>

        [Windows] Speculative fix for test, media/video-canvas-drawing-output.html.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::createImageForTimeInRect):

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        PlatformCALayer constructor should take layer type as an argument
        https://bugs.webkit.org/show_bug.cgi?id=122915

        Reviewed by Simon Fraser.

        No new tests, just a minor refactoring.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::PlatformCALayer):
        Add a LayerType argument.

        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayerMac::PlatformCALayerMac):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayerWin::PlatformCALayerWin):
        Use the new LayerType argument, and early-return in the case where we
        are wrapping a custom PlatformLayer.
        Drive-by un-indent the switch in the Mac version.

2013-10-15  Brady Eidson  <beidson@apple.com>

        Flesh out the DatabaseProcess (and launch it!)
        https://bugs.webkit.org/show_bug.cgi?id=122884

        Reviewed by Tim Horton.

        * English.lproj/Localizable.strings: Add a localizable string.
        * WebCore.xcodeproj/project.pbxproj: Export some more headers.

2013-10-16  Tim Horton  <timothy_horton@apple.com>

        RemoteLayerTree: Add support for more layer properties and transform layers
        https://bugs.webkit.org/show_bug.cgi?id=122906

        Reviewed by Anders Carlsson.

        No new tests, this code is not yet testable.

        * WebCore.exp.in:
        Export some TextStream and TransformationMatrix stuff.

2013-10-16  KyungTae Kim  <ktf.kim@samsung.com>

        During editing, merge inline style with overriding other author styles
        https://bugs.webkit.org/show_bug.cgi?id=122874

        Reviewed by Ryosuke Niwa.

        Inline styles need to override other author styles even on DoNotOverrideValues mode.
        So, merge and override inline styles to other author styles before merging them to m_mutableStyle.

        Test: editing/deleting/merge-div-with-inline-style.html

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::mergeInlineAndImplicitStyleOfElement):

2013-10-16  peavo@outlook.com  <peavo@outlook.com>

        Emphasis marks has wrong color.
        https://bugs.webkit.org/show_bug.cgi?id=122829

        Reviewed by Antti Koivisto.

        Tests: fast/text/text-emphasis.html.
               fast/text/text-emphasis-expected.html.

        Emphasis color should be set as fill color, not stroke color.

        * rendering/TextPaintStyle.cpp:
        (WebCore::updateGraphicsContext):
        * rendering/TextPaintStyle.h:

2013-10-16  Antti Koivisto  <antti@apple.com>

        Move code for finding rendered character offset to RenderTextLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=122892

        Reviewed by Andreas Kling.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::countRenderedCharacterOffsets):
        (WebCore::RenderText::containsRenderedCharacterOffset):
        
            Renamed for consistency.

        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::countCharacterOffsets):
        
            This used to be Position::renderedPosition.

2013-10-16  Andreas Kling  <akling@apple.com>

        RenderElement::removeChild() should take child as a reference.
        <https://webkit.org/b/122888>

        We can't remove a child without a child to remove.

        Reviewed by Antti Koivisto.

2013-10-16  Antti Koivisto  <antti@apple.com>

        Move test for contained caret offset to RenderTextLineBoxes
        https://bugs.webkit.org/show_bug.cgi?id=122887

        Reviewed by Andreas Kling.

        * dom/Position.cpp:
        (WebCore::Position::renderedOffset):
        (WebCore::Position::isCandidate):
        
            Remove isRenderedText, call RenderText::containsCaretOffset instead.

        (WebCore::Position::isRenderedCharacter):
        (WebCore::Position::rendersInDifferentPosition):
        * dom/Position.h:
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):
        * rendering/InlineTextBox.cpp:
        * rendering/InlineTextBox.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::containsCharacterOffset):
        (WebCore::RenderText::containsCaretOffset):
        * rendering/RenderText.h:
        * rendering/RenderTextLineBoxes.cpp:
        (WebCore::RenderTextLineBoxes::containsOffset):
        
            Combined implementations of Position::isRenderedCharacter and Position::isRenderedText.

        * rendering/RenderTextLineBoxes.h:
        
            Remove containsCaretOffset(), functionality is now in RenderTextLineBoxes::containsOffset.

2013-10-16  Andreas Kling  <akling@apple.com>

        RenderElement::isChildAllowed() should take const references.
        <https://webkit.org/b/122870>

        Reviewed by Anders Carlsson.

        The isChildAllowed() functions expect non-null values to be passed,
        so enforce this at compile-time.

        Reordered some checks to do bit tests before virtual calls.

2013-10-15  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] video info unset if upstream doesn't query allocation
        https://bugs.webkit.org/show_bug.cgi?id=122834

        Reviewed by Gustavo Noronha Silva.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        (webkitVideoSinkRender): If the sink didn't process any allocation
        query then use the configured source pad caps and don't rely on
        invalid video info.

2013-10-16  Philippe Normand  <pnormand@igalia.com>

        [GStreamer] move Logging.h include to GStreamerUtilities.h
        https://bugs.webkit.org/show_bug.cgi?id=122886

        Reviewed by Gustavo Noronha Silva.

        Include Logging.h from GStreamerUtilities.h so the modules using
        the LOG_MEDIA macros don't need to bother, especially for Debug builds.

        * platform/graphics/gstreamer/GStreamerUtilities.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:

2013-10-16  Mark Rowe  <mrowe@apple.com>

        Fix the build after r157478.

        Rubber-stamped by Tim Horton.

        Due to the way WebCore.exp.in is used, it can't be used to export a differing set of symbols
        for different architectures. We often work around this by tweaking code slightly to avoid
        needing to export different symbols. However, in this case the symbol name itself encodes an
        architecture-specific detail and there's no clear way to avoid the requirement to export it.

        To deal with this case we turn to ld's support for wildcards in the symbol export list.

        * WebCore.exp.in: Use wildcards in place of the number that represents by how much "this"
        should be adjusted when calling through the vtable thunk. Also sort the remainder of the file.
        * make-export-file-generator: Don't attempt to verify symbol names that contain wildcard characters.

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Two more exports for 32-bit build fix.
        The duality of CGFloat means that we use a different
        version of getRGBA (and the cast operator)
        on 32-bit systems.

        * WebCore.exp.in:

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Another shot at a build fix; apparently these
        do need exporting for some reason, but are different
        on 32-bit.

        * WebCore.exp.in:

2013-10-15  Alexey Proskuryakov  <ap@apple.com>

        GenerateIsReachable=ImplContext is confusing
        https://bugs.webkit.org/show_bug.cgi?id=122864

        Reviewed by Geoffrey Garen.

        Renamed to ImplWebGLRenderingContext.

        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateImplementation):
        * bindings/scripts/IDLAttributes.txt:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/EXTTextureFilterAnisotropic.idl:
        * html/canvas/OESElementIndexUint.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESTextureHalfFloat.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLCompressedTextureATC.idl:
        * html/canvas/WebGLCompressedTexturePVRTC.idl:
        * html/canvas/WebGLCompressedTextureS3TC.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLDepthTexture.idl:
        * html/canvas/WebGLLoseContext.idl:

        * WebCore.xcodeproj/project.pbxproj: While at it, added OESElementIndexUint.idl
        to Xcode project.

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Unreviewed build fix; I don't know how to export.
        This may not help.

        * WebCore.exp.in:

2013-10-15  Dean Jackson  <dino@apple.com>

        Add ENABLE_WEB_ANIMATIONS flag
        https://bugs.webkit.org/show_bug.cgi?id=122871

        Reviewed by Tim Horton.

        Eventually might be http://dev.w3.org/fxtf/web-animations/
        but this is just engine-internal work at the moment.

        * Configurations/FeatureDefines.xcconfig:

2013-10-15  Tim Horton  <timothy_horton@apple.com>

        Add a PlatformCALayer subclass that proxies its property changes across the process boundary
        https://bugs.webkit.org/show_bug.cgi?id=122773

        Reviewed by Anders Carlsson.

        No new tests, the new drawing area is not yet testable.

        * WebCore.exp.in:
        Export lots of GraphicsLayerCA stuff so we can inherit from it in WebKit2.

        * WebCore.xcodeproj/project.pbxproj:
        Make PlatformCAFilters.h a private header.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::initialize):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::initialize):
        * platform/graphics/ca/GraphicsLayerCA.h:
        Defer creation of the main PlatformCALayer until just after the constructor is finished
        so that GraphicsLayerCA subclasses can successfully override createPlatformCALayer.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::platformLayer):
        Make platformLayer virtual so that subclasses which don't have PlatformLayers can override.

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION: Crash in XMLDocumentParser::startElementNs
        https://bugs.webkit.org/show_bug.cgi?id=122817

        Reviewed by Darin Adler.

        Exit early in startElementNs when listeners and handlers of synchronous events such as load event
        removes the inserted node inside parserAppendChild.

        Test: fast/parser/xhtml-synchronous-detach-crash.html

        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):

2013-10-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove old frontend localizedStrings.js
        https://bugs.webkit.org/show_bug.cgi?id=122846

        Reviewed by Timothy Hatcher.

        * Configurations/WebCore.xcconfig:
        * English.lproj/localizedStrings.js: Removed.
        * WebCore.xcodeproj/project.pbxproj:
        Remove the file and references to it. We no longer need to exclude
        localizedString.js from some builds.

2013-10-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove Windows old front-end related code
        https://bugs.webkit.org/show_bug.cgi?id=122845

        Reviewed by Brent Fulgham.

        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd:

2013-10-15  Morten Stenshorne  <mstensho@opera.com>

        Add support for the column-fill property
        https://bugs.webkit.org/show_bug.cgi?id=117693

        Reviewed by David Hyatt.

        This is only supported in the (new) region based multicol implementation.

        With column-fill support, a lot of multicol tests needed an update.
        The old implementation behaved as if column-fill were 'auto', but the
        initial value is 'balance', so now we need to be explicit about that.
        For auto-height tests it doesn't really matter - such multicols are always
        balanced anyway.

        Tests: fast/multicol/newmulticol/fixed-height-fill-auto.html
               fast/multicol/newmulticol/fixed-height-fill-balance.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::ComputedStyleExtractor::propertyValue):
        * css/CSSParser.cpp:
        (WebCore::isValidKeywordPropertyAndValue):
        (WebCore::isKeywordPropertyID):
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColumnFill):
        * css/CSSPropertyNames.in:
        * css/CSSValueKeywords.in:
        * css/DeprecatedStyleBuilder.cpp:
        (WebCore::DeprecatedStyleBuilder::DeprecatedStyleBuilder):
        * rendering/RenderMultiColumnBlock.h:
        * rendering/style/RenderStyle.h:
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleMultiColData.cpp:
        (WebCore::StyleMultiColData::StyleMultiColData):
        (WebCore::StyleMultiColData::operator==):
        * rendering/style/StyleMultiColData.h:

2013-10-15  Andreas Kling  <akling@apple.com>

        Skip unnecessary null check in RenderText::textLength().
        <https://webkit.org/b/122841>

        Reviewed by Antti Koivisto.

        RenderText will never have a null String in m_text, so textLength()
        can grab at the StringImpl directly, avoiding a null check.

2013-10-15  Andreas Kling  <akling@apple.com>

        FontGenericFamilies should not be ref-counted.
        <https://webkit.org/b/122835>

        Reviewed by Anders Carlsson.

        FontGenericFamilies is singly-owned by Settings.

2013-10-15  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Shapes] Move RenderBlock::layoutShapeInsideInfo into RenderBlock.cpp
        http://bugs.webkit.org/show_bug.cgi?id=122843

        Reviewed by Oliver Hunt.

        Historically, layoutShapeInsideInfo was a static function in RenderBlockLineLayout, then it has changed to be a member of RenderBlock,
        but at that time it hasn't been moved to RenderBlock.cpp. This patch moves it into RenderBlock.cpp next to the Shapes functions. I removed
        an unnecessary CSS_SHAPES #ifdef as well from RenderBlock.cpp.

        No new tests, no behavior change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markShapeInsideDescendantsForLayout):
        (WebCore::RenderBlock::layoutShapeInsideInfo):
        * rendering/RenderBlockLineLayout.cpp:

2013-10-15  peavo@outlook.com  <peavo@outlook.com>

        [WinCairo] Build fails.
        https://bugs.webkit.org/show_bug.cgi?id=122830

        Reviewed by Brent Fulgham.

        * platform/network/NetworkStorageSessionStub.cpp:
        (WebCore::NetworkStorageSession::createPrivateBrowsingSession): Update to new return type.

2013-10-15  Andreas Kling  <akling@apple.com>

        FileIconLoader should not be ref-counted.
        <https://webkit.org/b/122827>

        FileIconLoader is singly-owned by FileInputType.

        Reviewed by Antti Koivisto.

2013-10-15  Andreas Kling  <akling@apple.com>

        RenderText should cache RenderStyle in locals more.
        <https://webkit.org/b/122823>

        Reviewed by Antti Koivisto.

        Now that fetching the RenderStyle has to go through the parent,
        we should avoid unnecessary loads by caching style() in a local.

2013-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Remove redundant Document::getElementById
        https://bugs.webkit.org/show_bug.cgi?id=122813

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/4e8f1c5316415614b84370c602beae4a1008299f

        This function simply calls virtual TreeScope::getElementById and Document inherits from TreeScope.

        * WebCore.exp.in:
        * dom/Document.cpp:
        * dom/Document.h:

2013-10-14  Santosh Mahto  <santosh.ma@samsung.com>

        in safari,the background-color of input[type="search"] can't work
        https://bugs.webkit.org/show_bug.cgi?id=119967

        Reviewed by Ryosuke Niwa.

        When input type=search is styled with css background property then
        it does not change the background-color of field. Its happening becasue
        search field is not counted as styled control. Thus theme ignores the 
        css background property. With this patch search field is also counted as 
        styled control so background property reflects on search field.

        Test: fast/forms/search/search-field-background-color.html

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):Now search field is also
        a styled control.

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        EventPath::updateTouchLists traverses through EventPath thrice
        https://bugs.webkit.org/show_bug.cgi?id=122804

        Reviewed by Benjamin Poulain.

        Instead of traversing through EventPath for each TouchList, traverse through TouchList for every EventContext.
        This paves our way to have one-pass traversal over EventPath, and evetually to remove EventContext altogether.

        This change should also improve the cache hit rate since all Touch objects tend to be allocated at the same time
        but this performance improvement is probably not observable.

        * dom/EventContext.h:
        * dom/EventDispatcher.cpp:
        (WebCore::EventRelatedNodeResolver::EventRelatedNodeResolver): Added a new constructor that takes Touch and
        and TouchListType. We need to store these two values in order to update EventContext later.
        (WebCore::EventRelatedNodeResolver::touch): Added,
        (WebCore::EventRelatedNodeResolver::touchListType): Added.
        (WebCore::addRelatedNodeResolversForTouchList): Extracted from updateTouchListsInEventPath.
        (WebCore::EventPath::updateTouchLists): Moved the loop over m_path here. Notice that the outer loop iterates
        over m_path instead of touchList as done in updateTouchListsInEventPath. The inner loop goes through resolvers
        and adds Touch objects each EventContext as needed.

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        Don't generate a wasteful isObservable check in isReachableFromOpaqueRoots
        https://bugs.webkit.org/show_bug.cgi?id=122802

        Reviewed by Mark Hahnenberg.

        * bindings/scripts/CodeGeneratorJS.pm: (GenerateImplementation): Don't.

        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        * bindings/scripts/test/JS/JSTestException.cpp:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSattribute.cpp:
        * bindings/scripts/test/JS/JSreadonly.cpp:
        Updated results.

2013-10-14  Samuel White  <samuel_white@apple.com>

        AX: fieldset should have GroupRole and legend should be description.
        https://bugs.webkit.org/show_bug.cgi?id=122534

        Reviewed by Chris Fleizach.

        Changes fieldset to derive AXDescription from legend if one is available. Added
        convenience method to AccessibilityObject to fetch element if available.

        Test: accessibility/fieldset-element.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::alternativeText):
        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::element):
        (WebCore::AccessibilityObject::isARIAHidden):
        (WebCore::AccessibilityObject::isDOMHidden):
        (WebCore::AccessibilityObject::defaultObjectInclusion):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isHidden):
        * accessibility/AccessibilitySlider.cpp:
        (WebCore::AccessibilitySlider::getAttribute):
        (WebCore::AccessibilitySlider::valueForRange):
        (WebCore::AccessibilitySlider::maxValueForRange):
        (WebCore::AccessibilitySlider::minValueForRange):
        (WebCore::AccessibilitySlider::setValue):
        (WebCore::AccessibilitySlider::inputElement):
        * accessibility/AccessibilitySlider.h:
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::legend):
        * html/HTMLFieldSetElement.h:

2013-10-14  Roger Fong  <roger_fong@apple.com>

        Windows select element doesn't draw RTL properly.
        https://bugs.webkit.org/show_bug.cgi?id=122785.

        Reviewed by Brent Fulgham.

        Covered by fast/text/international/pop-up-button-text-alignment-and-direction.html.

        Problems include the popup items not drawing on the right hand side and 
        not respecting the direction or the directional override styling of the option.
        The selected element (drawn in the actual select element) also doesn't respect 
        the style settings of the selected menu option.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):

2013-10-14  Roger Fong  <roger_fong@apple.com>

        [Windows] Unreviewed build fix.

        * WebCore.vcxproj/WebCoreCommon.props:

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Crash in WebCore::BidiResolver<WebCore::InlineIterator, WebCore::BidiRun>::createBidiRunsForLine
        https://bugs.webkit.org/show_bug.cgi?id=122776

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/aca89bc4d984705a1f94b623dae0ab03e239a248

        Fix modification of whitespace endpoints to not assume it's operating on RenderTexts

        During line layout, we use midpoints to identify RenderObjects, or parts of
        RenderObjects, that don't need InlineBoxes, usually because of collapsed whitespace.

        Prior to actually creating BidiRuns (the precursor to InlineBoxes), we use
        checkMidpoints to fix up our lineMidpointState to handle the case where we start
        ignoring spaces in our line, but don't stop until somewhere on the following line.
        Previously, this function assumed that the final midpoint (called an endpoint)
        was a RenderText, but this assumption is wrong if we have a beginning midpoint
        created by shouldSkipWhitespaceAfterStartObject (which handles inlines and list
        markers) and no endpoint on that line. In that case, we'd instead adjust the
        position backwards on the beginning midpoint, which would cause us to fail to
        create an InlineBox for the inline or list marker. In the new test added, this
        would actually trigger a crash due to an assumption when visually re-ordering
        BidiRuns that a non-empty line would actually contain at least one such run.

        Test: fast/text/whitespace/whitespace-and-margin-wrap-after-list-marker-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::checkMidpoints):

2013-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Assertion failure in Range::processContentsBetweenOffsets
        https://bugs.webkit.org/show_bug.cgi?id=122777

        Reviewed by Darin Adler.

        Merge https://chromium.googlesource.com/chromium/blink/+/c15de182774c7859c20d97126eb844ae97b792a4

        This patch changes ASSERT statements for checking |endOffset| inbound in Range::processContentsBetweenOffsets()
        to limit |endOffset|. This is necessary when DOMNodeRemovedFromDocument event handler splits text nodes,
        Range::insertNode() on text node, in the range calling Range::deleteContents().

        Test: fast/dom/Range/range-delete-contents-mutation-event-crash.html

        * dom/Range.cpp:
        (WebCore::Range::processContentsBetweenOffsets):

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        Add an empty window.crypto.webkitSubtle
        https://bugs.webkit.org/show_bug.cgi?id=122778

        Reviewed by Mark Hahnenberg.

        Tests: security/crypto-subtle-gc-2.html
               security/crypto-subtle-gc-3.html
               security/crypto-subtle-gc.html

        * DerivedSources.make: Process SubtleCrypto.idl.

        * crypto: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * WebCore.vcxproj/WebCore.vcxproj.filters:

        * bindings/js/JSSubtleCryptoCustom.cpp: Added. Empty for now, but we'll certainly
        need custom bindings code here.

        * crypto/SubtleCrypto.cpp: Added.
        (WebCore::SubtleCrypto::SubtleCrypto):
        (WebCore::SubtleCrypto::document):
        * crypto/SubtleCrypto.h: Added.        
        * crypto/SubtleCrypto.idl: Added.
        * page/Crypto.cpp:
        (WebCore::Crypto::subtle):
        * page/Crypto.h:
        * page/Crypto.idl:

2013-10-14  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Remove GestureEvent leftovers from WebCore
        <https://webkit.org/b/122780>

        Reviewed by Anders Carlsson.

        - Removed some remaining references to PlatformGestureEvent, supposed to
          be removed by r157316
        - TOUCH_ADJUSTMENT should be reworked after GestureEvent feature
          removal

        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/EventHandler.h:
        * platform/PlatformEvent.h:
        * platform/ScrollAnimatorNone.cpp:
        * platform/ScrollableArea.h:

2013-10-14  Nick Diego Yamane  <nick.yamane@openbossa.org>

        Build fix after r157366
        http://bugs.webkit.org/show_bug.cgi?id=122783

        When TOUCH_AJUSTMENT is enabled build fails due to some
        refactors in TextRender functions.

        Reviewed by Anders Carlsson.

        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::appendContextSubtargetsForNode):

2013-10-14  Alexandru Chiculita  <achicu@adobe.com>

        The content of the DOM panel for iframes is not updated until the "onload" event
        https://bugs.webkit.org/show_bug.cgi?id=122653

        Reviewed by Darin Adler.

        Test: http/tests/inspector-protocol/loading-iframe-document-node.html

        Renamed InspectorDOMAgent::loadEventFired to InspectorDOMAgent::didCommitLoad and moved the call site
        from InspectorInstrumentation::loadEventFiredImpl to InspectorInstrumentation::didCommitLoadImpl.
        This is to make sure that it will invalidate the content of the iframe as soon as the frame navigates
        to a different page. This way the new node can be retrieved as soon as the page has some content, and
        not just when the page is fully loaded.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didCommitLoad): Renamed from loadEventFired, as it is now called from
        didCommitLoadImpl instead.
        (WebCore::InspectorDOMAgent::frameDocumentUpdated): Updated comment to point to the new function name.
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::loadEventFiredImpl): Removed call do InspectorDOMAgent.loadEventFired.
        (WebCore::InspectorInstrumentation::didCommitLoadImpl): Added call to InspectorDOMAgent.didCommitLoad.

2013-10-14  Roger Fong  <roger_fong@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=122774.
        <rdar://problem/6138855>.

        Reviewed by Brent Fulgham.

        Add a field to keep track of hovered over index.
        Use index to determine whether or not to use the existing selected index on the mouse down event.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWin):
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h:

2013-10-14  Tim Horton  <timothy_horton@apple.com>

        Virtualize PlatformCALayer
        https://bugs.webkit.org/show_bug.cgi?id=122672

        Reviewed by Anders Carlsson.

        No new tests, just a refactoring.

        * WebCore.exp.in:
        setGeometryFlipped is on PlatformCALayerMac now.

        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        Add PlatformCALayer.cpp, PlatformCALayerWin.h, and let VS do its
        thing with some other files.

        * WebCore.xcodeproj/project.pbxproj:
        Add PlatformCALayer.cpp and PlatformCALayerMac.h.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::AVFWrapper::platformLayer):
        Make a PlatformCALayerWin explicitly.

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::createPlatformCALayer):
        Added. Decide whether to make a PlatformCALayer{Mac, Win} based on the platform.
        Later, we will decide between other subclasses based on other things.

        (WebCore::GraphicsLayerCA::filtersCanBeComposited):
        Do the same thing for filtersCanBeComposited.

        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::setContentsToSolidColor):
        (WebCore::GraphicsLayerCA::setContentsToMedia):
        (WebCore::GraphicsLayerCA::setContentsToCanvas):
        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
        (WebCore::GraphicsLayerCA::ensureStructuralLayer):
        (WebCore::GraphicsLayerCA::updateContentsImage):
        (WebCore::GraphicsLayerCA::updateContentsRects):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        Use createPlatformCALayer instead of PlatformCALayer::create.

        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        For now, use the PlatformCALayerMac version of filtersCanBeComposited,
        since this code is heavily tied to having CALayers in the Web process.

        * platform/graphics/ca/GraphicsLayerCA.h:
        Include PlatformCALayer.h here so we can get the LayerType enum.
        (NOTE-to-be-removed: if there's a better way to do this, I'm open to
        suggestions; I couldn't puzzle out nested 'enum class' stuff).

        Add the createPlatformCALayers.

        * platform/graphics/ca/PlatformCAAnimation.h:
        Friend the subclasses too.

        * platform/graphics/ca/PlatformCALayer.cpp: Added.
        (WebCore::PlatformCALayer::~PlatformCALayer):
        Pull the shared part of the PlatformCALayer destructor out.

        * platform/graphics/ca/PlatformCALayer.h:
        (WebCore::PlatformCALayer::platformLayer):
        (WebCore::PlatformCALayer::setOwner):
        (WebCore::PlatformCALayer::PlatformCALayer):
        Virtualize all the things. Move platform specific members to their new subclasses.

        * platform/graphics/ca/mac/PlatformCALayerMac.h: Added.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        Move the PLATFORM(MAC) implementations from PlatformCALayer to PlatformCALayerMac.

        (PlatformCALayer::platformCALayer):
        The platformCALayer lookup function is static on PlatformCALayer, so it can't
        be moved to the subclasses. It might be a good idea in the future to move towards
        a platform-independent mechanism for looking up PlatformCALayers from PlatformLayers,
        and to avoid needing to do this as often as we do now.

        * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
        (WebCore::CACFLayerTreeHost::CACFLayerTreeHost):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        Move the PLATFORM(WIN) implementations from PlatformCALayer to PlatformCALayerWin.

        (PlatformCALayerWin::create):
        (PlatformCALayer::platformCALayer):

        * platform/graphics/ca/win/PlatformCALayerWin.h: Added.

        * platform/graphics/win/GraphicsContext3DWin.cpp:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
        Include PlatformCALayerWin.h and explicitly make PlatformCALayerWins here.

2013-10-14  Hugo Parente Lima  <hugo.lima@openbossa.org>

        [cmake] MediaControlsApple is used only by Efl port and is on CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=122772

        Reviewed by Anders Carlsson.

        * CMakeLists.txt: Removed MediaControlsApple.cpp
        * PlatformEfl.cmake: Added MediaControlsApple.cpp

2013-10-14  Alexey Proskuryakov  <ap@apple.com>

        window.crypto doesn't preserve custom properties
        https://bugs.webkit.org/show_bug.cgi?id=122770

        Reviewed by Mark Hahnenberg.

        Test: security/crypto-gc.html

        Generate isReachableFromOpaqueRoots that makes Crypto live as long as the document
        lives (because that's when it's observable through window object).

        * page/Crypto.cpp:
        (WebCore::Crypto::Crypto):
        (WebCore::Crypto::~Crypto):
        (WebCore::Crypto::document):
        * page/Crypto.h:
        (WebCore::Crypto::create):
        Made Crypto a ContextDestructionObserver, so that it can report its document to bindings.
        Removed ScriptWrappable, because it seems to have served no purpose in this class.

        * page/Crypto.idl: Added GenerateIsReachable. Removed ImplementationLacksVTable,
        because the class now has a vtable, and can be checked for bindings integrity.

        * page/DOMWindow.cpp: (WebCore::DOMWindow::crypto): Pass a document when creating
        crypto.

2013-10-14  Andreas Kling  <akling@apple.com>

        CTTE: NamedNodeMap always has a corresponding Element.
        <https://webkit.org/b/122769>

        Reviewed by Anders Carlsson.

        Made NamedNodeMap::m_element a reference and remove an assertion
        that it's never null.

2013-10-14  Andreas Kling  <akling@apple.com>

        REGRESSION(r157408): Crashes in RenderFullScreen::wrapRenderer().

        Unreviewed crash fix for these two tests:

        - fullscreen/full-screen-restrictions.html
        - fullscreen/empty-anonymous-block-continuation-crash.html

        * rendering/RenderFullScreen.cpp:
        (RenderFullScreen::wrapRenderer):

            Get the RenderArena from Document like we did before this patch.

2013-10-14  Hans Muller  <hmuller@adobe.com>

        [CSS Shapes] Image valued shape-outside shapes should update the layout after the image has been loaded
        https://bugs.webkit.org/show_bug.cgi?id=122340

        Reviewed by Simon Fraser.

        Ensure that the an image-valued shape-outside layout is updated after the image has
        been loaded.

        Test: http/tests/css/css-image-valued-shape.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::imageChanged): Added code for the shape-outside case.
        (WebCore::RenderBlock::updateShapeInsideInfoAfterStyleChange): Ditto.
        * rendering/RenderElement.cpp:
        (WebCore::RenderElement::~RenderElement): Ditto.
        (WebCore::RenderElement::setStyle): Ditto.

2013-10-14  Andreas Kling  <akling@apple.com>

        Remove some silly null checks in Element/NamedNodeMap.
        <https://webkit.org/b/122767>

        Reviewed by Darin Adler.

        Make shouldIgnoreAttributeCase() take a const Element&, exposing
        some unnecessary null checks.

2013-10-14  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix after r122737.

        * dom/Node.h: Add explicit WebCore namespace to macro definition to work around
        Visual Studio bug.

2013-10-14  Andreas Kling  <akling@apple.com>

        Pass Document directly to anonymous renderer constructors.
        <https://webkit.org/b/122752>

        Reviewed by Antti Koivisto.

        Added separate constructors for creating anonymous renderers that
        take a Document& instead of a null Element*/Text*.

        Removed setDocumentForAnonymous() and all createAnonymous() helpers.
        ...and RenderObject::m_node is now a Node&, wohoo!

2013-10-13  Sam Weinig  <sam@webkit.org>

        CTTE: Add more node conversion helpers
        https://bugs.webkit.org/show_bug.cgi?id=122737

        Reviewed by Darin Adler.

        - Factor NODE_TYPE_CASTS into TYPE_CASTS_BASE(ToClassName, FromClassName)
          to allow for DOCUMENT_TYPE_CASTS.
        - Replace more static_casts<>.

2013-10-14  Zan Dobersek  <zdobersek@igalia.com>

        Reintroduce PassRefPtr<Event> copy in ScopedEventQueue::dispatchEvent
        https://bugs.webkit.org/show_bug.cgi?id=122742

        Reviewed by Alexey Proskuryakov.

        This is a follow-up to r157219 which introduced a workaround for the GCC's quirky behavior that
        was resulting in crashes due to the PassRefPtr<Event> object passed to EventDispatcher::dispatchEvent
        being copied and nullified first before retrieving the EventTarget of the Event object wrapped in that
        PassRefPtr.

        The implementation is now adjusted to first retrieve the pointer to the Event's EventTarget and store
        it in a local variable. That variable is then passed as the first parameter to EventDispatcher::dispatchEvent,
        and the PassRefPtr<Event> passed directly as the second parameter. Previously the pointer of that PassRefPtr
        object was passed in, with a new PassRefPtr being created which would increase the reference count of the
        ref-counted object. Passing in the original PassRefPtr avoids the unnecessary reference count increase by creating
        a copy. That still nullifies the original PassRefPtr, but that's not a problem anymore.

        * dom/ScopedEventQueue.cpp:
        (WebCore::ScopedEventQueue::dispatchEvent):

2013-10-14  Bear Travis  <betravis@adobe.com>

        [CSS Shapes] Shape-Margin should be animatable
        https://bugs.webkit.org/show_bug.cgi?id=122524

        Reviewed by Darin Adler.

        Mark content for relayout after shape-margin changes, and add shape-margin
        to the list of animatable properties.

        Tests: fast/shapes/shape-outside-floats/shape-outside-dynamic-shape-margin.html
               fast/shapes/shape-outside-floats/shape-outside-shape-margin-animation.html

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::CSSPropertyAnimationWrapperMap::CSSPropertyAnimationWrapperMap): Add
        shape-margin to the map of animatable CSS properties.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::updateShapeOutsideInfoAfterStyleChange): Compare shape-margins,
        and mark dependent content for relayout if they have changed.

2013-10-14  Arvid Nilsson  <anilsson@blackberry.com>

        Don't crash after OpenGL robustness reset
        https://bugs.webkit.org/show_bug.cgi?id=122750

        Reviewed by George Staikos.

        JIRA 517132.
        Just log the incident and pretend like nothing happened.

        No new tests, we don't have repeatable steps to reproduce a robustness
        reset.

        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::makeContextCurrent):

2013-10-14  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Buildfix after r157393
        https://bugs.webkit.org/show_bug.cgi?id=122749

        Reviewed by Andreas Kling.

        Buildfix with error enumeration value 'CSS_FR' not handled in switch.

        * css/CSSCalculationValue.cpp:
        (WebCore::hasDoubleValue):

2013-10-14  Krzysztof Czech  <k.czech@samsung.com>

        [EFL] Present replaced objects with 0xFFFC character
        https://bugs.webkit.org/show_bug.cgi?id=122744

        Reviewed by Mario Sanchez Prada.

        Replaced elements should be emitted in GTK/EFL and
        marked their presence with the replacement character.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::textIteratorBehaviorForTextRange):

2013-09-16  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] Implement support for <flex>
        https://bugs.webkit.org/show_bug.cgi?id=115362

        Reviewed by Andreas Kling.

        From Blink r149134, r149480, r149532, r150287 and r156127 by <jchaffraix@chromium.org>
        From Blink r157820 by <svillar@igalia.com>

        Added support for flexible lengths ('fr' unit) in CSS Grid Layout
        code. This requires the addition of GridLength class to
        encapsulate the knowledge of <flex> to the grid layout code.

        Also updated the algorithm that computes the layout. It increases
        the value of 1fr based on the grid tracks' usedBreath to fraction
        ratio (called normalizedFractionValue). This enables increasing
        the fraction value while updating the available space to account
        for processed grid tracks. The algorithm stops when we run out of
        grid tracks or available space (one grid item has an intrinsic
        size too big). This matches the specs to the letter for the known
        available space case (both the unknown case and the interaction
        with 'span' are left out of this patch).

        Tests: fast/css-grid-layout/flex-and-minmax-content-resolution-columns.html
               fast/css-grid-layout/flex-and-minmax-content-resolution-rows.html
               fast/css-grid-layout/flex-content-resolution-columns.html
               fast/css-grid-layout/flex-content-resolution-rows.html

        * GNUmakefile.list.am: Added GridLength.h to the build system.
        * Target.pri: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
        * WebCore.vcxproj/WebCore.vcxproj.filters: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::valueForGridTrackBreadth): Replace Length by GridLength.
        * css/CSSGrammar.y.in: Added FR support.
        * css/CSSParser.cpp: Ditto.
        (WebCore::CSSParser::parseGridBreadth):
        (WebCore::CSSParser::detectNumberToken):
        * css/CSSParserValues.cpp: Added FR support.
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        (WebCore::CSSParserString::operator[]):
        (WebCore::CSSParserString::equalIgnoringCase):
        * css/CSSPrimitiveValue.cpp: Added FR support.
        (WebCore::isValidCSSUnitTypeForDoubleConversion):
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::customCSSText):
        (WebCore::CSSPrimitiveValue::cloneForCSSOM):
        (WebCore::CSSPrimitiveValue::equals):
        * css/CSSPrimitiveValue.h: Added a couple of missing const.
        (WebCore::CSSPrimitiveValue::isFlex):
        * css/StyleResolver.cpp: Added FR support.
        (WebCore::createGridTrackBreadth):
        (WebCore::createGridTrackSize):
        * rendering/RenderGrid.cpp:
        (WebCore::GridTrackForNormalization::GridTrackForNormalization):
        New helper struct to ease the computation of track breadths with
        flexible lengths.
        (WebCore::GridTrackForNormalization::operator=):
        (WebCore::RenderGrid::computePreferredTrackWidth): Replaced Length by GridLength.
        (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): Grow grid lines
        having a fraction as the MaxTrackSizingFunction.
        (WebCore::RenderGrid::computeUsedBreadthOfMinLength): Replaced Length by GridLength.
        (WebCore::RenderGrid::computeUsedBreadthOfMaxLength): Ditto.
        (WebCore::sortByGridNormalizedFlexValue):
        (WebCore::RenderGrid::computeNormalizedFractionBreadth): Increase
        the fraction value while updating the available space to account
        for processed grid tracks.
        (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions):
        (WebCore::RenderGrid::distributeSpaceToTracks): Never shrink track sizes.
        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
        * rendering/RenderGrid.h:
        * rendering/style/GridLength.h: Added.
        (WebCore::GridLength::GridLength):
        (WebCore::GridLength::isLength):
        (WebCore::GridLength::isFlex):
        (WebCore::GridLength::length):
        (WebCore::GridLength::flex):
        (WebCore::GridLength::setFlex):
        (WebCore::GridLength::operator==):
        * rendering/style/GridTrackSize.h: Replaced Length by GridLength.
        (WebCore::GridTrackSize::length):
        (WebCore::GridTrackSize::setLength):
        (WebCore::GridTrackSize::minTrackBreadth):
        (WebCore::GridTrackSize::maxTrackBreadth):
        (WebCore::GridTrackSize::setMinMax):
        (WebCore::GridTrackSize::hasMinOrMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMinTrackBreadth):
        (WebCore::GridTrackSize::hasMinOrMaxContentMaxTrackBreadth):
        (WebCore::GridTrackSize::hasMaxContentMaxTrackBreadth):

2013-10-14  peavo@outlook.com  <peavo@outlook.com>

        Broken text rendering when input field has selection.
        https://bugs.webkit.org/show_bug.cgi?id=122716

        Reviewed by Antti Koivisto.

        Tests: fast/text/text-rendering-with-input-selection.html.
               fast/text/text-rendering-with-input-selection-expected.html.

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint): Check that text has selection.

2013-10-14  Zalan Bujtas  <zalan@apple.com>

        Unexpected word wrapping for wrapped content then raw content.
        https://bugs.webkit.org/show_bug.cgi?id=121130

        Reviewed by Antti Koivisto.

        When deciding whether a line is considered empty, we need to check if the current
        object is fully responsible for the currently uncommitted width. It helps differentiating
        <span></span><span>abcd</span> from <span>a</span><span>bcd</span>, where in the first
        case when we hit the second <span> the line is still considered empty, as opposed to the
        second example.

        Test: fast/css/unexpected-word-wrapping-with-non-empty-spans.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::LineBreaker::nextSegmentBreak):

2013-10-14  Andreas Kling  <akling@apple.com>

        Be more efficient about passing RenderStyle to attachRenderTree().
        <https://webkit.org/b/122743>

        Reviewed by Antti Koivisto.

        Have attachRenderTree() and createRendererTreeIfNeeded() pass the
        RenderStyle in a PassRefPtr to avoid churning the ref count.

2013-10-14  Sergio Villar Senin  <svillar@igalia.com>

        [CSS Grid Layout] 2 span positions are not resolved correctly
        https://bugs.webkit.org/show_bug.cgi?id=119717

        Reviewed by Andreas Kling.

        From Blink r155397 by <jchaffraix@chromium.org>

        Test: fast/css-grid-layout/grid-item-bad-resolution-double-span.html

        Two opposite 'span' or 'auto' positions should be resolved using
        the auto placement algorithm. We were only checking for the 'auto'
        case. This also covers the case of other positions that, according
        to the spec, should be treated as 'auto'.

        * rendering/RenderGrid.cpp:
        (WebCore::RenderGrid::resolveGridPositionsFromStyle):

2013-10-13  Andreas Kling  <akling@apple.com>

        Use RenderElement instead of RenderObject in more places.
        <https://webkit.org/b/122734>

        Reviewed by Antti Koivisto.

        Convert some sites to use RenderElement (or type inference) instead
        of RenderObject for less branchy code.

2013-10-13  Darin Adler  <darin@apple.com>

        Deprecate or remove deleteAllValues functions; there are only a few call sites left
        https://bugs.webkit.org/show_bug.cgi?id=122738

        Reviewed by Anders Carlsson.

        * platform/blackberry/CookieMap.cpp:
        (WebCore::CookieMap::deleteAllCookiesAndDomains):
        * platform/network/blackberry/rss/RSSParserBase.cpp:
        (WebCore::RSSFeed::clear):
        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::~WCDataObject):
        Renamed deleteAllValues to deprecatedDeleteAllValues.

2013-10-13  Sam Weinig  <sam@webkit.org>

        Merge NODE_TYPE_CASTS and ELEMENT_TYPE_CASTS
        https://bugs.webkit.org/show_bug.cgi?id=122735

        Reviewed by Antti Koivisto.

        NODE_TYPE_CASTS and ELEMENT_TYPE_CASTS are identical. Let them become one
        with one another.

2013-10-13  Andreas Kling  <akling@apple.com>

        Uncrashify Document::head() too. (Why am I even awake?)

2013-10-13  Andreas Kling  <akling@apple.com>

        REGRESSION(r157381): Make Document::body() crash less when there is no documentElement.

        Unreviewed.

2013-10-13  Darin Adler  <darin@apple.com>

        Rewrite Document::body and Document::head in modern style, way clearer and shorter
        https://bugs.webkit.org/show_bug.cgi?id=122717

        Reviewed by Andreas Kling.

        * dom/Document.cpp:
        (WebCore::Document::body): Use iterator to make this way easier to read.
        (WebCore::Document::head): Ditto.

        * html/HTMLTagNames.in: Added generateTypeHelpers for body and head.

== Rolled over to ChangeLog-2013-10-13 ==
