2013-05-15  Darin Adler  <darin@apple.com>

        [Mac] Remove call to ClipboardMac::create from EventHandler::createDraggingClipboard
        https://bugs.webkit.org/show_bug.cgi?id=116161

        Reviewed by Andreas Kling.

        * dom/Clipboard.h: Added createForDragAndDrop function.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingClipboard): Changed to use new Clipboard function
        instead of ClipboardMac::create.

        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::createForDragAndDrop): Added. For now it does exactly what the
        EventHandler::createDraggingClipboard function did, soon to be refactored better.

2013-05-15  Darin Adler  <darin@apple.com>

        [Mac] Thin out the ClipboardMac class and header file to prepare for deleting them
        https://bugs.webkit.org/show_bug.cgi?id=116159

        Reviewed by Andreas Kling.

        * dom/Clipboard.h:
        (WebCore::Clipboard::pasteboard): Added. For clients that have a DOM clipboard
        object and need to get to the Pasteboard platform abstraction.

        * editing/Editor.cpp:
        (WebCore::Editor::dispatchCPPEvent): Call writePasteboard instead of writeClipboard.
        Our long term plan is to delete writeClipboard.

        * platform/Pasteboard.h: Added writePasteboard function.
        (WebCore::Pasteboard::name): Made this const.

        * platform/mac/ClipboardMac.h: Deleted unneeded includes and forward declarations.
        Deleted all the data members and the virtual destructor.

        * platform/mac/ClipboardMac.mm: Deleted the many includes that are no longer needed.
        Deleted the destructor, since it's now automatically generated. Deleted the comment
        on an #endif since it's only a few source lines away from the #if.
        (WebCore::ClipboardMac::ClipboardMac): Deleted the code to set the data members,
        since they are no longer used.

        * platform/mac/PasteboardMac.mm: Changed include to Clipboard.h instead of ClipboardMac.h.
        (WebCore::Pasteboard::writePasteboard): Replaced writeClipboard with this.

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

        Web Inspector: Get rid of addNativeSnapshotChunk and HeapSnapshotChunk from Memory domain
        https://bugs.webkit.org/show_bug.cgi?id=116144

        Reviewed by Timothy Hatcher.

        No new tests, no behavior change.

        * inspector/Inspector.json:

2013-05-15  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix a crash under ~PingLoader when the QNAM on the page has been destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=116035

        Reviewed by Allan Sandfeld Jensen.

        The previous fix only moved the crash location from WebKit down to QNetworkReplyHttpImpl
        which expects its QNetworkAccessManager to still be alive.

        Fix it by watching the QNetworkReply's destroyed() signal and avoid the dangling pointer
        instead. The QNetworkReply doesn't need to be aborted in this case anyway.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
        (WebCore::QNetworkReplyWrapper::release):
        (WebCore::QNetworkReplyWrapper::stopForwarding):
          Rename resetConnections to stopForwarding since not all connections are related
          to data forwarding to the client anymore.
        (WebCore::QNetworkReplyWrapper::receiveMetaData):
        (WebCore::QNetworkReplyWrapper::replyDestroyed):
        (WebCore::QNetworkReplyWrapper::didReceiveFinished):
        * platform/network/qt/QNetworkReplyHandler.h:
        (QNetworkReplyWrapper):

2013-05-15  Darin Adler  <darin@apple.com>

        [Mac] Make Clipboard::declareAndWriteDragImage non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=116156

        Reviewed by Anders Carlsson.

        * dom/Clipboard.h: Make declareAndWriteDragImage non-virtual for non-legacy.

        * platform/Pasteboard.h:
        (WebCore::Pasteboard::name): Added. Can be used in Mac platform code to do
        pasteboard operations directly instead of through the Pasteboard class
        functions. Not sure if we'll need it long term or not.

        * platform/mac/ClipboardMac.h: Removed declareAndWriteDragImage function.

        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::declareAndWriteDragImage): Made this function a Clipboard
        member instead of ClipboardMac.

2013-05-15  Peter Gal  <galpeter@inf.u-szeged.hu>

        [curl] Remove version #if guards
        https://bugs.webkit.org/show_bug.cgi?id=116152

        Reviewed by Brent Fulgham.

        No tests required.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading): Removed version guard.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::writeCallback): Ditto.
        (WebCore::headerCallback): Ditto.
        (WebCore::readCallback): Ditto.
        (WebCore::ResourceHandleManager::dispatchSynchronousJob): Ditto.
        (WebCore::ResourceHandleManager::initializeHandle): Ditto.

2013-05-15  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r150089): Make WebCoreTestShim build for iOS

        * Configurations/WebCoreTestShim.xcconfig: Exclude
        WebCoreTestShimLibrary.cpp when building for iOS.

2013-05-15  Radu Stavila  <stavila@adobe.com>

        [CSSRegions] Implement offsetParent for elements inside named flow
        https://bugs.webkit.org/show_bug.cgi?id=113276

        In the offsetParent algorithm, the nearest ancestor search skips from the topmost named flow elements directly to the body element.
        http://dev.w3.org/csswg/css-regions/#cssomview-offset-attributes

        As a result of this change, the DumpRenderTree tool would crash in 
        WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent when running the selecting-text-through-different-region-flows.html
        test. The RenderObjects inside a flow are attached to the RenderFlowThread. However, the RenderFlowThread is attached to the 
        RenderView directly, meaning that we are going to bypass the <body>'s RenderObject while iterating the parents.

        Reviewed by Darin Adler.

        Tests: fast/regions/offsetParent-body-in-flow-thread.html
               fast/regions/offsetParent-in-flow-thread.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):

2013-05-15  Darin Adler  <darin@apple.com>

        [Mac] Make Clipboard::createDragImage non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=116136

        Reviewed by Benjamin Poulain.

        * dom/Clipboard.h: Made createDragImage non-virtual for non-legacy.

        * platform/mac/ClipboardMac.h: Removed frame argument from create function
        and constructor. Removed createDragImage and dragNSImage. Removed m_frame
        data member.

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac): Removed frame argument and code
        to initialize m_frame.
        (WebCore::Clipboard::createDragImage): Merged the createDragImage and
        dragNSImage functions, since they were the same thing. Changed code to get
        the frame from the drag image element. Made the createDragImage function
        a Clipboard member instead of ClipboardMac.

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

        [WINCE] Fix calls to GlyphPage::setGlyphDataForIndex()
        https://bugs.webkit.org/show_bug.cgi?id=116137

        Reviewed by Andreas Kling.

        Use zero for the glyp when the fontData pointer is null.
        This aligns GlyphPageTreeNodeWinCE with the other implementations
        and makes all ASSERT() pass in setGlyphDataForIndex().

        * platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp:
        (WebCore::GlyphPage::fill):

2013-05-15  Benjamin Poulain  <bpoulain@apple.com>

        Do not bloat HTMLTokenizer with a giant inline InputStreamPreprocessor::peek
        https://bugs.webkit.org/show_bug.cgi?id=116066

        Reviewed by Ryosuke Niwa.

        Merge https://chromium.googlesource.com/chromium/blink/+/45e0337b2f2db535ab08365f6e763a5015e4d990.

        On x86_64, this removes 40kb from the binary. On my machine it is completely neutral on performance.

        * html/parser/InputStreamPreprocessor.h:
        (WebCore::InputStreamPreprocessor::peek):
        (InputStreamPreprocessor):
        (WebCore::InputStreamPreprocessor::advance):
        (WebCore::InputStreamPreprocessor::skipNextNewLine):
        (WebCore::InputStreamPreprocessor::reset):
        (WebCore::InputStreamPreprocessor::processNextInputCharacter):

2013-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Remove WTF_USE_PLATFORM_STRATEGIES
        https://bugs.webkit.org/show_bug.cgi?id=114431

        Reviewed by Darin Adler.

        * Modules/webdatabase/DatabaseManager.cpp:
        (WebCore::DatabaseManager::DatabaseManager):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        * dom/VisitedLinkState.cpp:
        (WebCore::VisitedLinkState::determineLinkStateSlowCase):
        * loader/CookieJar.cpp:
        (WebCore::cookies):
        (WebCore::setCookies):
        (WebCore::cookiesEnabled):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/HistoryController.cpp:
        (WebCore::addVisitedLink):
        * loader/LoaderStrategy.cpp:
        * loader/LoaderStrategy.h:
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::resourceLoadScheduler):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources):
        (WebCore::ResourceLoader::willSendRequest):
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::load):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::performPostLoadActions):
        * platform/CookiesStrategy.h:
        * platform/DatabaseStrategy.cpp:
        * platform/DatabaseStrategy.h:
        * platform/PasteboardStrategy.h:
        * platform/PlatformStrategies.cpp:
        * platform/PlatformStrategies.h:
        * platform/VisitedLinkStrategy.h:
        * platform/mac/PasteboardMac.mm:
        * platform/network/BlobRegistry.cpp:
        (WebCore::blobRegistry):
        * plugins/PluginData.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/PluginStrategy.h:
        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::localStorageNamespace):
        (WebCore::StorageNamespace::transientLocalStorageNamespace):
        (WebCore::StorageNamespace::sessionStorageNamespace):
        * storage/StorageStrategy.cpp:
        * storage/StorageStrategy.h:
        * workers/SharedWorkerStrategy.h:

2013-05-15  Dávid Szabolcs  <David.Szabolcs@stud.u-szeged.hu>

        [curl] Add support for HttpOnly cookies
        https://bugs.webkit.org/show_bug.cgi?id=116102

        Reviewed by Brent Fulgham.

        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::addMatchingCurlCookie):
        (WebCore::cookiesForSession):
        (WebCore::cookiesForDOM):
        (WebCore):
        (WebCore::cookieRequestHeaderFieldValue):

2013-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        REGRESSION(r147548): Broken comboboxes
        https://bugs.webkit.org/show_bug.cgi?id=115475

        Reviewed by Gustavo Noronha Silva.

        The problem is that r147548 made the popup to be closed when a
        blur event is received. Right before showing the popup the input
        element is focused, so that after the the popup is shown the focus
        event is emitted and the event handler is called again hiding the
        popup.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::menuListDefaultEventHandler): Check
        element has lost the focus before closing the popup menu.

2013-05-14  Darin Adler  <darin@apple.com>

        [Mac] Move setDragImage from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116036

        Reviewed by Anders Carlsson.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::~Clipboard): Stop loading the drag image when
        the clipboard object is deallocated. It would be better if there was
        a more-well-defined time to stop the load.
        (WebCore::Clipboard::setDragImage): Added. Sets up a drag image
        based on a CachedImage. This tells the image loader to load the image
        and updates the drag image when the image arrives. Copied from the
        code in ClipboardMac, but refactored to use a separate loader object.
        (WebCore::Clipboard::setDragImageElement): Added. Sets up a drag image
        based on an element.
        (WebCore::Clipboard::updateDragImage): Added. Common code to update
        drag image when a new one is set or when a drag image load completes.
        (WebCore::DragImageLoader::create): Added.
        (WebCore::DragImageLoader::DragImageLoader): Ditto.
        (WebCore::DragImageLoader::startLoading): Ditto.
        (WebCore::DragImageLoader::stopLoading): Ditto.
        (WebCore::DragImageLoader::imageChanged): Ditto.

        * dom/Clipboard.h: Made setDragImage and setDragImageElement non-virtual
        for non-legacy. Added updateDragImage and m_dragImageLoader.

        * platform/Pasteboard.h: Added setDragImage function.

        * platform/mac/ClipboardMac.h: Removed CachedImageClient as a base class
        for ClipboardMac. Removed setDragImage and setDragImageElement.

        * platform/mac/ClipboardMac.mm: Removed setDragImage and setDragImageElement.
        (WebCore::ClipboardMac::~ClipboardMac): Removed code to remove self as
        client loading the drag image. This is now in the Clipboard base class.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::setDragImage): Added. Contains code moved here
        from ClipboardMac.

2013-05-14  Ryosuke Niwa  <rniwa@webkit.org>

        Use ElementTraversal in SelectorDataList::execute
        https://bugs.webkit.org/show_bug.cgi?id=116131

        Reviewed by Darin Adler.

        Use ElementTraversal::firstWithin and ElementTraversal::next to simplify the code.

        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::execute):

2013-05-14  Tim Horton  <timothy_horton@apple.com>

        [wk2] Not updating tiled backing coverage when main frame scrollability changes
        https://bugs.webkit.org/show_bug.cgi?id=116123
        <rdar://problem/13836559>

        Reviewed by Simon Fraser.

        Export FrameView::adjustTiledBackingCoverage.

        * WebCore.exp.in:

2013-05-14  Alexey Proskuryakov  <ap@apple.com>

        [Mac] Add a testing shim for secure event input functions
        https://bugs.webkit.org/show_bug.cgi?id=116122

        Reviewed by Mark Rowe.

        Added a new target with a dynamic library that interposes secure event input functions.
        We need this to avoid interfering with user session state.

        * Configurations/WebCoreTestShim.xcconfig: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/DynamicLinkerInterposing.h: Moved from Source/WebKit2/Shared/mac/DyldInterpose.h.
        * testing/WebCoreTestShimLibrary.cpp: Added.
        (shimEnableSecureEventInput):
        (shimDisableSecureEventInput):
        (shimIsSecureEventInputEnabled):

2013-05-14  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of Gradient::getColor()
        https://bugs.webkit.org/show_bug.cgi?id=116089

        Reviewed by Andreas Kling.

        This code is now useless, remove it.

        * html/canvas/CanvasGradient.h:
        (CanvasGradient):
        * platform/graphics/Gradient.cpp:
        (WebCore::Gradient::Gradient):
        (WebCore::Gradient::hash):
        * platform/graphics/Gradient.h:
        (Gradient):

2013-05-14  David Hyatt  <hyatt@apple.com>

        REGRESSION: united.com has overlapping elements and is broken by flex box changes.
        https://bugs.webkit.org/show_bug.cgi?id=115329
        <rdar://problem/13690610>
        
        The new flexbox spec says that flex-basis omitted in the flex shorthand defaults to
        0 when flex-grow/shrink are set. This has undesirable behavior when objects don't
        end up flexing at all, and it's something the spec is going to eventually address.
        
        For now, though, to fix the regression, I'm making a targeted "hack" to deliberately
        violate the spec, but to do so as minimally as possible. This hack detects if there
        is infinite available space on a line, and if so, it treats a flex-basis of 0 like
        auto.
        
        This means that when height is constrained and set by a container, flexing will do
        the right thing. Basically any time you end up actually flexing, the spec behavior
        should happen. If you're just laying out at intrinsic sizes, though, and no flexing
        is going to occur, we ignore a flex-basis of 0 and just use the child's normal size.
        
        Note that widths don't have to be patched because the preferred logical widths
        algorithm is broken right now and not checking flex-basis. If it did, we'd have seen
        the same bug in the width direction.
        
        This width issue is covered by https://bugs.webkit.org/show_bug.cgi?id=116117
        
        Reviewed by Simon Fraser.

        Added fast/flexbox/auto-height-with-flex.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::mainAxisContentExtent):
        Make sure we return LayoutUnit::max when you have infinite free space and not
        max - borderPadding.

        (WebCore::RenderFlexibleBox::preferredMainAxisContentExtentForChild):
        Only clear override size if it was set. Only mark for relayout if we did
        an override size clear (i.e., if we were actually flexed). Add a new parameter,
        hasInfiniteLineLength, that - if set - causes us to special case flex-basis:0
        and treat it like flex-basis:auto.

        (WebCore::RenderFlexibleBox::layoutFlexItems):
        Define hasInfiniteLineLength and pass it to all the functions that need it.

        (WebCore::RenderFlexibleBox::computeMainAxisPreferredSizes):
        Remove the code that marks for layout and does a layout so early. This code
        is moving (and changing) to preferredMainAxisContentExtentForChild.

        (WebCore::RenderFlexibleBox::computeNextFlexLine):
        Computes whether or not we have infinite line length now.

        (WebCore::RenderFlexibleBox::freezeViolations):
        (WebCore::RenderFlexibleBox::resolveFlexibleLengths):
        Propagate hasInfiniteLineLength through to preferredMainAxisContentExtentForChild.

        * rendering/RenderFlexibleBox.h:
        (RenderFlexibleBox):
        Add hasInfiniteLineLength parameter to a bunch of functions.

2013-05-14  Andreas Kling  <akling@apple.com>

        Assertion failure in GlyphPage::setGlyphDataForIndex: (!glyph || fontData == m_fontDataForAllGlyphs)
        <http://webkit.org/b/116113>
        <rdar://problem/13833790>

        Reviewed by Dan Bernstein.

        If we're filling a full GlyphPage with a SimpleFontData that is actually a composite font reference,
        we need to make sure we have per-glyph font data pointers, since it may end up using them.

        Added GlyphPage::mayUseMixedFontDataWhenFilling() which can be implemented by the platform to let
        GlyphPageTreeNode know that it should allocate a full-sized GlyphPage for mixed font data pointers
        in case the font is a composite font reference, or if there are CJK ideographs in the text.

        This code can be made smarter, but that's outside the scope of this change.
        Fixes heavy asserting on bots running unreleased software.

        * platform/graphics/GlyphPage.h:
        (GlyphPage):
        (WebCore::GlyphPage::mayUseMixedFontDataWhenFilling):
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::shouldUseCoreText):
        (WebCore::GlyphPage::mayUseMixedFontDataWhenFilling):

2013-05-14  Bem Jones-Bey  <bjonesbe@adobe.com>

        Heap-use-after-free in WebCore::RenderBox::exclusionShapeOutsideInfo
        https://bugs.webkit.org/show_bug.cgi?id=115566

        Reviewed by David Hyatt.

        When a portion of the render tree is being detached, anonymous blocks
        will be combined as their children are deleted. In this process, the
        anonymous block later in the tree is merged into the one preceeding it.
        It can happen that the later block contains floats that the previous
        block did not contain, and thus are not in the floating objects list for
        the new block. This can result in the new block containing floats that
        are not in it's floating objects list, but are in the floating objects
        lists of siblings and parents. This can cause problems when the float
        itself is deleted, since the deletion code assumes that if a float is not
        in it's containing block's floating objects list, it isn't in any
        floating objects list, causing dangling pointers in the floating objects
        lists of the siblings and parents. In order to preserve this condition
        (removing it has serious performance implications), we need to copy the
        floating objects from the old block to the new block.  The float's
        metrics will likely all be wrong, but since the new block is already
        marked for layout, this will get fixed before anything gets displayed.

        Test: fast/block/float/float-append-child-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::moveAllChildrenIncludingFloatsTo): Copy
            floating objects list in addition to children.
        (WebCore::RenderBlock::FloatingObject::clone): Added.
        (WebCore::RenderBlock::removeChild): Use new method to copy children.
        * rendering/RenderBlock.h:
        (RenderBlock): Add method.

2013-05-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r150023.
        http://trac.webkit.org/changeset/150023
        https://bugs.webkit.org/show_bug.cgi?id=116120

        Causes table layout issues (Bug 116118) and crashes on
        buildbot waterfall pages. (Requested by ddkilzer on #webkit).

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):
        * rendering/RenderTableSection.h:
        (RenderTableSection):

2013-05-14  Antoine Quint  <graouts@apple.com>

        Snapshotted plug-ins shadow tree should reset style inheritance
        https://bugs.webkit.org/show_bug.cgi?id=116098

        Reset the styles such that only injected user-agent stylesheets affect
        the rendering of snapshotted plug-ins' shadow content.

        Reviewed by Darin Adler.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):

2013-05-14  Mihnea Ovidenie  <mihnea@adobe.com>

        [CSSRegions] Improve hit testing for empty regions
        https://bugs.webkit.org/show_bug.cgi?id=115534

        Reviewed by David Hyatt.

        As a better follow up after WebKit bug https://bugs.webkit.org/show_bug.cgi?id=107752,
        we can improve the code by not doing hit testing on the render flow thread object when
        we are trying to hit test the render flow thread background. In this case, we should just bail out.
        No new tests, covered by existing regions tests.

        * rendering/RenderFlowThread.cpp:
        (WebCore::RenderFlowThread::nodeAtPoint):
        (WebCore):
        (WebCore::RenderFlowThread::hitTestFlowThreadPortionInRegion):
        * rendering/RenderFlowThread.h:

2013-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Handle network errors when starting a new job
        https://bugs.webkit.org/show_bug.cgi?id=116101

        Reviewed by Rob Buis.

        Make startJob() return a network status that can be used by the
        caller to create a network error.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::initialize): createNetworkStream() should
        always return a valid pointer so use an ASSERT instead of an early
        return to make sure we have a valid stream.
        (WebCore::NetworkJob::startNewJobWithRequest): Only return true if
        the network job was started successfully.
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob): Make initialize method void instead of bool since it
        can't fail.
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob): Return a network error or
        StatusSuccess.
        * platform/network/blackberry/NetworkManager.h:
        (NetworkManager):
        * platform/network/blackberry/ResourceHandleBlackBerry.cpp:
        (WebCore::ResourceHandle::start): Return true if job was started
        successfully.
        (WebCore::ResourceHandle::platformLoadResourceSynchronously):
        Check return value of startJob and fill the ResourceError with the
        network status returned to finish the load.

2013-05-14  Antoine Quint  <graouts@apple.com>

        [Mac] captions menu is not positioned correctly in full-screen
        https://bugs.webkit.org/show_bug.cgi?id=116103

        Update the positioning properties of the captions menu in full-screen
        following the fix for https://webkit.org/b/115968.

        Reviewed by Darin Adler.

        * css/fullscreenQuickTime.css:
        (video:-webkit-full-screen::-webkit-media-controls-closed-captions-container):
        Add 50px to the bottom position since we're now positioned relative to the
        media element, and use a calc() command to be right-aligned to the captions
        icon in the media controller. The max-width and max-height properties follow
        the same technique used for the non-full-screen mode.

2013-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move generated ColorData.cpp, WebKitFontFamilyNames.(cpp|h) build targets into libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=115921

        Reviewed by Gustavo Noronha Silva.

        No new tests - no new functionality.

        * GNUmakefile.am: Add platform_cppflags to the list of CPPFLAGS for libWebCoreSVG, libWebCore,
        libWebCorePlatform, libWebCoreGtk. Remove generation rules for ColorData.cpp and WebKitFontFamilyNames.(cpp|h).
        * GNUmakefile.list.am: Include the ColorData.cpp and WebKitFontFamilyNames.(cpp|h) build targers under
        platform_built_sources.
        * bindings/gobject/GNUmakefile.am: Add platform_cppflags to the list of libWebCoreDOM CPPFLAGS.

2013-05-14  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] libPlatform, libPlatformGtk must depend on the related GNUmakefiles
        https://bugs.webkit.org/show_bug.cgi?id=115937

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.am: Fix typos in two libraries' names - Webcore -> WebCore.

2013-05-13  Ryosuke Niwa  <rniwa@webkit.org>

        Removing Attr can delete a wrong Attribute in ElementData
        https://bugs.webkit.org/show_bug.cgi?id=116077

        Reviewed by Benjamin Poulain.
        
        Merge https://chromium.googlesource.com/chromium/blink/+/e861452a292e185501e48940305947aa6a4e23c2
        after simplifying and renaming functions to be more WebKit style.

        The XML parser can produce elements with attributes whose names have
        distinct prefixes, but the same expanded name. When one of these
        attributes is put up for adoption, it may be its similarly named
        sibling that is removed from its owner element. As a result the
        original owner hangs onto the adopted attribute, despite the fact that
        it is now in a different document. Sometimes it's just hard to let go.

        Test: fast/dom/adopt-attribute-crash.svg

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeNode):
        (WebCore::ElementData::getAttributeItemIndex):
        * dom/Element.h:
        (ElementData):
        (Element):

2013-05-14  Antti Koivisto  <antti@apple.com>

        Remove ::-webkit-distributed()
        https://bugs.webkit.org/show_bug.cgi?id=116106

        Reviewed by Andreas Kling.

        This experimental Shadow DOM selector code is unused and has no owner.

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::rewriteSpecifiersWithNamespaceIfNeeded):
        (WebCore::CSSParser::rewriteSpecifiersWithElementName):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserSelector::CSSParserSelector):
        * css/CSSParserValues.h:
        (CSSParserSelector):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::selectorText):
        * css/CSSSelector.h:
        * css/CSSSelectorList.cpp:
        * css/CSSSelectorList.h:
        (CSSSelectorList):
        * css/DocumentRuleSets.cpp:
        (WebCore::DocumentRuleSets::resetAuthorStyle):
        * css/DocumentRuleSets.h:
        (DocumentRuleSets):
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchAuthorRules):
        * css/ElementRuleCollector.h:
        (ElementRuleCollector):
        * css/RuleSet.cpp:
        (WebCore::RuleSet::addChildRules):
        * css/SelectorChecker.cpp:
        (WebCore::SelectorChecker::match):
        * css/SelectorFilter.cpp:
        (WebCore::SelectorFilter::collectIdentifierHashes):
        * html/shadow/InsertionPoint.cpp:
        * html/shadow/InsertionPoint.h:

2013-05-14  Daker Fernandes Pinheiro  <daker.pinheiro@openbossa.org>

        Remove RenderTheme::supportsCalendarPicker
        https://bugs.webkit.org/show_bug.cgi?id=116068

        Reviewed by Benjamin Poulain.

        No new tests needed because it doesn't affect behaviour.

        This method was never overrided by any platform
        and always leaded to the same behaviour.
        The code which depended on it was also removed.

        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree):
        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updatePickerIndicatorVisibility):
        * html/BaseMultipleFieldsDateAndTimeInputType.h:
        (BaseMultipleFieldsDateAndTimeInputType):
        * page/ChromeClient.h:
        (ChromeClient):
        * rendering/RenderTheme.h:

2013-04-30  Balazs Kelemen  <b.kelemen@sisa.samsung.com>

        [GStreamer] cannot seek after video finished
        https://bugs.webkit.org/show_bug.cgi?id=114044

        Reviewed by Philippe Normand.

        Test: media/video-seek-after-end.html

        Reland without wrong assertion. If seek is called after didEnd the pipeline
        state will not be in GST_STATE_NULL yet but it is not a problem because we handle that.

        Rework the seeking logic to be able to seek after reseting the pipeline.
        In addition to solve the actual problem this patch supposed to make seeking
        more robust and correct.
        The previous implementation tried to hide the complexity of asynchronous operations
        on the pipeline. It did not handle the GST_MESSAGE_ASYNC_DONE message from the bus
        but instead reported the seek as finished when it saw an asynchronous pending state
        (GST_STATE_CHANGE_ASYNC) which could happen way before the seek is really done.
        Now we pay attention to the GST_MESSAGE_ASYNC_DONE message to track the status of seeks.
        Seeks are not the only operations executed asynchronously, changing the pipeling state is
        similar. It means a seek can overlap with onother ongoing asynchronous operation.
        This change address this by introducing an invariant for seeks, which is that we only request
        a seek if there are no other ongoing asynchronous operations and the pipeline state is either
        paused or playing (which is recommended anyway according to GStreamer's documentation).
        This way we can be sure that the time when we get the next GST_MESSAGE_ASYNC_DONE message the
        seek has been completed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::toGstClockTime): Factored time conversation into a helper.
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):

        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition): The position might not be available
        if the pipeline still has a pending state. As a workaround, if we are right after a seek we can
        use the seek time. Avoiding this situation would be possible by not allowing any asynchronous
        operation to overlap. I believe it would add a lot more complexity so I decided to rather introduce
        this workaround. Otherwise those overlapping operations are handled fine by GStreamer.

        (WebCore::MediaPlayerPrivateGStreamer::prepareToPlay): Do not reset internal state variables.
        This function called when there is an intent to restart playback but it does not actually restart it.
        (WebCore::MediaPlayerPrivateGStreamer::currentTime): Just removed a staling newline.
        (WebCore::MediaPlayerPrivateGStreamer::seek): Take a look to the pipeline state and act upon that.
        If there is an ongoing asynchronous operation make the seek pending, otherwise do it now.
        Now we handle overlapping seeks as well because I saw that it can happen in some tests.
        Added an early return for live streams as it doesn't makes sense to try seeking in them.

        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Handle GST_MESSAGE_ASYNC_DONE and some refactoring.
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates): Only handle seeks in the pending case, the rest is
        now handled in asyncStateChangeDone.
        (WebCore::MediaPlayerPrivateGStreamer::cacheDuration): Do not reset the m_mediaDurationKnown if the pipeline
        has an asynchronous pending state because it would fail. It does actually happen when we get a duration message
        after restarting the pipeline and it would result in restarting playback from the start. It seems to be a bug
        in GStreamer that it sends the duration message too early. Also sanitized this function by merging redundant branches.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2013-05-14  Zalan Bujtas  <zalan@apple.com>

        Ellipsis text is placed to wrong position, when the truncated text is fully cut off in RTL direction.
        https://bugs.webkit.org/show_bug.cgi?id=115858

        Reviewed by Darin Adler.

        Take text direction into account to calculate ellipsis position in case of
        full truncation.

        Test: fast/css/text-overflow-ellipsis-full-truncate-rtl.html

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::placeEllipsisBox):

2013-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        [BlackBerry] Implement platform strategies
        https://bugs.webkit.org/show_bug.cgi?id=112162

        Reviewed by Rob Buis.

        This is just a refactoring, covered by existing tests.

        * CMakeLists.txt: Move PlatformStrategies.cpp from platform
        specific makefiles to the global one now that all platforms using
        cmake implement platform strategies.
        * PlatformBlackBerry.cmake:
        * PlatformEfl.cmake:
        * PlatformWinCE.cmake:
        * loader/CookieJar.cpp: Remove the preprocessor error that is not
        needed anymore.
        * loader/blackberry/CookieJarBlackBerry.cpp: Removed.
        * platform/network/blackberry/CookieJarBlackBerry.cpp: Added.
        (WebCore):
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        (WebCore::deleteAllCookies):
        * plugins/blackberry/PluginDataBlackBerry.cpp: Removed.

2013-05-14  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        [Qt] Fix a crash under ~PingLoader when the QNAM on the page has been destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=116035

        Reviewed by Simon Hausmann.

        Reproduced with arora which does destroy the QNetworkAccessManager in some situations.
        The problem is that PingLoader can still be pending meanwhile, holding a ResourceHandle
        with a dangling pointer to a QNetworkReply destroyed with the QNetworkAccessManager.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyWrapper::QNetworkReplyWrapper):
          Set the parent to 0 like we did before the introduction of QNetworkReplyWrapper.
        (WebCore::QNetworkReplyWrapper::release):

2013-05-13  Eric Carlson  <eric.carlson@apple.com>

        [Mac] update in-band caption attributes
        https://bugs.webkit.org/show_bug.cgi?id=116057

        Reviewed by Dean Jackson.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::updateCueFromCueData): Copy highlight color.

        * html/track/TextTrackCueGeneric.cpp:
        (WebCore::TextTrackCueGenericBoxElement::applyCSSProperties): "highlight" color sets the cue
            background, "background" color sets the cue container background.
        * html/track/TextTrackCueGeneric.h:

        * platform/graphics/InbandTextTrackPrivateClient.h:

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::processCueAttributes): Process "highlight" color.

2013-05-13  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r150049): Fix RetainPtr<> type in PasteboardIOS.mm

        * platform/ios/PasteboardIOS.mm:
        (WebCore::Pasteboard::writeImage): Use RetainPtr<CFStringRef>
        instead of RetainPtr<NSString>.

2013-05-13  Benjamin Poulain  <bpoulain@apple.com>

        Remove platform/graphic's Generator
        https://bugs.webkit.org/show_bug.cgi?id=116084

        Reviewed by Darin Adler.

        The Generator no longer abstract anything useful, its only
        implementation is Gradient.

        * GNUmakefile.list.am:
        * WebCore.exp.in:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GeneratedImage.h:
        * platform/graphics/Generator.h: Removed.
        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::draw):
        (WebCore::GeneratorGeneratedImage::drawPattern):
        * platform/graphics/GeneratorGeneratedImage.h:
        (WebCore::GeneratorGeneratedImage::create):
        (WebCore::GeneratorGeneratedImage::GeneratorGeneratedImage):
        (GeneratorGeneratedImage):
        * platform/graphics/Gradient.h:
        (WebCore):
        (Gradient):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/GraphicsContext.h:
        (WebCore):
        (GraphicsContext):

2013-05-13  David Kilzer  <ddkilzer@apple.com>

        Upstream iOS Clipboard and Pasteboard changes
        <http://webkit.org/b/116062>

        Reviewed by Darin Adler.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Clipboard.h:
        * platform/Pasteboard.h:
        * platform/ios/ClipboardIOS.h: Added.
        * platform/ios/ClipboardIOS.mm: Added.
        * platform/ios/PasteboardIOS.mm: Added.

2013-05-13  Huang Dongsung  <luxtella@company100.net>

        [Mac] Use pageScaleFactor * deviceScaleFactor in requiresTiledLayer() and computePixelAlignment() of GraphicsLayerCA.
        https://bugs.webkit.org/show_bug.cgi?id=107359

        Reviewed by Darin Adler.

        Currently GraphicsLayerCA uses pageScaleFactor in requiresTiledLayer() and
        computePixelAlignment(), but we must use pageScaleFactor * deviceScaleFactor in
        them.
        It is because:
        1. requiresTiledLayer() uses the scale to compute an actual layer size in the device
        pixel unit.
        2. computePixelAlignment() uses the scale to compute an aligned layer position
        in the device pixel unit.

        No new tests. We can not test about requiresTiledLayer() because it depends on
        gpu. computePixelAlignment() is correct now because fortunately Mac uses
        only 2 (for retina display) as a deviceScaleFactor.

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

2013-05-13  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Rename BarInfo to BarProp and remove [NoInterfaceObject]
        https://bugs.webkit.org/show_bug.cgi?id=116027

        Reviewed by Andreas Kling.

        Rename BarInfo to BarProp and remove [NoInterfaceObject] extended attribute from
        the IDL interface to match the specification:
        http://www.w3.org/html/wg/drafts/html/master/browsers.html#barprop

        The new behavior also matches Firefox and Blink.

        No new tests, covered by LayoutTests/fast/js/global-constructors-attributes.html.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * page/BarProp.cpp: Renamed from Source/WebCore/page/BarInfo.cpp.
        * page/BarProp.h: Renamed from Source/WebCore/page/BarInfo.h.
        * page/BarProp.idl: Renamed from Source/WebCore/page/BarInfo.idl.
        * page/DOMWindow.cpp:
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2013-05-13  Anders Carlsson  <andersca@apple.com>

        Remove ChromeClient::willPopupMenu
        https://bugs.webkit.org/show_bug.cgi?id=116063

        Reviewed by Andreas Kling.

        Remove ChromeClient::willPopupMenu.

        * page/ChromeClient.h:

2013-05-13  Beth Dakin  <bdakin@apple.com>

        Headers and footers should be pinned to the left edge of the window when scrolling 
        horizontally
        https://bugs.webkit.org/show_bug.cgi?id=116061
        -and corresponding-
        <rdar://problem/13599215>

        Reviewed by Simon Fraser.

        The scrolling thread will need to know about the header and footer layers in order 
        the implement this custom scrolling behavior. 

        These getters will fetch the header or footer layer from the FrameView as 
        appropriate.
        * page/scrolling/ScrollingCoordinator.cpp:
        (WebCore::ScrollingCoordinator::headerLayerForFrameView):
        (WebCore::ScrollingCoordinator::footerLayerForFrameView):
        * page/scrolling/ScrollingCoordinator.h:

        When we’re scrolling on the main thread, adjust the position of the header and 
        footer layers here.
        (WebCore::ScrollingCoordinator::updateMainFrameScrollPosition):

        ScrollingStateScrollingNode now stores GraphicsLayers and PlatformLayers for the 
        header and footer, just like it already does for the counterScrollingLayer.
        * page/scrolling/ScrollingStateScrollingNode.cpp:
        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
        * page/scrolling/ScrollingStateScrollingNode.h:
        (ScrollingStateScrollingNode):
        (WebCore::ScrollingStateScrollingNode::headerLayer):
        (WebCore::ScrollingStateScrollingNode::footerLayer):

        Setters for the new layers.
        * page/scrolling/mac/ScrollingCoordinatorMac.h:
        (ScrollingCoordinatorMac):
        * page/scrolling/mac/ScrollingCoordinatorMac.mm:
        (WebCore::ScrollingCoordinatorMac::frameViewRootLayerDidChange):
        (WebCore::ScrollingCoordinatorMac::setHeaderLayerForNode):
        (WebCore::ScrollingCoordinatorMac::setFooterLayerForNode):

        These setters and getters mirror the existing one for counterScrollingLayer.
        * page/scrolling/mac/ScrollingStateScrollingNodeMac.mm:
        (WebCore::ScrollingStateScrollingNode::headerPlatformLayer):
        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
        (WebCore::ScrollingStateScrollingNode::footerPlatformLayer):
        (WebCore::ScrollingStateScrollingNode::setFooterLayer):

        And the ScrollingTree will store CALayers for the header and footer.
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
        (ScrollingTreeScrollingNodeMac):
        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):

        This is where the magic happens when we are scrolling on the scrolling thread. 
        Adjust the horizontal position the behave like a fixed object, but keep the 
        vertical position what it was when layer was created.
        (WebCore::ScrollingTreeScrollingNodeMac::setScrollLayerPosition):

        RenderLayerCompositor must now provide getters for the header and footer.
        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::headerLayer):
        (WebCore::RenderLayerCompositor::footerLayer):

        Set the anchor point for when we adjust the position later on. Also call 
        frameViewRootLayerDidChange() to get the new layers picked up and sent to the 
        scrolling tree.
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        (WebCore::RenderLayerCompositor::updateLayerForFooter):

2013-05-12  Timothy Hatcher  <timothy@apple.com>

        Add support for updating the Web Inspector toolbar height.

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

        Reviewed by Joseph Pecoraro and Benjamin Poulain.

        * inspector/InspectorFrontendClient.h:
        (InspectorFrontendClient):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setToolbarHeight):
        * inspector/InspectorFrontendHost.h:
        (InspectorFrontendHost):
        * inspector/InspectorFrontendHost.idl:
        * testing/Internals.cpp:

2013-05-13  Dean Jackson  <dino@apple.com>

        toDataURL can return an empty image in some cases
        https://bugs.webkit.org/show_bug.cgi?id=115981
        <rdar://problem/13760256>

        Reviewed by Darin Adler.

        In some accelerated rendering cases, calling toDataURL on
        an off-screen canvas produced an empty image. The solution
        was to force a CGContextFlush before extracting the data
        for image generation.

        While here, I collected the flushing code from other methods
        into a single place. Also we were getting into a situation where
        we called flush two times in a row.

        Test: fast/canvas/toDataURL-not-empty.html

        * platform/graphics/ImageBuffer.h:
        (ImageBuffer): Define two new methods flushContext and flushContextIfNecessary.
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::context): Call flushContextIfNecessary.
        (WebCore::ImageBuffer::flushContextIfNecessary): Moved the 10.7 code in here.
        (WebCore::ImageBuffer::flushContext): Calls CGContextFlush.
        (WebCore::ImageBuffer::getUnmultipliedImageData): Call new helper.
        (WebCore::ImageBuffer::getPremultipliedImageData): Call new helper.
        (WebCore::ImageBuffer::toDataURL): Flush the CG context.

2013-05-13  David Hyatt  <hyatt@apple.com>

        Regressions in flexbox layout caused by the flexing optimizations.
        https://bugs.webkit.org/show_bug.cgi?id=116058
        <rdar://problem/13863647>
        
        Reviewed by Beth Dakin.

        Roll out the flex-related changes from r149597 so that the layout
        algorithm goes back to the way it was. Leave the repainting optimizations
        in place though.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::gatherFlexChildrenInfo):
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):

2013-05-13  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, rolling out r150014.
        http://trac.webkit.org/changeset/150014
        https://bugs.webkit.org/show_bug.cgi?id=86410

        Broke video playback on WK2 and some webgl tests

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
        (WebCore::MediaPlayerPrivateGStreamerBase::paint):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (MediaPlayerPrivateGStreamerBase):

2013-05-13  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed, rolling out r150022.
        http://trac.webkit.org/changeset/150022
        https://bugs.webkit.org/show_bug.cgi?id=114044

        Causes assertions in media tests

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::prepareToPlay):
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::handleMessage):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2013-05-13  Bem Jones-Bey  <bjonesbe@adobe.com>

        Floats should not overhang from flex items
        https://bugs.webkit.org/show_bug.cgi?id=115925

        Reviewed by David Hyatt.

        Allowing floats to overhand from flex items is not only against the
        spec, it causes bad bugs. Fix this by having flex items properly avoid
        floats.

        Test: fast/block/float/float-not-removed-crash2.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::avoidsFloats): Add flex items to avoid floats.
        * rendering/RenderBox.h:
        (WebCore::RenderBox::isFlexItemIncludingDeprecated): Determine if the current box is a
            flex item or deprecated flex item.

2013-05-13  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Regions][CSS Exclusions] Shape-inside on regions should respect region borders and paddings
        https://bugs.webkit.org/show_bug.cgi?id=115456

        Reviewed by David Hyatt.

        I refactored the computation logic of shape-inside on regions by removing access to RenderFlowThread from ExclusionShapeInfo's logicalTopOffset
        function, this means all the logic is now existing in RenderBlockLineLayout.cpp. By modifying the logicalTopOffset it turned out that the borders
        and padding hadn't worked correctly, since borders and paddings were counted twice in the shape-inside's computation. This patch adds the necessary
        modifications to let it respect the borders and padding in the correct way. I created 2 new helper functions to prevent increasing the code size of
        the layoutRunsAndFloatsInRange function.

        I introduced 7 new tests to test for testing the correct behavior.

        Tests: fast/regions/shape-inside/shape-inside-on-first-region-block-content.html
               fast/regions/shape-inside/shape-inside-on-first-region-inline-content.html
               fast/regions/shape-inside/shape-inside-on-second-region-block-content.html
               fast/regions/shape-inside/shape-inside-on-second-region-inline-content.html
               fast/regions/shape-inside/shape-inside-on-regions-inline-content.html
               fast/regions/shape-inside/shape-inside-with-region-borders.html
               fast/regions/shape-inside/shape-inside-with-region-padding.html

        * rendering/ExclusionShapeInfo.cpp:
        (WebCore): Remove FlowThread logic from logicalTopOffset move definition to header.
        * rendering/ExclusionShapeInfo.h:
        (WebCore::ExclusionShapeInfo::logicalTopOffset): Moved from cpp.
        (WebCore::ExclusionShapeInfo::logicalLeftOffset): Add condition for RenderRegions. 
        * rendering/RenderBlock.h:
        (RenderBlock): Add definition to the new helper members.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutExclusionShapeInsideInfo): Modified the flow thread case to return the appropriate region.
        (WebCore::RenderBlock::updateLineBoundariesForExclusions): Added new helper function. Modify the shape-inside on regions
        line boundaries and position computation logic.
        (WebCore::RenderBlock::adjustLogicalLineTopAndLogicalHeightIfNeeded): Added new helper function which handles the flow thread case also.
        (WebCore::RenderBlock::layoutRunsAndFloatsInRange): Modified the code to use the helper functions.

2013-05-13  Bear Travis  <betravis@adobe.com>

        [css exclusions] Enable CSS Exclusions by default when CSS_EXCLUSIONS is set
        https://bugs.webkit.org/show_bug.cgi?id=115919

        Reviewed by Dean Jackson.

        Change the RuntimeEnabledFeatures::isCSSExclusionsEnabled boolean to default
        to true. CSS Exclusions can still be enabled / disabled in platforms by
        setting the CSS_EXCLUSIONS compile flag in one of the FeatureDefine files.

        Test: fast/exclusions/css-exclusions-enabled.html

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore):

2013-05-13  Suchit Agrawal  <a.suchit@samsung.com>

        Cell heights are disproportional when a row-spanning cell contains a block element that determines the height of the rows
        https://bugs.webkit.org/show_bug.cgi?id=52185

        Reviewed by David Hyatt.

        Cells heights are not proper when rowspan cell have its own height and rowspan height
        is more than the height of the rows present in rowspan.

        After calculating logical height of the rows in the table, we are recalculating the height
        of the rows present in rowspan. Based on the ratio of row's logical height, we are
        distributing rowspan cell height in rows.

        Test: fast/table/table-rowspan-height-distribution-in-rows.html

        * rendering/RenderTableSection.cpp:
        (WebCore):

        Update the logical height of the rows based on rowspan cell height.
        (WebCore::RenderTableSection::distributeRowSpanHeightToRows):

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

        Added new private API to distribute rowSpan cell height in rows.
        * rendering/RenderTableSection.h:
        (RenderTableSection):

2013-04-30  Balazs Kelemen  <b.kelemen@sisa.samsung.com>

        [GStreamer] cannot seek after video finished
        https://bugs.webkit.org/show_bug.cgi?id=114044

        Reviewed by Philippe Normand.

        Test: media/video-seek-after-end.html

        Rework the seeking logic to be able to seek after reseting the pipeline.
        In addition to solve the actual problem this patch supposed to make seeking
        more robust and correct.
        The previous implementation tried to hide the complexity of asynchronous operations
        on the pipeline. It did not handle the GST_MESSAGE_ASYNC_DONE message from the bus
        but instead reported the seek as finished when it saw an asynchronous pending state
        (GST_STATE_CHANGE_ASYNC) which could happen way before the seek is really done.
        Now we pay attention to the GST_MESSAGE_ASYNC_DONE message to track the status of seeks.
        Seeks are not the only operations executed asynchronously, changing the pipeling state is
        similar. It means a seek can overlap with onother ongoing asynchronous operation.
        This change address this by introducing an invariant for seeks, which is that we only request
        a seek if there are no other ongoing asynchronous operations and the pipeline state is either
        paused or playing (which is recommended anyway according to GStreamer's documentation).
        This way we can be sure that the time when we get the next GST_MESSAGE_ASYNC_DONE message the
        seek has been completed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::toGstClockTime): Factored time conversation into a helper.
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):

        (WebCore::MediaPlayerPrivateGStreamer::playbackPosition): The position might not be available
        if the pipeline still has a pending state. As a workaround, if we are right after a seek we can
        use the seek time. Avoiding this situation would be possible by not allowing any asynchronous
        operation to overlap. I believe it would add a lot more complexity so I decided to rather introduce
        this workaround. Otherwise those overlapping operations are handled fine by GStreamer.

        (WebCore::MediaPlayerPrivateGStreamer::prepareToPlay): Do not reset internal state variables.
        This function called when there is an intent to restart playback but it does not actually restart it.
        (WebCore::MediaPlayerPrivateGStreamer::currentTime): Just removed a staling newline.
        (WebCore::MediaPlayerPrivateGStreamer::seek): Take a look to the pipeline state and act upon that.
        If there is an ongoing asynchronous operation make the seek pending, otherwise do it now.
        Now we handle overlapping seeks as well because I saw that it can happen in some tests.
        Added an early return for live streams as it doesn't makes sense to try seeking in them.

        (WebCore::MediaPlayerPrivateGStreamer::handleMessage): Handle GST_MESSAGE_ASYNC_DONE and some refactoring.
        (WebCore::MediaPlayerPrivateGStreamer::asyncStateChangeDone):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates): Only handle seeks in the pending case, the rest is
        now handled in asyncStateChangeDone.
        (WebCore::MediaPlayerPrivateGStreamer::cacheDuration): Do not reset the m_mediaDurationKnown if the pipeline
        has an asynchronous pending state because it would fail. It does actually happen when we get a duration message
        after restarting the pipeline and it would result in restarting playback from the start. It seems to be a bug
        in GStreamer that it sends the duration message too early. Also sanitized this function by merging redundant branches.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (MediaPlayerPrivateGStreamer):

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Move writeRange/PlainText/URL from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116009

        Reviewed by Andreas Kling.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::writeRange): Added. Moved from ClipboardMac,
        but added some FIXMEs.
        (WebCore::Clipboard::writePlainText): Ditto.
        (WebCore::Clipboard::writeURL): Ditto.

        * dom/Clipboard.h: Made writeURL, writeRange, and writePlainText
        non-virtual in non-legacy clipboard implementations.

        * platform/mac/ClipboardMac.h: Removed writeRange, writeURL, and
        writePlainText.
        * platform/mac/ClipboardMac.mm: Ditto.

2013-05-13  Noam Rosenthal  <noam@webkit.org>

        [CoordGfx] requestAnimationFrame performance issues
        https://bugs.webkit.org/show_bug.cgi?id=112345

        Reviewed by Jocelyn Turcotte.

        Removed current requestAnimationFrame logic from CoordinatedGraphics. The new logic
        is entirely in WebKit2 CoordinatedLayerTreeHost.

        Covered by existing tests in fast/animations.

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

2013-05-13  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [texmap][GStreamer] Composited Video support
        https://bugs.webkit.org/show_bug.cgi?id=86410

        Reviewed by Philippe Normand.

        Enable the video accelerated compositing using the WebKit's
        TextureMapper.

        This patch does not use hardware accelerated video decoding. It
        provides a generic path for system memory buffers.

        No new tests, already covered by existing tests.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
        (WebCore):
        (WebCore::MediaPlayerPrivateGStreamerBase::updateTexture): update the
        texture content with the new received video buffer.
        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint): choose to
        use the accelerated compositing or the normal code path
        (WebCore::MediaPlayerPrivateGStreamerBase::paint): if accelerated
        compositing is used this method is halted.
        (WebCore::MediaPlayerPrivateGStreamerBase::paintToTextureMapper): get
        a texture from the pool and draws it if it is already available.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
        (MediaPlayerPrivateGStreamerBase):
        (WebCore::MediaPlayerPrivateGStreamerBase::platformLayer): returns itself
        (WebCore::MediaPlayerPrivateGStreamerBase::supportsAcceleratedRendering):
        returns true

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

        Document: Use a DeferrableOneShotTimer to throw out StyleResolver when unused.
        <http://webkit.org/b/115929>

        Reviewed by Anders Carlsson.

        Nothing exciting here, just replacing a rickety-looking punting mechanism with a proper
        DeferrableOneShotTimer. Note that the timeout changes from 60 to 30 seconds because DOST
        works by punting a full interval on next timeout.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::didAccessStyleResolver):
        (WebCore::Document::styleResolverThrowawayTimerFired):
        * dom/Document.h:
        (Document):

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

        REGRESSION(r149287): FoldingText only shows me half of my text.
        <http://webkit.org/b/115956>
        <rdar://problem/13831099>

        Reviewed by Antti Koivisto.

        Check if the FrameView geometry changed post-layout, and send a resize event if needed.
        This brings us closer to the original resize event behavior, with the exception that
        setFrameRect() still fires an event right away if possible. This means we are still
        guarded from FOUC's but frames that layout via [WebHTMLView layoutToMinimumPageWidth]
        also get resize events like they used to.

        No new tests, because I don't know how to test this.

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

            Factor out the resize event logic from setFrameRect() so we can call it from both
            there and performPostLayoutTasks(). sendResizeEventIfNeeded() only sends an event
            if view geometry or zoom factor has changed since last time it was called.

2013-05-13  Antti Koivisto  <antti@apple.com>

        Remove unneeded counters from ScopeContentDistribution.
        https://bugs.webkit.org/show_bug.cgi?id=116028

        Reviewed by Andreas Kling.

        They don't do much.

        * WebCore.exp.in:
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::ShadowRoot):
        * dom/ShadowRoot.h:
        
            No need for registration code anymore.

        * html/shadow/ContentDistributor.cpp:
        (WebCore::ScopeContentDistribution::ScopeContentDistribution):
        
            Default m_insertionPointListIsValid to true to avoid crawling when there are no InsertionPoints.

        (WebCore::ScopeContentDistribution::ensureInsertionPointList):
        (WebCore::ScopeContentDistribution::registerInsertionPoint):
        (WebCore::ScopeContentDistribution::unregisterInsertionPoint):
        * html/shadow/ContentDistributor.h:
        
            Remove distributeNodeChildrenTo, it was only used by the older/younger shadow root code.

        * testing/Internals.cpp:
        * testing/Internals.h:
        * testing/Internals.idl:

2013-05-13  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Remove unused references from projects in Visual Studio
        https://bugs.webkit.org/show_bug.cgi?id=116002

        Reviewed by Csaba Osztrogonác.

        nativeMemoryProfiler.css and NativeMemorySnapshotView.js were removed in r149807.

        No new tests, no behavior change.

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

2013-05-13  Zalan Bujtas  <zalan@apple.com>

        WebProcess consuming very high CPU on linkedin.com
        https://bugs.webkit.org/show_bug.cgi?id=115601

        Reviewed by Andreas Kling.

        Disable WEB_TIMING_MINIMAL.
        Turn off window.performance and performance.now(). Some JS frameworks expect
        additional Web Timing APIs, when performance.now() is available.

        * Configurations/FeatureDefines.xcconfig:
        * dom/EventTargetFactory.in:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::resetDOMWindowProperties):
        (WebCore):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:
        * page/Performance.cpp:
        (WebCore::Performance::timing):
        * page/Performance.h:
        (Performance):
        * page/Performance.idl:

2013-05-12  Eric Carlson  <eric.carlson@apple.com>

        REGRESSION (r149749): Video becomes invisible when it starts playing at newyorkbygehry.com
        https://bugs.webkit.org/show_bug.cgi?id=115963

        Reviewed by Dean Jackson.

        Test: media/video-remove-insert-repaints.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedInto): Set m_inActiveDocument when inserted into a document.
        (WebCore::HTMLMediaElement::removedFrom): Fix logging.

2013-05-12  David Kilzer  <ddkilzer@apple.com>

        Move sudden termination symbols to the Mac-only section

        * WebCore.exp.in: Move the sudden termination symbols to the
        !PLATFORM(IOS) section for reals this time.

2013-05-12  Darin Adler  <darin@apple.com>

        Fix Mac build.

        * platform/mac/PasteboardMac.mm: Add back include of ClipboardMac.h
        that was removed by accident a couple of patches back.

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Moved files function from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116008

        Reviewed by Anders Carlsson.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::files): Added. Moved the DOM-depdendent and
        platform-independent part of the files function in ClipboardMac here.

        * dom/Clipboard.h: Made files function non-virtual in non-legacy case.

        * platform/Pasteboard.h: Removed static member function
        absoluteURLsFromPasteboardFilenames since it can now be private to
        PasteboardMac. Added member function readFilenames.

        * platform/mac/ClipboardMac.h: Removed function member files and also
        now-unused data member m_clipboardContents.

        * platform/mac/ClipboardMac.mm: Removed files function.
        (WebCore::ClipboardMac::ClipboardMac): Removed code to initialize
        m_clipboardContents.

        * platform/mac/PasteboardMac.mm:
        (WebCore::absoluteURLsFromPasteboardFilenames): Changed from a static
        member function to a file-local function.
        (WebCore::absoluteURLsFromPasteboard): Changed to call the function
        above in its new location.
        (WebCore::Pasteboard::readFilenames): Added. Code from ClipboardMac,
        minus the DOM-specific parts. Added a FIXME about the peculiar round
        trip through NSURL this code takes.

2013-05-12  Anders Carlsson  <andersca@apple.com>

        Fix WebKit2 build.

        * WebCore.exp.in:
        Put WebCore::disableSuddenTermination and WebCore::enableSuddenTermination symbols in the right section.

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Move types function from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116007

        Reviewed by Anders Carlsson.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::types): Added. Calls through to Pasteboard
        after doing checks needed at this level.

        * dom/Clipboard.h: Made types function non-virtual in non-legacy case,
        and removed non-helpful comment.

        * platform/Pasteboard.h: Updated includes and comments at the top of
        the file a bit. Removed static member function addHTMLClipboardTypesForCocoaType,
        since it can now be private to PasteboardMac. Added member function types.

        * platform/mac/ClipboardMac.h: Removed types function.
        * platform/mac/ClipboardMac.mm: Ditto.

        * platform/mac/PasteboardMac.mm:
        (WebCore::addHTMLClipboardTypesForCocoaType): Made this a file-local
        function instead of a static member function.
        (WebCore::Pasteboard::types): Added. Moved from ClipboardMac.

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Move setData from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116006

        Reviewed by Anders Carlsson.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::setData): Added. Calls through to Pasteboard
        after doing checks needed at this level.

        * dom/Clipboard.h: Made setData non-virtual in non-legacy case.

        * platform/Pasteboard.h: Updated includes and forward declarations.
        Removed static member function cocoaTypeFromHTMLClipboardType, since
        it can now be private to PasteboardMac. Added static member function
        addHTMLClipboardTypesForCocoaType, which is shared between the
        ClipboardMac and PasteboardMac files for now. Added writeString.

        * platform/mac/ClipboardMac.h: Removed setData.

        * platform/mac/ClipboardMac.mm: Removed utiTypeFromCocoaType,
        addHTMLClipboardTypesForCocoaType, and setData.
        (WebCore::ClipboardMac::types): Call addHTMLClipboardTypesForCocoaType
        as a Pasteboard static member function, for now.

        * platform/mac/PasteboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType): Added. Moved from ClipboardMac.
        (WebCore::Pasteboard::readString): Changed to call
        cocoaTypeFromHTMLClipboardType as a file-local function, not a member
        function (in fact, we didn't need to repeat the class name before, either,
        so this is just removing something we didn't need).
        (WebCore::utiTypeFromCocoaType): Added. Moved from ClipboardMac.
        (WebCore::Pasteboard::addHTMLClipboardTypesForCocoaType): Ditto.
        (WebCore::Pasteboard::writeString): Ditto.

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Move getData from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116005

        Reviewed by Anders Carlsson.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard): Added a new boolean argument, forFileDrag,
        to the constructor. Maybe we can find a better way to do this once we move
        all the platforms over, but this boolean seems a good way to do it for now.
        (WebCore::Clipboard::getData): Added. Calls through to Pasteboard after
        doing the canReadData check, which is part of DOM rules, not the platform.
        Also checks for the file drag case like the old ClipboardMac code did.

        * dom/Clipboard.h: Made getData non-virtual in non-legacy case.

        * platform/Pasteboard.h: Added a static member function named
        absoluteURLsFromPasteboardFilenames, temporary so it can be shared between
        ClipboardMac and PasteboardMac. Added a readString public function member,
        and a m_changeCount data member. The type of m_changeCount is long since
        that can always hold an NSInteger but yet is a type we can compile without
        including the header file that defines NSInteger.

        * platform/mac/ClipboardMac.h: Removed getData.
        * platform/mac/ClipboardMac.mm: Removed getData.
        (WebCore::ClipboardMac::ClipboardMac): Added code to pass in the new
        forFileDrag boolean.
        (WebCore::ClipboardMac::files): Call absoluteURLsFromPasteboardFilenames
        as a static member function in Pasteboard since we moved it there.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::Pasteboard): Initialize the change count, so later
        pasteboard operations can check it.
        (WebCore::Pasteboard::absoluteURLsFromPasteboardFilenames): Added. Moved
        here from ClipboardMac.
        (WebCore::absoluteURLsFromPasteboard): Ditto.
        (WebCore::Pasteboard::readString): Added. Moved here from ClipboardMac.

2013-05-12  Anders Carlsson  <andersca@apple.com>

        Stop including UnusedParam.h
        https://bugs.webkit.org/show_bug.cgi?id=116003

        Reviewed by Sam Weinig.

        UnusedParam.h is empty now so there's no need to include it anymore.

        * Modules/encryptedmedia/CDMPrivateAVFoundation.mm:
        * Modules/indexeddb/IDBFactoryBackendImpl.cpp:
        * Modules/indexeddb/IDBObjectStore.cpp:
        * Modules/webdatabase/DatabaseServer.cpp:
        * Modules/webdatabase/DatabaseThread.cpp:
        * bindings/js/JSDOMWindowBase.cpp:
        * bindings/objc/DOMObject.mm:
        * css/CSSCursorImageValue.cpp:
        * css/DeprecatedStyleBuilder.cpp:
        * dom/EventDispatcher.cpp:
        * dom/Node.cpp:
        * editing/AlternativeTextController.h:
        * editing/Editor.cpp:
        * html/HTMLPlugInElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        * html/canvas/OESVertexArrayObject.h:
        * html/parser/HTMLConstructionSite.cpp:
        * html/parser/HTMLTokenizer.cpp:
        * html/track/InbandTextTrack.cpp:
        * inspector/InspectorCanvasInstrumentation.h:
        * inspector/InspectorConsoleInstrumentation.h:
        * inspector/InspectorController.cpp:
        * inspector/InspectorCounters.h:
        * inspector/InspectorDatabaseInstrumentation.h:
        * inspector/InspectorInstrumentation.h:
        * loader/DocumentThreadableLoader.cpp:
        * loader/PingLoader.cpp:
        * loader/appcache/ApplicationCacheGroup.cpp:
        * loader/cache/CachedResourceLoader.cpp:
        * loader/mac/DocumentLoaderMac.cpp:
        * page/ChromeClient.h:
        * page/Console.cpp:
        * page/FrameView.cpp:
        * page/PageConsole.cpp:
        * page/animation/AnimationController.cpp:
        * page/animation/ImplicitAnimation.cpp:
        * page/animation/KeyframeAnimation.cpp:
        * platform/LocalizedStrings.cpp:
        * platform/ScrollAnimator.h:
        * platform/ThreadGlobalData.cpp:
        * platform/blackberry/AsyncFileSystemBlackBerry.cpp:
        * platform/graphics/Font.cpp:
        * platform/graphics/GlyphBuffer.h:
        * platform/graphics/Gradient.cpp:
        * platform/graphics/ShadowBlur.cpp:
        * platform/graphics/SimpleFontData.cpp:
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        * platform/graphics/blackberry/GradientBlackBerry.cpp:
        * platform/graphics/blackberry/GraphicsContextBlackBerry.cpp:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        * platform/graphics/ca/mac/WebTileLayer.mm:
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        * platform/graphics/cg/ImageSourceCG.cpp:
        * platform/graphics/clutter/PlatformClutterAnimation.cpp:
        * platform/graphics/filters/ValidatedCustomFilterOperation.cpp:
        * platform/graphics/gstreamer/GStreamerVersioning.cpp:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/mac/SimpleFontDataMac.mm:
        * platform/graphics/mac/WebGLLayer.mm:
        * platform/graphics/mac/WebLayer.mm:
        * platform/graphics/mac/WebTiledLayer.mm:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        * platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        * platform/graphics/texmap/TextureMapper.h:
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        * platform/mac/PasteboardMac.mm:
        * platform/mac/ScrollAnimatorMac.mm:
        * platform/mac/ScrollViewMac.mm:
        * platform/mac/ScrollbarThemeMac.mm:
        * platform/mac/SharedTimerMac.mm:
        * platform/mac/WebCoreFullScreenPlaceholderView.mm:
        * platform/mac/WebCoreObjCExtras.mm:
        * platform/mac/WebFontCache.mm:
        * platform/mac/WebVideoFullscreenController.mm:
        * platform/mac/WebVideoFullscreenHUDWindowController.mm:
        * platform/mac/WebWindowAnimation.mm:
        * platform/network/blackberry/CredentialStorageBlackBerry.cpp:
        * platform/network/cf/ResourceErrorCF.cpp:
        * platform/network/mac/CookieStorageMac.mm:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/win/ResourceHandleWin.cpp:
        * platform/text/TextEncodingDetectorICU.cpp:
        * rendering/RenderFlowThread.h:
        * rendering/RenderImage.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderTreeAsText.cpp:
        * rendering/svg/RenderSVGResourceClipper.cpp:
        * rendering/svg/RenderSVGResourceFilter.cpp:
        * rendering/svg/RenderSVGResourceGradient.cpp:
        * rendering/svg/RenderSVGResourceMasker.cpp:
        * rendering/svg/SVGRenderSupport.cpp:
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp:
        * workers/WorkerContext.cpp:
        * workers/WorkerScriptLoader.cpp:
        * xml/XMLHttpRequest.cpp:
        * xml/parser/XMLDocumentParserLibxml2.cpp:

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Move clearAllData from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116001

        Reviewed by Andreas Kling.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::clearAllData): Added. Calls through to Pasteboard after
        doing the canWriteData check, which is part of DOM rules, not the platform.

        * dom/Clipboard.h: Made clearAllData non-virtual in non-legacy case.

        * platform/mac/ClipboardMac.h: Removed clearAllData.
        * platform/mac/ClipboardMac.mm: Ditto.

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Move clearData from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=116000

        Reviewed by Andreas Kling.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::clearData): Added. Calls through to Pasteboard after
        doing the canWriteData check, which is part of DOM rules, not the platform.

        * dom/Clipboard.h: Made clearData non-virtual in non-legacy case.

        * platform/Pasteboard.h: Added an overload of the clear function that takes
        a single type and clears only that type. Also temporarily exported the
        cocoaTypeFromHTMLClipboardType function as a static member so it can be used
        in both ClipboardMac and PasteboardMac during the transition.

        * platform/mac/ClipboardMac.h: Removed clearData.
        * platform/mac/ClipboardMac.mm: Removed clearData.
        (WebCore::ClipboardMac::getData): Changed to call cocoaTypeFromHTMLClipboardType
        as a Pasteboard class static member function.
        (WebCore::ClipboardMac::setData): Ditto.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::cocoaTypeFromHTMLClipboardType): Moved here from
        ClipboardMac.
        (WebCore::Pasteboard::clear): Added. Moved here from ClipboardMac.

2013-05-12  Darin Adler  <darin@apple.com>

        [Mac] Move hasData from ClipboardMac to PasteboardMac
        https://bugs.webkit.org/show_bug.cgi?id=115999

        Reviewed by Andreas Kling.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::hasData): Added. Calls through to Pasteboard.

        * dom/Clipboard.h: Added LEGACY_VIRTUAL and LEGACY_PURE macros,
        only for within this header file. These help us keep many functions
        as pure virtual in the legacy style Clipboard class, but have them
        be non-virtual in the normal/future style. Use LEGACY_VIRTUAL and
        LEGACY_PURE to make the hasData member non-virtual.

        * platform/Pasteboard.h: Added hasData, and added some blank lines and a FIXME.

        * platform/mac/ClipboardMac.h: Removed hasData override.
        * platform/mac/ClipboardMac.mm: Ditto.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::hasData): Added. Moved code here from ClipboardMac.

2013-05-12  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r149971): sudden termination is a Mac-only concept

        * WebCore.exp.in: Move sudden termination symbols to Mac-only
        section.

2013-05-12  Andreas Kling  <akling@apple.com>

        Node: Use FINAL instead of the non-virtual shadowing hack.
        <http://webkit.org/b/115995>

        Reviewed by Anders Carlsson.

        Decorate Element/Attr implementations of prefix/localName/namespaceURI getters with FINAL
        so that call sites with a more specific pointer type than Node* can avoid the virtual dispatch.

        * dom/Attr.h:
        * dom/Element.h:
        * dom/Node.cpp:
        * dom/Node.h:

2013-05-11  Darin Adler  <darin@apple.com>

        [Mac] Give every Clipboard an underlying Pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=115979

        Reviewed by Andreas Kling.

        This is the first step in Clipboard and Pasteboard refactoring
        to fix the overlap and many layering violations.

        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard): Add an m_pasteboard data member,
        Mac-only for now, but eventually for all platforms.
        (WebCore::Clipboard::~Clipboard): No longer inline the destructor.

        * dom/Clipboard.h: Add WTF_USE_LEGACY_STYLE_ABSTRACT_CLIPBOARD_CLASS
        flag, currently true for all non-Mac platforms. Make the constructor
        no longer inline. Added a PassOwnPtr<Pasteboard> argument to the
        constructor and an OwnPtr<Pasteboard> data member.

        * platform/Pasteboard.h: Added a create function to make it easy
        to create a pasteboard given a pasteboard name.

        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::ClipboardMac): Create a pasteboard and pass
        it to the Clipboard constructor.

        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::create): Added.

2013-05-12  Andreas Kling  <akling@apple.com>

        Unload event listeners should prevent Safari from insta-killing the web process on last tab close.
        <http://webkit.org/b/115988>
        <rdar://problem/13870943>

        Reviewed by Anders Carlsson.

        Add two methods to Chrome (and ChromeClient):

            - enableSuddenTermination()
            - disableSuddenTermination()

        ..and call these from DOMWindow instead of the free global functions.

        For WebKit1, it just calls the NSProcessInfo methods to keep behavior the same.
        For WebKit2, the new methods plumb through the information to the UI process.

        Also updated the DOMWindow logic to think in terms of per-DOMWindow sudden termination counters
        instead of a process-global one, since that gets confusing in a WK2 world.
        When a DOMWindow transitions between having/not having unload/beforeunload event listeners,
        we send a notification to the Chrome.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Chrome.h:
        (WebCore::Chrome::enableSuddenTermination):
        (WebCore::Chrome::disableSuddenTermination):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::enableSuddenTermination):
        (WebCore::ChromeClient::disableSuddenTermination):
        * page/DOMWindow.cpp:
        (WebCore::addUnloadEventListener):
        (WebCore::removeUnloadEventListener):
        (WebCore::removeAllUnloadEventListeners):
        (WebCore::addBeforeUnloadEventListener):
        (WebCore::removeBeforeUnloadEventListener):
        (WebCore::removeAllBeforeUnloadEventListeners):
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents):
        (WebCore::DOMWindow::dispatchAllPendingUnloadEvents):
        (WebCore::DOMWindow::enableSuddenTermination):
        (WebCore::DOMWindow::disableSuddenTermination):
        * page/DOMWindow.h:
        (DOMWindow):

2013-05-12  Anders Carlsson  <andersca@apple.com>

        Remove Complex.h from WTF
        https://bugs.webkit.org/show_bug.cgi?id=115989

        Reviewed by Beth Dakin.

        Replace Complex declarations with std::complex<double>. Pass by value since the struct
        is small enough to go into two registers on X86-64.

        * Modules/webaudio/RealtimeAnalyser.cpp:
        (WebCore::RealtimeAnalyser::doFFTAnalysis):
        (WebCore::RealtimeAnalyser::getFloatFrequencyData):
        (WebCore::RealtimeAnalyser::getByteFrequencyData):
        (WebCore::RealtimeAnalyser::getByteTimeDomainData):
        * platform/audio/Biquad.cpp:
        (WebCore::Biquad::setZeroPolePairs):
        (WebCore::Biquad::setAllpassPole):
        (WebCore::Biquad::getFrequencyResponse):
        * platform/audio/Biquad.h:
        * platform/audio/FFTFrame.cpp:
        (WebCore::FFTFrame::interpolateFrequencyComponents):
        (WebCore::FFTFrame::extractAverageGroupDelay):
        (WebCore::FFTFrame::addConstantGroupDelay):

2013-05-12  Simon Fraser  <simon.fraser@apple.com>

        Dropdowns on http://www.exploratorium.edu don't show anything
        https://bugs.webkit.org/show_bug.cgi?id=115991

        Reviewed by Dan Bernstein.
        
        We can't optimize away the backing store of a layer by saying that
        it paints into a composited ancestor if its composited bounds are not contained
        by that ancestor.

        Test: compositing/backing/no-backing-for-clip-overhang.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Pass in our 
        previously computed composited bounds relative to our composited ancestor,
        and its composited bounds.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresOwnBackingStore): If the ancestor's
        composited bounds don't contain the layer's composited bounds, the layer
        needs its own backing store.
        * rendering/RenderLayerCompositor.h:

2013-05-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r149955.
        http://trac.webkit.org/changeset/149955
        https://bugs.webkit.org/show_bug.cgi?id=115990

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

        * WebCore.exp.in:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        (InlineTextBox):
        * rendering/RenderApplet.h:
        * rendering/RenderBR.h:
        * rendering/RenderBlock.h:
        (RenderBlock):
        (WebCore::RenderBlock::virtualContinuation):
        (WebCore::RenderBlock::virtualChildren):
        (WebCore::RenderBlock::isRenderBlock):
        (WebCore::RenderBlock::isBlockFlow):
        (WebCore::RenderBlock::isInlineBlockOrInlineTable):
        (WebCore::RenderBlock::dirtyLinesFromChangedChild):
        (WebCore::RenderBlock::collapsedMarginBefore):
        (WebCore::RenderBlock::collapsedMarginAfter):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::borderBoundingBox):
        (RenderBox):
        (WebCore::RenderBox::marginLogicalLeft):
        (WebCore::RenderBox::marginLogicalRight):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::isBoxModelObject):
        * rendering/RenderButton.h:
        * rendering/RenderCombineText.h:
        * rendering/RenderCounter.h:
        * rendering/RenderDeprecatedFlexibleBox.h:
        * rendering/RenderDetailsMarker.h:
        * rendering/RenderEmbeddedObject.h:
        (RenderEmbeddedObject):
        (WebCore::RenderEmbeddedObject::isEmbeddedObject):
        (WebCore::RenderEmbeddedObject::virtualChildren):
        * 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:
        (RenderImage):
        (WebCore::RenderImage::isRenderImage):
        * rendering/RenderInline.h:
        (RenderInline):
        (WebCore::RenderInline::virtualContinuation):
        (WebCore::RenderInline::virtualChildren):
        (WebCore::RenderInline::isRenderInline):
        (WebCore::RenderInline::layout):
        (WebCore::RenderInline::requiresLayer):
        (WebCore::RenderInline::offsetWidth):
        (WebCore::RenderInline::offsetHeight):
        (WebCore::RenderInline::borderBoundingBox):
        (WebCore::RenderInline::dirtyLinesFromChangedChild):
        * rendering/RenderLayerModelObject.h:
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.h:
        * rendering/RenderMedia.h:
        (WebCore::RenderMedia::virtualChildren):
        (WebCore::RenderMedia::canHaveChildren):
        (WebCore::RenderMedia::isMedia):
        (WebCore::RenderMedia::isImage):
        (WebCore::RenderMedia::requiresForcedStyleRecalcPropagation):
        * rendering/RenderMediaControlElements.h:
        * rendering/RenderMenuList.h:
        * rendering/RenderMeter.h:
        * rendering/RenderMultiColumnBlock.h:
        * rendering/RenderMultiColumnFlowThread.h:
        * rendering/RenderMultiColumnSet.h:
        * rendering/RenderNamedFlowThread.h:
        * rendering/RenderPart.h:
        (RenderPart):
        (WebCore::RenderPart::isRenderPart):
        (WebCore::RenderPart::renderName):
        * rendering/RenderProgress.h:
        * rendering/RenderRegion.h:
        (WebCore::RenderRegion::isRenderRegion):
        * rendering/RenderRegionSet.h:
        * rendering/RenderReplaced.h:
        (RenderReplaced):
        (WebCore::RenderReplaced::renderName):
        * rendering/RenderReplica.h:
        * rendering/RenderRuby.h:
        * rendering/RenderRubyBase.h:
        * rendering/RenderRubyRun.h:
        * rendering/RenderRubyText.h:
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSearchField.h:
        * rendering/RenderSlider.h:
        * rendering/RenderSnapshottedPlugIn.h:
        (RenderSnapshottedPlugIn):
        * rendering/RenderTable.h:
        (RenderTable):
        (WebCore::RenderTable::renderName):
        (WebCore::RenderTable::isTable):
        (WebCore::RenderTable::avoidsFloats):
        * rendering/RenderTableCaption.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.h:
        (RenderText):
        (WebCore::RenderText::marginLeft):
        (WebCore::RenderText::marginRight):
        (WebCore::RenderText::styleWillChange):
        (WebCore::RenderText::length):
        (WebCore::RenderText::paint):
        (WebCore::RenderText::layout):
        * rendering/RenderTextControl.h:
        (RenderTextControl):
        (WebCore::RenderTextControl::renderName):
        (WebCore::RenderTextControl::isTextControl):
        (WebCore::RenderTextControl::avoidsFloats):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.h:
        (RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::isTextField):
        * rendering/RenderTextFragment.h:
        * rendering/RenderTextTrackCue.h:
        * rendering/RenderVideo.h:
        * rendering/RenderView.h:
        * rendering/RenderWidget.h:
        (RenderWidget):
        (WebCore::RenderWidget::isWidget):
        * rendering/RenderWordBreak.h:
        * rendering/RootInlineBox.h:
        (RootInlineBox):
        * rendering/mathml/RenderMathMLBlock.h:
        * rendering/svg/RenderSVGBlock.h:
        (RenderSVGBlock):
        * rendering/svg/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::setNeedsBoundariesUpdate):
        (WebCore::RenderSVGContainer::virtualChildren):
        (WebCore::RenderSVGContainer::isSVGContainer):
        (WebCore::RenderSVGContainer::renderName):
        (RenderSVGContainer):
        (WebCore::RenderSVGContainer::objectBoundingBox):
        (WebCore::RenderSVGContainer::strokeBoundingBox):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/svg/RenderSVGEllipse.h:
        * rendering/svg/RenderSVGForeignObject.h:
        * rendering/svg/RenderSVGGradientStop.h:
        * rendering/svg/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::renderName):
        (RenderSVGHiddenContainer):
        (WebCore::RenderSVGHiddenContainer::isSVGHiddenContainer):
        * rendering/svg/RenderSVGImage.h:
        * rendering/svg/RenderSVGInline.h:
        (WebCore::RenderSVGInline::renderName):
        (WebCore::RenderSVGInline::requiresLayer):
        (WebCore::RenderSVGInline::isSVGInline):
        (RenderSVGInline):
        * rendering/svg/RenderSVGInlineText.h:
        * rendering/svg/RenderSVGModelObject.h:
        (WebCore::RenderSVGModelObject::requiresLayer):
        (RenderSVGModelObject):
        * rendering/svg/RenderSVGPath.h:
        * rendering/svg/RenderSVGRect.h:
        * rendering/svg/RenderSVGResourceClipper.h:
        * rendering/svg/RenderSVGResourceContainer.h:
        (RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::isSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::toRenderSVGResourceContainer):
        * rendering/svg/RenderSVGResourceFilter.h:
        * rendering/svg/RenderSVGResourceFilterPrimitive.h:
        * rendering/svg/RenderSVGResourceGradient.h:
        (RenderSVGResourceGradient):
        (WebCore::RenderSVGResourceGradient::resourceBoundingBox):
        * 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:
        (WebCore::RenderSVGShape::setNeedsBoundariesUpdate):
        (WebCore::RenderSVGShape::setNeedsTransformUpdate):
        (WebCore::RenderSVGShape::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGShape::localToParentTransform):
        (WebCore::RenderSVGShape::localTransform):
        (WebCore::RenderSVGShape::isSVGShape):
        (RenderSVGShape):
        (WebCore::RenderSVGShape::objectBoundingBox):
        (WebCore::RenderSVGShape::strokeBoundingBox):
        * rendering/svg/RenderSVGTSpan.h:
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/RenderSVGTextPath.h:
        * rendering/svg/RenderSVGTransformableContainer.h:
        * rendering/svg/RenderSVGViewportContainer.h:

2013-05-12  Anders Carlsson  <andersca@apple.com>

        Simplify AutodrainedPool
        https://bugs.webkit.org/show_bug.cgi?id=115986

        Reviewed by Andreas Kling.

        Remove calls to AutodrainedPool::cycle as well as the iteration counter passed to the constructor.
        Instead, just declare RAII pools where it seems necessary.

        * Modules/webdatabase/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        * fileapi/FileThread.cpp:
        (WebCore::FileThread::runLoop):
        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::setIconDataForIconURL):
        (WebCore::IconDatabase::performURLImport):
        (WebCore::IconDatabase::readFromDatabase):

2013-05-12  Andreas Kling  <akling@apple.com>

        Apply FINAL to the Node hierarchy.
        <http://webkit.org/b/115984>

        Mostly from Blink r149454 by <cevans@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=149454>

        A couple of the stable DOM/ microbenchmarks are perf positive on Linux clang:

            - CloneNodes time reduced from 162.4 to 156.5 ms.
            - CreateNodes time reduced from 113.9 to 104.9 ms.

        * dom/: Beat things with the FINAL stick.
        * html/: Ditto.
        * svg/: Ditto.

2013-05-12  Andreas Kling  <akling@apple.com>

        Devirtualize some things on Document.

        From Blink r149967 by <esprehn@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=149967>

        Several methods on Document are virtual but don't override a super class method
        and don't need to be virtual. This patch devirtualizes:

            - createElementNS()
            - finishedParsing()
            - suspendScriptedAnimationControllerCallbacks()
            - resumeScriptedAnimationControllerCallbacks()

        It also removes the suspend and resume callbacks from ScriptExecutionContext
        since they didn't need to be there.

        * dom/Document.h:
        * dom/ScriptExecutionContext.h:

2013-05-12  Andreas Kling  <akling@apple.com>

        Remove redundant call to removeAllEventListeners() in Document::open().

        From Blink r150175 by <dcheng@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=150175>

        Document::open() already calls Document::removeAllEventListeners(), which
        removes the event listeners from the DOMWindow it's attached to, so
        there's no need to do it manually here as well.

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

2013-05-12  Andreas Kling  <akling@apple.com>

        Apply FINAL to the RenderObject hierarchy.
        <http://webkit.org/b/115977>

        Mostly from Blink r148795 by <cevans@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=148795>

        * rendering/: Beat things with the FINAL stick.
        * WebCore.exp.in: Export a now-needed symbol.

2013-05-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GTK_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115914

        Reviewed by Martin Robinson.

        * platform/graphics/gtk/FullscreenVideoControllerGtk.cpp:
        (WebCore::FullscreenVideoControllerGtk::hideHud):
        (WebCore::FullscreenVideoControllerGtk::initializeWindow):
        * platform/gtk/GtkVersioning.c:
        * platform/gtk/GtkVersioning.h:
        * platform/gtk/WidgetRenderingContext.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext):
        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_realize):

2013-05-11  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build fix after r149932

        * make-export-file-generator: Don't attempt to import
        (or use) non-existent cxxabi functions on Windows.

2013-05-11  Simon Fraser  <simon.fraser@apple.com>

        Add more info to compositing log channel output
        https://bugs.webkit.org/show_bug.cgi?id=115978

        Reviewed by Dean Jackson.

        Add to compositing log channel output whether a layer paints
        into its compositing ancestor.

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

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

        REGRESSION: Fixed background on ColterReed.com scrolls
        https://bugs.webkit.org/show_bug.cgi?id=115951

        Reviewed by Beth Dakin.
        
        The logic for painting the fixed root background into its own layer was
        broken when the document element's layer was composited. This could be caused
        by a negative z-index child of the body, or by an explicit compositing-causing
        style on the <html>.
        
        There were two issues. First, when painting the layer for the fixed root
        background, we would simply short-circuit the fixed background paint in
        RenderLayer::paintLayer(), when checking for a composited layer. We have
        to continue to paint through the composited <html> layer to get the root
        background in this case.
        
        Secondly, RenderLayerBacking::paintIntoLayer() would only set the PaintLayerPaintingSkipRootBackground
        flag if this RenderLayerBacking had a m_backgroundLayer. However, when the <html> is
        composited, we need to skip painting the root layer for both the RenderView's backing,
        and for the <html>'s backing. Checking whether there is *any* layer that paints
        the fixed root background (i.e. checking compositor()->fixedRootBackgroundLayer())
        is a simple way to fix this test.

        Tests: platform/mac-wk2/tiled-drawing/fixed-background/fixed-background-composited-html.html
               platform/mac-wk2/tiled-drawing/fixed-background/fixed-background-negative-z-index-fixed.html

        * rendering/RenderLayer.cpp:
        (WebCore::paintForFixedRootBackground):
        (WebCore::RenderLayer::paintLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2013-05-11  Simon Fraser  <simon.fraser@apple.com>

        Possible crash when going Back while loading PDF
        https://bugs.webkit.org/show_bug.cgi?id=115972

        Reviewed by Dan Bernstein.

        It's possible for m_frame to be null when Document::findUnsafeParentScrollPropagationBoundary()
        is called, so null-check currentFrame.

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

2013-05-11  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13823864> TextCodecICU complains about ambiguous codec names with current ICU release
        https://bugs.webkit.org/show_bug.cgi?id=115953

        Reviewed by Darin Adler.

        Store and use canonical converter name to create converters.

        As a side effect, we now actually reuse cached converters - previously we would compare
        a standard encoding name to internal canonical one, which rarely match.

        * platform/text/TextCodecICU.h:
        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::create): Pass canonical ICU converter name to constructor.
        (WebCore::TextCodecICU::registerEncodingNames): 
            - Updated terminology.
            - Added a comment that special cases should be kept in sync between registerEncodingNames
            and registerCodecs.
            - Moved maccyrillic alias to a correct section. It's not present in ICU even today.
            - Changed a few aliases to actually map to standard name, not to an overridden one
            (this doesn't change behavior since addToTextEncodingNameMap looks up canonical
            name, but is clearer).
        (WebCore::TextCodecICU::registerCodecs): Store a converter name to use with each
        canonical encoding name.
        (WebCore::TextCodecICU::TextCodecICU): Ditto.
        (WebCore::TextCodecICU::releaseICUConverter): Reset the converter to remove any
        leftover data.
        (WebCore::TextCodecICU::createICUConverter): 
            - Compare converter name to converter name, not to another alias name.
            - Use proper string comparison instead of pointer comparison.
            - When creating a converter, assert that the name is not ambigous - canonical
            converter names should never be, otherwise there would be no way to create
            the converter without ambiguity.

2013-05-11  Antoine Quint  <graouts@apple.com>

        [Mac] The captions menu should not use a canned max-width and max-height
        https://bugs.webkit.org/show_bug.cgi?id=115968

        Reviewed by Eric Carlson.

        Use more real estate to display the captions menu should the caption names
        be long.

        * css/mediaControlsQuickTime.css:
        (video::-webkit-media-controls-closed-captions-container):
        (video::-webkit-media-controls-closed-captions-track-list):
        Make the captions menu scale to a max-width and max-height to allow 4px
        above and below the menu, except on the right where it always aligns with
        the captions icon in the media controller.
        * html/shadow/MediaControlsApple.cpp:
        (WebCore::MediaControlsApple::createControls):
        Move the captions menu element to be a child of the controls instead of
        the panel such that it may scale relative to the controls when using %
        CSS values.

2013-05-11  Jochen Eisinger  <jochen@chromium.org>

        Disallow a window to focus itself via javascript URLs or using target _self
        https://bugs.webkit.org/show_bug.cgi?id=115906

        Reviewed by Geoffrey Garen.

        Test: fast/dom/Window/window-focus-self.html

        * loader/FrameLoader.cpp:
        (WebCore::createWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::focus):

2013-05-11  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Fix several style warnings in generated bindings
        https://bugs.webkit.org/show_bug.cgi?id=115961

        Reviewed by Kentaro Hara.

        Fix several style errors in the bindings generated under
        Source/WebCore/bindings/scripts/test/

        No new tests, no behavior change.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateImplementation):
        (WriteData):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        (GenerateImplementation):
        (WriteData):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        * bindings/scripts/test/CPP/WebDOMFloat64Array.cpp:
        * bindings/scripts/test/CPP/WebDOMTestActiveDOMObject.cpp:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        * bindings/scripts/test/CPP/WebDOMTestCustomNamedGetter.cpp:
        * bindings/scripts/test/CPP/WebDOMTestEventConstructor.cpp:
        * bindings/scripts/test/CPP/WebDOMTestEventTarget.cpp:
        * bindings/scripts/test/CPP/WebDOMTestException.cpp:
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp:
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/CPP/WebDOMTestNamedConstructor.cpp:
        * bindings/scripts/test/CPP/WebDOMTestNode.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestOverloadedConstructors.cpp:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.cpp:
        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
        (WebCore::JSTestActiveDOMObject::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
        (WebCore::JSTestCustomNamedGetter::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventConstructor.h:
        (WebCore::JSTestEventConstructor::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestEventTarget.h:
        (WebCore::JSTestEventTarget::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestException.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestException.h:
        (WebCore::JSTestException::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterface::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
        (WebCore::JSTestMediaQueryListListener::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
        (WebCore::JSTestNamedConstructor::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObj::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
        (WebCore::JSTestOverloadedConstructors::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (WebCore::JSTestSerializedScriptValueInterface::releaseImplIfNotNull):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::toJS):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        (WebCore::JSTestTypedefs::releaseImplIfNotNull):
        * bindings/scripts/test/ObjC/DOMFloat64ArrayInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestActiveDOMObjectInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestCallbackInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestCustomNamedGetterInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestEventConstructorInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestEventTargetInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestExceptionInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestInterfaceInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListenerInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestNamedConstructorInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestNodeInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestObjInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestOverloadedConstructorsInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterfaceInternal.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestTypedefsInternal.h:
        (WebCore):

2013-05-11  Anders Carlsson  <andersca@apple.com>

        Make it a build error to put invalid C++ symbol names in WebCore.exp.in
        https://bugs.webkit.org/show_bug.cgi?id=115958

        Reviewed by Andreas Kling.

        While invalid C++ symbols will eventually show up as a link error since the symbol won't be found,
        this makes it easier to catch invalid symbols inside of #ifdefs.

        * make-export-file-generator:
        Try to demangle C++ symbols before printing them.

2013-05-11  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r149718): Move exported symbol into ENABLE(FULLSCREEN_API) section

        Fixes the following build failure when ENABLE(FULLSCREEN_API) is
        off:

            Undefined symbols for architecture i386:
              "__ZNK7WebCore7Element25containsFullScreenElementEv", referenced from:
                 -exported_symbol[s_list] command line option

        * WebCore.exp.in: Move the symbol.

2013-05-11  Robert Hogan  <robert@webkit.org>

        Unreviewed, remove some lint accidentally left in r149929.

        * rendering/InlineFlowBox.cpp:
        (WebCore::verticalAlignApplies):

2013-03-17  Robert Hogan  <robert@webkit.org>

        Text flow broken in elements with vertical align top/bottom and inline elements taller than line-height
        https://bugs.webkit.org/show_bug.cgi?id=111974

        Reviewed by Ryosuke Niwa.
        
        Per http://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align 'vertical-align' only applies to inline and table-cell
        elements.

        Test: fast/css/vertical-align-block-elements.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::isTextInBlockElement):
        (WebCore):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):

2013-05-11  Benjamin Poulain  <bpoulain@apple.com>

        Make CanvasStyle a plain object instead of an RefCounted object
        https://bugs.webkit.org/show_bug.cgi?id=115775

        Reviewed by Andreas Kling.

        CanvasStyle is just 2 words wide. We do not gain anything from allocating
        it on the heap. Change the object to be just a type and some data.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toJS):
        (WebCore::toHTMLCanvasStyle):
        * html/HTMLCanvasElement.cpp:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        (WebCore::CanvasRenderingContext2D::fullCanvasCompositedFill):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::strokeStyle):
        (CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::fillStyle):
        (State):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::CanvasStyle::createFromString):
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        (WebCore::CanvasStyle::isEquivalentColor):
        (WebCore):
        (WebCore::CanvasStyle::operator=):
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/canvas/CanvasStyle.h:
        (CanvasStyle):
        (WebCore::CanvasStyle::isValid):
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore):
        (WebCore::CanvasStyle::operator=):

2013-05-11  Benjamin Poulain  <benjamin@webkit.org>

        Gradient::platformGradient: Vector reserveCapacity -> reserveInitialCapacity
        https://bugs.webkit.org/show_bug.cgi?id=115779

        Reviewed by Andreas Kling.

        * platform/graphics/cg/GradientCG.cpp:
        (WebCore::Gradient::platformGradient): Clang is surprisingly smart at removing
        all the branches of this function. Remove two more with reserveInitialCapacity.

2013-05-10  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13666412> Clean up some edge cases of URL parsing.
        https://bugs.webkit.org/show_bug.cgi?id=104919

        Reviewed by Darin Adler.

        Test: fast/url/segments-userinfo-vs-host.html

        * page/SecurityOrigin.cpp:
        (WebCore::schemeRequiresHost):
        (WebCore::shouldTreatAsUniqueOrigin):
        Updated function name and comments (host is not the same as authority). We still
        need this check - KURL can still produce http URLs with an empty host (even as this
        patch reduces the number of such cases). So can Gecko and current draft of URL
        Standard.
        It would be good to have a guarantee that such useless URLs can not come out of
        URL parser, as relying on downstream code re-parsing the URL correctly would be fragile.

        * platform/KURL.cpp:
        (WebCore::hostPortIsEmptyButCredentialsArePresent): Updated an argument name for
        correctness.
        (WebCore::KURL::parse):
        1. Reverted behavior changes from <http://trac.webkit.org/changeset/82181> - I could
        find no reason to allow "@" in hostnames, and having a URL like this re-parsed by
        a different parser would likely produce different results. It's better to just treat
        these edge case URLs as invalid.
        2. When hostname component is a lone colon, preserve it in parsed URL string,
        as otherwise path would get pushed in its place when re-parsing.
        3. When authority component is a lone colon, don't forget to "//" after scheme, too.
        4. Added some assertions about contents of authority component, to catch potential
        mis-parsing earlier.

2013-05-10  Alexey Proskuryakov  <ap@apple.com>

        Make TextCodecICU not depend on TextEncoding
        https://bugs.webkit.org/show_bug.cgi?id=115848

        Reviewed by Darin Adler.

        * platform/text/TextCodecICU.cpp:
        (WebCore::TextCodecICU::create):
        (WebCore::TextCodecICU::TextCodecICU):
        (WebCore::TextCodecICU::createICUConverter):
        (WebCore::TextCodecICU::decode):
        (WebCore::TextCodecICU::encode):
        * platform/text/TextCodecICU.h:
        Use a plain encoding string in platform encoder wrapper, not a higher level concept.

2013-05-10  Laszlo Gombos  <l.gombos@samsung.com>

        Remove Mac OS X Leopard (10.5) support
        https://bugs.webkit.org/show_bug.cgi?id=107964

        Reviewed by Ryosuke Niwa.

        Removed the code for 10.5 and removed if-def for 10.6.

        No new tests, covered by existing tests.

        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagLookUpInDictionary):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/mac/EmptyProtocolDefinitions.h:
        * platform/mac/NSScrollerImpDetails.h:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/text/mac/HyphenationMac.mm:

2013-05-10  Laszlo Gombos  <l.gombos@samsung.com>

        Remove USE(OS_RANDOMNESS)
        https://bugs.webkit.org/show_bug.cgi?id=108095

        Reviewed by Darin Adler.

        Remove the USE(OS_RANDOMNESS) guard as it is turned on for all
        ports.

        No new tests as this is covered by existing tests.

        * page/Crypto.cpp:
        (WebCore::Crypto::getRandomValues):
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):

2013-05-10  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove [NoInterfaceObject] from several WebAudio IDL interfaces
        https://bugs.webkit.org/show_bug.cgi?id=115894

        Reviewed by Darin Adler.

        Several WebAudio IDL interfaces had [NoInterfaceObject] extended attribute set,
        meaning that there was no corresponding attribute on the global window object.
        This behavior is not according to the specification:
        https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html

        This patch removes the [NoInterfaceObject] extended attribute where needed to
        match the specification.

        No new tests, already covered by existing tests.

        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioDestinationNode.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/ChannelSplitterNode.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/DelayNode.idl:
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/GainNode.idl:
        * Modules/webaudio/MediaElementAudioSourceNode.idl:
        * Modules/webaudio/MediaStreamAudioDestinationNode.idl:
        * Modules/webaudio/MediaStreamAudioSourceNode.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/ScriptProcessorNode.idl:
        * Modules/webaudio/WaveShaperNode.idl:
        * Modules/webaudio/WaveTable.idl:

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

        REGRESSION (r145680): No box shadow rendered on element with positioned child that obscures it
        https://bugs.webkit.org/show_bug.cgi?id=115840

        Reviewed by Antti Koivisto.
        
        In r107836, we moved some box-shadow painting into the paintFillLayer code for performance.
        However, in r145680 we started to skip background painting when we know the background is
        obscured. This broke shadow painting in some cases.
        
        Fix by always painting the background fill layers if we know that they will also
        paint the shadow.

        Test: fast/box-shadow/box-shadow-obscured-backgrounds.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintBackground):

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

        REGRESSION (r143626): Element shows as garbage in image gallery
        https://bugs.webkit.org/show_bug.cgi?id=115946

        Reviewed by Antti Koivisto.
        
        RenderLayer::backgroundIsKnownToBeOpaqueInRect() used hasVisibleContent()
        to check whether the layer's content was hidden via the visibility property.
        However, this assumed that a passing hasVisibleContent() check meant that the
        entire area was covered by the renderers and layers checked layer.
        
        This is not always true. It's possible to have a visibility:hidden layer
        with a non-covering visbility:visible child, or even a single RenderText
        child that happens to have visibility:visible style. In these situations,
        hasVisibleContent() returns true but the entire area is not painted.
        
        So we have to fall back to on a more conservative check using the
        visibility style, which will give is a reliable answer for the current layer.

        Tests: compositing/contents-opaque/hidden-with-visible-child.html
               compositing/contents-opaque/hidden-with-visible-text.html

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

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

        Garbage down left side of nytimes.com page (if subscriber)
        https://bugs.webkit.org/show_bug.cgi?id=115839

        Reviewed by Antti Koivisto.
        
        RenderLayer::backgroundIsKnownToBeOpaqueInRect() would incorrectly return true
        for layers where the given rect wasn't contained in the background rect, but
        where some child layer obscured the rect, even though clipping hid part
        of that child layer.
        
        So bail from RenderLayer::backgroundIsKnownToBeOpaqueInRect() if we have
        any overflow clipping. This could be enhanced in future to test whether child
        layers obscure the clipping rect, but that would be more expensive.

        Test: compositing/contents-opaque/overflow-hidden-child-layers.html

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

2013-05-10  Eric Carlson  <eric.carlson@apple.com>

        In-band captions not visible immediately after track mode change
        https://bugs.webkit.org/show_bug.cgi?id=115922

        Reviewed by Dean Jackson.

        Test: media/track/track-in-band-mode.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackModeChanged): Add cues for all loaded tracks, regardless
            of track type.

2013-05-10  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: determine the resource type in InspectorResourceAgent::willSendRequest.

        This allows the Network timeline and Resources sidebar to filter Resources earlier,
        before the server sends a response. Useful for long polling (comet) XHRs.

        https://webkit.org/b/74935
        rdar://problem/13726105

        Reviewed by Joseph Pecoraro.

        * inspector/Inspector.json:
        (Network.requestWillBeSent): Added.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::willSendRequest): Send the type if it isn't Other along in requestWillBeSent.
        (WebCore::InspectorResourceAgent::didReceiveResponse): Don't determine the type here anymore. Clear the CachedResource
        if isNotModified like the old code path did by not setting cachedResource if !isNotModified.

2013-05-10  Laszlo Gombos  <l.gombos@samsung.com>

        [CMake] Consolidate list of files to build for WebCore plugin support
        https://bugs.webkit.org/show_bug.cgi?id=104429

        Reviewed by Rob Buis.

        Move the common files to support plugins and the logic for disabling
        plugins) to CMakeLists.txt from PlatformXXX.cmake.

        No new tests as there is no new functionality.

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

2013-05-10  Robert Hogan  <robert@webkit.org>

        REGRESSION(r148121): Empty Span does not get a linebox when it's in an anonymous block
        https://bugs.webkit.org/show_bug.cgi?id=115818

        Reviewed by David Hyatt.

        r148121 only worried about split inlines inside anonymous blocks - it ought to have 
        catered for empty inlines, with no continuations, inside a single solitary anonymous block too.

        Test: fast/inline/anonymous-block-with-empty-inline.html

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

2013-05-10  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Remove unnecessary includes in WidgetGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115912

        Reviewed by Andreas Kling.

        No new tests - no new functionality.

        * platform/gtk/WidgetGtk.cpp: Remove the unnecessary includes of the Chrome.h, Frame.h, FrameView.h,
        Page.h and RenderObject.h headers as the included declarations are not used anywhere. ScrollView.h is
        included instead as it is required and was previously included by one of the removed header inclusions.

2013-05-10  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Remove the unnecessary ImageData.h include in ImageBufferCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115911

        Reviewed by Carlos Garcia Campos.

        No new tests - no new functionality.

        * platform/graphics/cairo/ImageBufferCairo.cpp: Remove the ImageData.h include
        as the included declarations are not used anywhere.

2013-05-10  Zan Dobersek  <zdobersek@igalia.com>

        [Cairo] Remove the unnecessary CSSParser.h include in GradientCairo.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115910

        Reviewed by Laszlo Gombos.

        No new tests - no new functionality.

        * platform/graphics/cairo/GradientCairo.cpp: Remove the CSSParser.h include
        as the included declarations are not used anywhere.

2013-05-10  Dean Jackson  <dino@apple.com>

        Include tab character as a word end for kerning
        https://bugs.webkit.org/show_bug.cgi?id=115915
        <rdar://problem/13861491>

        Reviewed by Enrica Casucci.

        This is a follow-up to https://bugs.webkit.org/show_bug.cgi?id=112507
        which only looked for a space character as a word end. It should
        look for tab characters too.

        Test: fast/text/word-space-with-kerning-4.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::setLogicalWidthForTextRun): Look for '\t'.

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Remove EventTracer
        https://bugs.webkit.org/show_bug.cgi?id=115916

        Reviewed by Sam Weinig.

        EventTracer is dead code, remove it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/EventTracer.cpp: Removed.
        * platform/EventTracer.h: Removed.

2013-05-10  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Generated files are regenerated always
        https://bugs.webkit.org/show_bug.cgi?id=115908

        Reviewed by Carlos Garcia Campos.

        No new tests - no change in functionality.

        * GNUmakefile.am: Don't treat the window constructors IDL file as a dependency of the JavaScriptCore bindings.
        The file is generated during the IDL preprocessing, and the JSC bindings already depend on that step through
        the idl_supplemental_dependencies file. Because of that the window constructors IDL file has a phony target
        which seems to confuse the bindings generation rule into thinking that a complete regeration of the bindings is required.

2013-05-10  Andreas Kling  <akling@apple.com>

        Caching of generated images in CSS should be smarter.
        <http://webkit.org/b/115902>
        <rdar://problem/13542727>

        Reviewed by Antti Koivisto.

        Add an IntSize => GeneratorGeneratedImage cache at the CSSImageGeneratorValue level.

        CSSGradientValue is currently the only CSSImageGeneratorValue subclass that makes use of the cache.
        Generated images are kept for 3 seconds after last use.

        The main problem with the previous approach was that background renderers (e.g <body>, <tr>, etc)
        would be passed to multiple CSSImageGeneratorValue::getImage() calls with different sizes requested
        for each of the descendent renderers that inherit their background from the same parent.
        The cache wasn't smart enough for this, it just thought the background renderer was changing size
        a lot, and would regenerate the image over and over.

        We already had caching of intermediate image buffers for GeneratorGeneratedImage::drawPattern().
        This removes the eviction timer from that cache so that the intermediate images can live a bit longer.

        (WebCore::CSSImageGeneratorValue::cachedImageForSize):
        (WebCore::CSSImageGeneratorValue::saveCachedImageForSize):

            Renamed from getImage() and putImage().

        (WebCore::CSSImageGeneratorValue::evictCachedGeneratedImage):
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::CachedGeneratedImage):
        (WebCore::CSSImageGeneratorValue::CachedGeneratedImage::evictionTimerFired):

            Let the CachedGeneratedImage throw itself out from cache when the timer fires.

        * css/CSSImageGeneratorValue.h:
        (CachedGeneratedImage):

            Exactly what it sounds like. These go into CSSImageGeneratorValue::m_images with the size
            as the hash key.

        * platform/graphics/GeneratorGeneratedImage.cpp:
        (WebCore::GeneratorGeneratedImage::drawPattern):
        * platform/graphics/GeneratorGeneratedImage.h:
        (WebCore::GeneratorGeneratedImage::~GeneratorGeneratedImage):
        (WebCore::GeneratorGeneratedImage::GeneratorGeneratedImage):

            Keep the intermediate image for drawPattern() until destruction instead of dropping it on
            a timer. These objects are now evicted by the CSSImageGeneratorValue's image cache
            after 3 seconds of disuse rather than kept for the lifetime of the renderer.

        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::canvasChanged):
        (WebCore::CSSCanvasValue::canvasResized):
        * css/CSSCrossfadeValue.cpp:
        (WebCore::CSSCrossfadeValue::crossfadeChanged):
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::addClient):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::addClient):
        (WebCore::CSSImageGeneratorValue::removeClient):

            CSSImageGeneratorValue::m_clients is now a HashCountedSet<RenderObject*>, tweak accordingly.

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Remove MemoryUsageSupport class
        https://bugs.webkit.org/show_bug.cgi?id=115913

        Reviewed by Andreas Kling.

        MemoryUsageSupport was just used by a single call site in InspectorTimelineAgent,
        and the function called always returns zero on all platforms! Remove it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorMemoryAgent.cpp:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore):
        (WebCore::InspectorTimelineAgent::setNativeHeapStatistics):
        * platform/MemoryUsageSupport.cpp: Removed.
        * platform/MemoryUsageSupport.h: Removed.
        * platform/qt/MemoryUsageSupportQt.cpp: Removed.

2013-05-10  Ryosuke Niwa  <rniwa@webkit.org>

        REGRESSION (r149652): Videos do not play on cnn.com, just black box
        https://bugs.webkit.org/show_bug.cgi?id=115887

        Reviewed by Antti Koivisto.

        The bug was caused by window and document named item maps counting the same element twice
        when it has the same id and name attribute values. Fixed the bug by avoiding to add or remove
        an element per id and name attribute updates when it had already been added or removed by
        name and id attribute updates respectively.

        We do this by checking whether the other attribute affects the element's precense in window
        and document named item maps and avoiding to add or remove the attribute when they do and
        the other attribute is present in updateId and updateName.

        Consider a scenario when an object element has id "foo", and name attribute is about to be also
        set to "foo". If the id attribute doesn't affect element's presense in window or document
        named item maps, we're done. If it does, then the maps already have this element so we don't
        want to add it again. Conversely, if the element already has id and name attributes set to
        "foo", and we're moving the id attribute, then we want to remove the element from the maps only
        if the id doesn't affect the presence of the element in the maps.

        Unfortuntely, this logic doesn't work when we're inserting or removing an element on its entirely
        because updateId and updateName are called when both id and name attributes are present so skip
        this step (AlwaysUpdateHTMLDocumentNamedItemMaps) for the id attribute to break the symmetry.

        Test: fast/dom/HTMLDocument/image-with-same-id-and-name.html
              fast/dom/HTMLDocument/object-with-same-id-and-name.html

        * dom/Element.cpp:
        (WebCore::Element::insertedInto): Call updateId and updateName with
        AlwaysUpdateHTMLDocumentNamedItemMaps.
        (WebCore::Element::removedFrom): Ditto.
        (WebCore::Element::updateName): Don't add or remove this element if the id attribute has already
        done so except when we're inserting, removing, or cloning an element.
        (WebCore::Element::updateId): Ditto for the name attribute.
        (WebCore::Element::cloneAttributesFromElement): Added a comment and assert that we never call this
        function when this element is in the document. We can't update window and documemt named item
        maps here because image element's id attribute value, for example, is present in the document's
        named item map if it has a name attribute. Since this function calls updateId and updateName
        before updating attributes, this check is going to fail in DocumentNameCollection's
        nodeMatchesIfIdAttributeMatch and bad things will happen.

        * dom/Element.h:

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::swapInNodePreservingAttributesAndChildren): Clone children and attributes before
        inserting the swapped span to avoid hitting the assertion in cloneAttributesFromElement we added.

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

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem):

2013-05-09  Dean Jackson  <dino@apple.com>

        Don't trust character widths for internal OS X fonts in form controls
        https://bugs.webkit.org/show_bug.cgi?id=115883
        <rdar://problem/13817757>

        Reviewed by Darin Adler.

        We ignore the character width for a bunch of fonts when predicting
        the width of a form control. Some of the internal fonts in OS X are
        not in the ignored list. Rather than add them, simply test for
        fonts whose family begins with a period character ".".

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hasValidAvgCharWidth): Return false for
            any family that starts with "."

2013-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Remove unnecessary GLIB_CHECK_VERSION #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=115904

        Reviewed by Martin Robinson.

        * bindings/gobject/WebKitDOMEventTarget.cpp:
        * platform/gtk/GtkVersioning.c:
        * platform/gtk/GtkVersioning.h:

2013-05-10  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        Unreviewed. Fix the ENABLE(SHARED_WORKERS) build after r149864.

        * workers/SharedWorkerThread.cpp: include "SecurityOrigin.h"

2013-05-10  Claudio Saavedra  <csaavedra@igalia.com>

        Fix build after r149864.

        Unreviewed build fix.

        * loader/ThreadableLoader.h: include <wtf/text/AtomicString.h>
        when building with RESOURCE_TIMING enabled.

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Fix build.

        * bindings/js/ScriptController.cpp:

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Remove ScriptInstance.h
        https://bugs.webkit.org/show_bug.cgi?id=115900

        Reviewed by Andreas Kling.

        Remove yet another abstraction now that we don't support V8.

        * GNUmakefile.list.am:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.h:
        (Bindings):
        (ScriptController):
        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::createScriptInstanceForWidget):
        * bindings/js/ScriptInstance.h: Removed.
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::getInstance):
        * html/HTMLPlugInElement.h:
        (Bindings):
        (HTMLPlugInElement):
        * platform/graphics/wince/MediaPlayerProxy.h:
        (WebMediaPlayerProxy):
        * rendering/RenderEmbeddedObject.cpp:
        * rendering/RenderSnapshottedPlugIn.cpp:

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Unreviewed, rolling out r149866.
        http://trac.webkit.org/changeset/149866
        https://bugs.webkit.org/show_bug.cgi?id=115898

        Broke tests

        * dom/Document.cpp:
        (WebCore::Document::setDomain):
        (WebCore::Document::initSecurityContext):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::isolatedCopy):
        (WebCore::SecurityOrigin::setDomainFromDOM):
        (WebCore::SecurityOrigin::grantUniversalAccess):
        * page/SecurityOrigin.h:
        (SecurityOrigin):

2013-05-10  Andrei Bucur  <abucur@adobe.com>

        Remove overflow dead code
        https://bugs.webkit.org/show_bug.cgi?id=115893

        Reviewed by Antti Koivisto.

        The patch removes unused public overflow accesor functions from RenderOverflow and InlineFlowBox.

        Tests: no tests, code cleanup.

        * rendering/InlineFlowBox.h: Removed logicalLeftLayoutOverflow and logicalRightLayoutOverflow.
        * rendering/RenderOverflow.h: Removed setMinYLayoutOverflow, setMaxYLayoutOverflow,
            setMinXLayoutOverflow, setMaxXLayoutOverflow, setMinYVisualOverflow, setMaxYVisualOverflow,
            setMinXVisualOverflow and setMaxXVisualOverflow.

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Begin making SecurityOrigin immutable
        https://bugs.webkit.org/show_bug.cgi?id=115898

        Reviewed by Andreas Kling.

        Replace SecurityOrigin::setDomainFromDOM and SecurityOrigin::grantUniversalAccess with
        member functions that return new SecurityOrigin objects.

        * dom/Document.cpp:
        (WebCore::Document::setDomain):
        Update the security origin to one returned by copyWithDomainSetFromDOM.
    
        (WebCore::Document::initSecurityContext):
        Set the security origin to one returned by copyWithUniversalAccessGranted().

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        Add a new constructor that takes all the member variables as parameters. This is a little unwieldy at the moment,
        but all the boolean parameters could be replaced by a bitmask of flags.

        (WebCore::SecurityOrigin::isolatedCopy):
        Call the new constructor.

        (WebCore::SecurityOrigin::copyWithDomainSetFromDOM):
        Return a new security origin with m_domainWasSetInDOM set to true and the domain updated.

        (WebCore::SecurityOrigin::copyWithUniversalAccessGranted):
        Return a new security origin with m_universalAccess set to true.

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Remove ScriptController::updateSecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=115895

        Reviewed by Antti Koivisto.

        ScriptController::updateSecurityOrigin is just dead code now that the V8 bindings are gone.

        * bindings/js/ScriptController.cpp:
        * bindings/js/ScriptController.h:
        * dom/Document.cpp:
        (WebCore::Document::setIsViewSource):
        (WebCore::Document::setDomain):
        * dom/Document.h:
        (Document):
        * dom/SecurityContext.cpp:
        (WebCore::SecurityContext::enforceSandboxFlags):
        * dom/SecurityContext.h:
        (SecurityContext):

2013-05-10  Anders Carlsson  <andersca@apple.com>

        Stop including SecurityOrigin.h where unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=115897

        Reviewed by Antti Koivisto.

        Move rarely called functions out of line so headers don't have to include SecurityOrigin.h

        * Modules/indexeddb/IDBFactoryBackendImpl.h:
        * Modules/webdatabase/DatabaseBackendBase.cpp:
        (WebCore::DatabaseBackendBase::databaseDebugName):
        * Modules/webdatabase/DatabaseBackendBase.h:
        (DatabaseBackendBase):
        * Modules/webdatabase/DatabaseSync.h:
        * bindings/js/JSDOMWindowCustom.h:
        * html/parser/XSSAuditor.cpp:
        * loader/ThreadableLoader.cpp:
        (WebCore::ThreadableLoaderOptions::ThreadableLoaderOptions):
        (WebCore::ThreadableLoaderOptions::~ThreadableLoaderOptions):
        (WebCore::ThreadableLoader::create):
        * loader/ThreadableLoader.h:
        (ThreadableLoaderOptions):
        * loader/WorkerThreadableLoader.cpp:
        * workers/DedicatedWorkerContext.cpp:
        * workers/DedicatedWorkerThread.cpp:
        * workers/SharedWorkerContext.cpp:
        * workers/WorkerThread.cpp:
        * workers/WorkerThread.h:

2013-05-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix GTK+ build after r149839.

        * platform/gtk/RenderThemeGtk3.cpp:
        (WebCore::gtkStyleChangedCallback):

2013-05-09  Chris Fleizach  <cfleizach@apple.com>

        AX: VoiceOver is no longer seeing items in poorly formed tables
        https://bugs.webkit.org/show_bug.cgi?id=115837

        Reviewed by Darin Adler.

        In case the author didn't include the rows of a table as the 
        direct children, a table needs to dive down its descendant chain
        until the rows are found. 

        I also took the opportunity to clean up a bit around what the different
        meanings of table are in the accessibility classes.

        Test: accessibility/poorly-formed-aria-table.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addRowDescendant):
        (WebCore::AccessibilityARIAGrid::addChildren):
        * accessibility/AccessibilityARIAGrid.h:
        (AccessibilityARIAGrid):
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::parentTable):
        (WebCore):
        * accessibility/AccessibilityARIAGridRow.h:
        (AccessibilityARIAGridRow):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isTable):
        * accessibility/AccessibilityTable.h:
        (AccessibilityTable):
        (WebCore::AccessibilityTable::isTable):
        (WebCore::toAccessibilityTable):
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):

2013-05-09  Yael Aharon  <yael.aharon@intel.com>

        REGRESSION: Disabled multiline select element now responds to (certain) clicks
        https://bugs.webkit.org/show_bug.cgi?id=115710

        Reviewed by Kent Tamura.

        After http://trac.webkit.org/changeset/140286, select elements can scroll whether they
        are disabled or not. While they scroll, they also change the selected item.
        This patch allows the select element to scroll, but does not change the selection
        if the select element is disabled.        

        Test: fast/forms/select/listbox-disabled-scroll-no-onchange.html
        Test: fast/forms/select/listbox-disabled-no-autoscroll.html

        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::autoscroll):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::stopAutoscroll):

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Clean up SecurityOrigin::databaseIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=115882

        Reviewed by Beth Dakin.

        Remove m_encodedHost and just call encodeHost from databaseIdentifier().
        Also, use a StringBuilder when constructing the database identifier to avoid allocating
        temporary String objects over and over.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore):
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):
        (WebCore::SecurityOrigin::databaseIdentifier):
        * page/SecurityOrigin.h:
        (SecurityOrigin):

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Remove m_securityOrigin from XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=115881

        Reviewed by Alexey Proskuryakov.

        The security origin passed to XMLHttpRequest::create was always null, so just get rid of the member variable completely.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::create):
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::securityOrigin):
        * xml/XMLHttpRequest.h:
        (XMLHttpRequest):

2013-05-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        [NoInterfaceObject] extended attribute should be removed for several interfaces
        https://bugs.webkit.org/show_bug.cgi?id=115852

        Reviewed by Benjamin Poulain.

        Remove [NoInterfaceObject] extended attribute from the following Web IDL
        interfaces: SecurityPolicy, History, Location, Navigator, Performance,
        PerformanceEntry, PerformanceMark, PerformanceMeasure, PerformanceNavigation,
        PerformanceResourceTiming, PerformanceTiming and Screen.

        These interfaces should not have the [NoInterfaceObject] extended attribute
        according to their respective specifications:
        - http://www.w3.org/html/wg/drafts/html/master/browsers.html#the-history-interface
        - http://www.w3.org/html/wg/drafts/html/master/browsers.html#the-location-interface
        - https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#securitypolicy
        - http://www.w3.org/html/wg/drafts/html/master/webappapis.html#the-navigator-object
        - http://www.w3.org/TR/navigation-timing/#performance
        - https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PerformanceTimeline/Overview.html#sec-PerformanceEntry-interface
        - http://www.w3.org/TR/navigation-timing/#performancenavigation
        - http://www.w3.org/TR/navigation-timing/#performancetiming
        - http://www.w3.org/TR/user-timing/#performancemark
        - http://www.w3.org/TR/user-timing/#performancemeasure
        - http://www.w3c-test.org/webperf/specs/ResourceTiming/#performanceresourcetiming
        - http://dev.w3.org/csswg/cssom-view/#the-screen-interface

        The new behavior is consistent with the specifications, Firefox and soon Blink.

        No new tests, already covered by existing tests.

        * page/DOMSecurityPolicy.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Navigator.idl:
        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        * page/PerformanceMark.idl:
        * page/PerformanceMeasure.idl:
        * page/PerformanceNavigation.idl:
        * page/PerformanceResourceTiming.idl:
        * page/PerformanceTiming.idl:
        * page/Screen.idl:

2013-05-09  Robert Hogan  <robert@webkit.org>

        REGRESSION (Safari 3-Safari 4): Replaced element with percent height in table has incorrect height
        https://bugs.webkit.org/show_bug.cgi?id=26394

        Reviewed by David Hyatt.

        Text controls or any object that has scrollable content should not flex inside a table cell. 
        This makes our behaviour the same as IE, FF and Opera (Presto).

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * WebCore.exp.in:

2013-05-09  Anders Carlsson  <andersca@apple.com>

        Add a StorageStrategy hook for creating transient local storage namespaces
        https://bugs.webkit.org/show_bug.cgi?id=115870

        Reviewed by Geoffrey Garen.

        * WebCore.exp.in:
        Export symbol needed by WebKit2.
        
        * dom/Document.cpp:
        (WebCore::Document::topOrigin):
        * dom/Document.h:
        * dom/ScriptExecutionContext.h:
        * workers/WorkerContext.h:
        Remove const qualifier from topOrigin() to avoid ugly const_casts when assigning into a RefPtr<SecurityOrigin> variable.

        * page/PageGroup.cpp:
        (WebCore::PageGroup::transientLocalStorage):
        Do a single hash lookup instead of three and use the SecurityOrigin itself as the hash key instead of a string representation of it.

        * page/PageGroup.h:
        Update HashMap declaration.

        * storage/StorageNamespace.cpp:
        (WebCore::StorageNamespace::transientLocalStorageNamespace):
        Add new implementation that will optionally call out to the storage strategy.

        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::transientLocalStorageNamespace):
        Move the default implementation here from PageGroup.
        
        * storage/StorageStrategy.cpp:
        (WebCore::StorageStrategy::transientLocalStorageNamespace):
        Call the default implementation.

2013-05-09  Enrica Casucci  <enrica@apple.com>

        A change in system environment should force all CSS properties to be recomputed.
        https://bugs.webkit.org/show_bug.cgi?id=115872
        <rdar://problem/13781171>

        Reviewed by Antti Koivisto.

        When a change in the global environment occurs, for example system colors,
        we need to make sure all the CSS properties are recomputed and not fetched
        from the cache. For this reason we invalidate the properties cache.
        I've also renamed the function to give it a more meaningful name.
        
        * page/Page.cpp:
        (WebCore::Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment):
        * page/Page.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformColorsDidChange):

2013-05-09  Antti Koivisto  <antti@apple.com>

        Reoptimize free-standing :focus/link/visited/-webkit-any-link selectors.
        <http://webkit.org/b/115590>

        Reviewed by Darin Adler.

        Common pseudo selectors should go into their respective rule buckets instead of ending up in the universal one.

        * css/RuleSet.cpp:
        (WebCore::RuleSet::findBestRuleSetAndAdd):
        
            Check tag selectors with * local name (usually created for namespace) for a suitable narrower bucket too.

2013-05-09  Darin Adler  <darin@apple.com>

        RenderQuote has giant function for language to quotes map
        https://bugs.webkit.org/show_bug.cgi?id=115807

        Reviewed by Anders Carlsson.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::RenderQuote): Updated for m_isAttached name change.
        (WebCore::RenderQuote::~RenderQuote): Updated for name change, and also split
        assertion with && in it into two separate assertions.
        (WebCore::checkNumberOfDistinctQuoteCharacters): Added. Helper function that is used
        to check that the number of distinct quote characters is small enough to fit into
        our fixed size array below.
        (WebCore::quotesForLanguage): Replaces the old quotesDataLanguageMap function.
        Returns a pointer to a struct that contains the four quote characters. This new
        function doesn't have the massive amount of code that the old one did. We use the
        standard library bsearch function to do a binary search.
        (WebCore::stringForQuoteCharacter): Added. This returns a string for a given quote
        character; one string for any given character.
        (WebCore::quotationMarkString): Added. Returns the string for the quotation mark.
        (WebCore::apostropheStringImpl): Added. Returns the string for the apostrophe.
        (WebCore::RenderQuote::originalText): Rewrote this to include all the logic that
        used to be in the quotesData function.
        (WebCore::RenderQuote::attachQuote): Tweak assertions as above. Removed unneeded
        special case for the first quote in a RenderView; sharing the code is better and
        there is no significant performance difference. Also use m_isAttached directly
        when looking at predecessores so there is no need for an isAttached function.
        (WebCore::RenderQuote::detachQuote): Updated assertions and for name change.
        (WebCore::RenderQuote::updateDepth): Ditto.

        * rendering/RenderQuote.h: Removed unneeded includes. Marked the class FINAL since
        we call the originalText function in the class and we don't want to do a virtual
        function dispatch for that. Removed uneeded const from an argument. Removed a
        stray semicolon. Removed the quotesData and isAttached functions, since they are no
        longer needed. Renamed m_attached to m_isAttached.

        * rendering/style/QuotesData.cpp: Removed the overload of QuotesData::create that
        takes four quote strings. This was only used to build up the quotes table.
        * rendering/style/QuotesData.h: Ditto.

2013-05-09  Max Feil  <mfeil@rim.com>

        shouldUsePluginDocument() needs to be respected when a document is created
        https://bugs.webkit.org/show_bug.cgi?id=110308

        Reviewed by Rob Buis.

        In DOMImplementation::createDocument() we should create
        a PluginDocument for mime types that return "true" for
        shouldAlwaysUsePluginDocument(), even if there is no pluginData
        for them. This lets a client choose plugins for which the "missing
        plugin" text or icon should appear more consistently. Otherwise
        plugins referenced by iFrames will be treated as an HTMLDocument,
        possibly resulting in binary files rendered as gibberish text.

        Layout test platform/blackberry/plugins/swf-as-src-of-iframe.html

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):

2013-05-09  Timothy Hatcher  <timothy@apple.com>

        Fix an exception when hovering native functions while paused in the debugger.

        https://webkit.org/b/115866
        rdar://problem/13681982

        Reviewed by Darin Adler and Joseph Pecoraro.

        * inspector/InjectedScriptSource.js:
        (InjectedScript.prototype.getFunctionDetails): Return an error if the details
        is null or undefined.

2013-05-09  Darin Adler  <darin@apple.com>

        [Mac] CFError leak under Objective-C garbage collection
        https://bugs.webkit.org/show_bug.cgi?id=115862

        Reviewed by Benjamin Poulain.

        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::nsError): Use adoptCF instead of adoptNS since
        the CFError needs a CFRelease, not an -[NSObject release].

2013-05-09  Alberto Garcia  <agarcia@igalia.com>

        BlackBerry: fix call to PluginLayerWebKitThread::setHolePunchRect()
        https://bugs.webkit.org/show_bug.cgi?id=114953

        Reviewed by Rob Buis.

        data->layer needs a cast in order to call setHolePunchRect().

        * plugins/blackberry/NPCallbacksBlackBerry.cpp:
        (WebCore::npSetHolePunchHandler):

2013-05-09  Mike Fenton  <mifenton@rim.com>

        [BlackBerry] Style updates required based on new check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=115857

        Reviewed by Rob Buis.

        Update WebCore/platform/graphics BlackBerry sources
        to match check-webkit-style updates.

        Internally reviewed by Jakob Petsovits.

        * platform/graphics/blackberry/CanvasLayerWebKitThread.cpp:
        * platform/graphics/blackberry/GraphicsContext3DBlackBerry.cpp:
        (WebCore::GraphicsContext3D::readPixelsIMG):
        (WebCore::GraphicsContext3D::paintToCanvas):
        * platform/graphics/blackberry/GraphicsLayerBlackBerry.cpp:
        (WebCore::GraphicsLayerBlackBerry::updateLayerPosition):
        * platform/graphics/blackberry/IntRectBlackBerry.cpp:
        (WebCore::IntRect::IntRect):
        * platform/graphics/blackberry/LayerCompositingThread.h:
        (WTF::::deref):
        * platform/graphics/blackberry/LayerFilterRenderer.cpp:
        (WebCore::LayerFilterRenderer::initializeSharedGLObjects):
        (WebCore::LayerFilterRenderer::actionsForOperations):
        (WebCore::LayerFilterRenderer::applyActions):
        * platform/graphics/blackberry/LayerRenderer.cpp:
        (WebCore::LayerRenderer::setViewport):
        (WebCore::LayerRenderer::compositeBuffer):
        (WebCore::LayerRenderer::drawColor):
        (WebCore::LayerRenderer::compositeLayersRecursive):
        * platform/graphics/blackberry/LayerWebKitThread.cpp:
        (WebCore::LayerWebKitThread::setFrame):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::play):
        (WebCore::MediaPlayerPrivate::waitMetadataTimerFired):
        * platform/image-decoders/blackberry/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::JPEGImageDecoder):

2013-05-09  Mike Fenton  <mifenton@rim.com>

        [BlackBerry] Style updates required based on new check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=115857

        Reviewed by Rob Buis.

        Update WebCore/platform/network/blackberry
        to match check-webkit-style updates.

        * platform/network/blackberry/NetworkJob.cpp:
        (WebCore::NetworkJob::initialize):
        (WebCore::NetworkJob::handleSetCookieHeader):
        (WebCore::NetworkJob::sendResponseIfNeeded):
        (WebCore::NetworkJob::shouldSendClientData):
        * platform/network/blackberry/NetworkJob.h:
        (NetworkJob):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):
        * platform/network/blackberry/rss/RSSFilterStream.cpp:
        (WebCore::isRSSContent):
        (WebCore::transcode):

2013-05-09  Mike Fenton  <mifenton@rim.com>

        [BlackBerry] Style updates required based on new check-webkit-style
        https://bugs.webkit.org/show_bug.cgi?id=115857

        Reviewed by Rob Buis.

        Update WebCore/platform/blackberry to match check-webkit-style updates.

        No functional changes.

        * platform/blackberry/CookieDatabaseBackingStore/CookieDatabaseBackingStore.h:
        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::getRawCookies):
        * platform/blackberry/CookieMap.h:
        (WebCore::CookieMap::count):
        * platform/blackberry/CookieParser.cpp:
        (WebCore::CookieParser::parseOneCookie):
        * platform/blackberry/LoggingBlackBerry.cpp:
        * platform/blackberry/PageClientBlackBerry.h:
        (Platform):
        (Graphics):
        (WebCore):
        * platform/blackberry/ParsedCookie.cpp:
        (WebCore::ParsedCookie::appendWebCoreCookie):
        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore::RenderThemeBlackBerry::paintSearchFieldCancelButton):
        (WebCore::RenderThemeBlackBerry::paintButton):
        (WebCore::RenderThemeBlackBerry::paintSliderThumb):
        * platform/blackberry/SSLKeyGeneratorBlackBerry.cpp:
        (WebCore::signedPublicKeyAndChallengeString):
        * platform/blackberry/ScrollAnimatorBlackBerry.h:

2013-05-09  Chris Rogers  <crogers@google.com>

        Require use of AudioBus::create() to avoid ref-counting issues
        https://bugs.webkit.org/show_bug.cgi?id=115836

        Reviewed by Andreas Kling.

        There were a couple of places still embedding raw AudioBus objects as
        member variables or local variables causing ref-counting problems
        now that AudioBus is ref-counted.  Make AudioBus constructor private
        to enforce use of AudioBus::create().

        Adapted from Blink patch:
        https://chromiumcodereview.appspot.com/14628008/

        * Modules/webaudio/AudioDestinationNode.h:
        (WebCore::AudioDestinationNode::LocalAudioInputProvider::LocalAudioInputProvider):
        (WebCore::AudioDestinationNode::LocalAudioInputProvider::set):
        (WebCore::AudioDestinationNode::LocalAudioInputProvider::provideInput):
        (LocalAudioInputProvider):
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::AudioNodeInput):
        (WebCore::AudioNodeInput::updateInternalBus):
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::AudioNodeOutput):
        (WebCore::AudioNodeOutput::updateInternalBus):
        * Modules/webaudio/AudioParam.cpp:
        (WebCore::AudioParam::calculateFinalValues):
        * Modules/webaudio/ConvolverNode.cpp:
        (WebCore::ConvolverNode::setBuffer):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):
        (WebCore::MediaStreamAudioDestinationNode::process):
        * Modules/webaudio/MediaStreamAudioDestinationNode.h:
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        * Modules/webaudio/ScriptProcessorNode.cpp:
        (WebCore::ScriptProcessorNode::ScriptProcessorNode):
        (WebCore::ScriptProcessorNode::process):
        * Modules/webaudio/ScriptProcessorNode.h:
        (ScriptProcessorNode):
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::create):
        (WebCore):
        (WebCore::AudioBus::AudioBus):
        (WebCore::AudioBus::createBufferFromRange):
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/AudioBus.h:
        (AudioBus):
        * platform/audio/AudioFIFO.cpp:
        (WebCore::AudioFIFO::AudioFIFO):
        (WebCore::AudioFIFO::consume):
        (WebCore::AudioFIFO::push):
        * platform/audio/AudioFIFO.h:
        (AudioFIFO):
        * platform/audio/AudioPullFIFO.cpp:
        (WebCore::AudioPullFIFO::AudioPullFIFO):
        (WebCore::AudioPullFIFO::fillBuffer):
        * platform/audio/AudioPullFIFO.h:
        (AudioPullFIFO):
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::AudioResampler):
        (WebCore::AudioResampler::configureChannels):
        * platform/audio/MultiChannelResampler.cpp:
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/SincResampler.cpp:
        (WebCore::SincResampler::consumeSource):
        (WebCore):
        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
        (AudioDestinationGStreamer):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (WebCore::AudioFileReader::createBus):
        * platform/audio/ios/AudioDestinationIOS.cpp:
        (WebCore::AudioDestinationIOS::AudioDestinationIOS):
        (WebCore::AudioDestinationIOS::render):
        * platform/audio/ios/AudioDestinationIOS.h:
        (AudioDestinationIOS):
        * platform/audio/mac/AudioDestinationMac.cpp:
        (WebCore::AudioDestinationMac::AudioDestinationMac):
        (WebCore::AudioDestinationMac::render):
        * platform/audio/mac/AudioDestinationMac.h:
        (AudioDestinationMac):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):

2013-05-09  Alberto Garcia  <agarcia@igalia.com>

        [BlackBerry] Upstream the input popups
        https://bugs.webkit.org/show_bug.cgi?id=114608

        Reviewed by Rob Buis.

        This patch contains contributions from many members of the
        BlackBerry WebKit team, including:

        Chris Hutten-Czapski
        David Hoon
        Jessica Cao
        Rob Buis
        Tiancheng Jiang

        * Resources/blackberry/colorControlBlackBerry.css: Added.
        (.color-picker-popup-area):
        (.color-picker-content):
        (.color-picker-block):
        (#color-picker-swatch-block):
        (.color-picker-switcher):
        (.color-picker-check-mark):
        (.color-picker-option):
        (.color-picker-button):
        (.color-picker-highlight):
        (input):
        (.color-picker-sharp):
        (.color-picker-off):
        (.color-picker-inactive-font):
        (.color-picker-row):
        (.color-picker-hex-style):
        (.color-picker-input):
        (.color-picker-well):
        (.color-picker-input .color-picker-well):
        (.color-picker-slider):
        (.color-picker-slider-output):
        (.color-picker-range):
        (.color-picker-range::-webkit-slider-thumb):
        (.color-picker-range::-webkit-slider-thumb:active):
        (.red-ranger-bg):
        (.green-ranger-bg):
        (.blue-ranger-bg):
        (@media only screen and (height: 768px)):
        (@media only screen and (height: 720px)):
        * Resources/blackberry/colorControlBlackBerry.js: Added.
        (.):
        * Resources/blackberry/popupControlBlackBerry.css:
        (body):
        (.popup-area):
        (.popup-header):
        (.popup-content):
        (.popup-buttons):
        (.popup-button):
        (@media only screen and (width: 720px) and (height: 720px)):
        * Resources/blackberry/selectControlBlackBerry.css:
        (.popup-content):
        (@media (min-height: 918px)):
        (.option):
        (@media only screen and (width: 720px) and (height: 720px)):
        (.contents):
        (.option:active):
        (.selected):
        (.selected .contents::after):
        (.text):
        (.disabled):
        (.optgroup):
        (.optgroup-option):
        * Resources/blackberry/selectControlBlackBerry.js:
        (.):
        * Resources/blackberry/timeControlBlackBerry.css: Added.
        (#popup-content-time):
        (.column):
        (.column:not(:last-child)):
        (.cell):
        (.yearmonthdate .cell div:last-child):
        (.row-highlight-container):
        (.row-highlight-filler):
        (.row-highlight):
        (.tall-bit):
        (@media only screen and (width: 720px) and (height: 720px)):
        * Resources/blackberry/timeControlBlackBerry.js: Added.
        (.):

2013-05-09  Rob Buis  <rbuis@rim.com>

        [BlackBerry] texmap code generates warnings
        https://bugs.webkit.org/show_bug.cgi?id=115815

        Reviewed by Benjamin Poulain.

        Add USE(TEXTURE_MAPPER) guards since Source/WebCore/CMakeLists.txt includes
        these files unconditionally.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        * 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/TextureMapperTile.cpp:
        * platform/graphics/texmap/TextureMapperTile.h:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
        * platform/graphics/texmap/TextureMapperTiledBackingStore.h:

2013-05-09  Alberto Garcia  <agarcia@igalia.com>

        PluginDatabase: add plugin directory for the BlackBerry port.
        https://bugs.webkit.org/show_bug.cgi?id=114943

        Reviewed by Rob Buis.

        XP_UNIX is defined for the BlackBerry port, but we don't want to
        share the same code here.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        (WebCore::PluginDatabase::isPreferredPluginDirectory):

2013-05-09  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Remove Memory Distribution and Memory Snapshots Panels
        https://bugs.webkit.org/show_bug.cgi?id=115850

        Reviewed by Andreas Kling.

        Removed the Memory Instrumentation Code after r148921.

        No new tests, no behavior change.

        * inspector/compile-front-end.py:
        * inspector/front-end/NativeMemorySnapshotView.js: Removed.
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.ExperimentsSettings):
        * inspector/front-end/SettingsScreen.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.js:
        (WebInspector._panelDescriptors):
        * inspector/front-end/nativeMemoryProfiler.css: Removed.

2013-05-09  Zan Dobersek  <zdobersek@igalia.com>

        Unreviewed GTK build fix after r149796.

        * GNUmakefile.am: Add a phony target for the window constructors file and include it among
        the dependencies for the non-generated code.

2013-05-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Unreviewed build fix for Qt minimal build.

        r149796 broke builds that have WEB_SOCKETS flag disabled.

        * page/DOMWindow.idl:

2013-05-09  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Add support for [NoInterfaceObject] Web IDL extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=115714

        Reviewed by Kentaro Hara.

        *Constructor attributes on the global DOMWindow object are now automatically
        generated for each non-callback interface that is not declared with the
        [NoInterfaceObject] extended attribute. It is thus no longer needed for
        developers to manually add *Constructor attributes for their new interfaces
        unless they wish to register an "extra" constructor for their interface.

        This patch does not modify at all the behavior on JS side. To achieve this,
        [NoInterfaceObject] extended attribute is added to interfaces that should
        not have it according to specification (e.g. History, Location, ...).
        This can be improved later as the behavior should not change with this
        patch.

        No new tests, no behavior change.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeyMessageEvent.idl:
        * Modules/encryptedmedia/MediaKeyNeededEvent.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/filesystem/DOMFileSystem.idl:
        * Modules/filesystem/DOMFileSystemSync.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryEntrySync.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/DirectoryReaderSync.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/EntryArray.idl:
        * Modules/filesystem/EntryArraySync.idl:
        * Modules/filesystem/EntrySync.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/FileEntrySync.idl:
        * Modules/filesystem/FileWriter.idl:
        * Modules/filesystem/FileWriterSync.idl:
        * Modules/filesystem/Metadata.idl:
        * Modules/gamepad/Gamepad.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Coordinates.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/geolocation/Geoposition.idl:
        * Modules/geolocation/PositionError.idl:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/IDBAny.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/DOMWindowMediaStream.idl: Removed.
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/MediaStreamTrackEvent.idl:
        * Modules/mediastream/NavigatorUserMediaError.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDTMFToneChangeEvent.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCDataChannelEvent.idl:
        * Modules/mediastream/RTCIceCandidateEvent.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/DOMWindowNotifications.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/speech/DOMWindowSpeech.idl: Removed.
        * Modules/speech/DOMWindowSpeechSynthesis.idl:
        * Modules/speech/SpeechGrammar.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionAlternative.idl:
        * Modules/speech/SpeechRecognitionError.idl:
        * Modules/speech/SpeechRecognitionEvent.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/speech/SpeechSynthesis.idl:
        * Modules/speech/SpeechSynthesisVoice.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferSourceNode.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioDestinationNode.idl:
        * Modules/webaudio/AudioListener.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webaudio/AudioParam.idl:
        * Modules/webaudio/AudioSourceNode.idl:
        * Modules/webaudio/BiquadFilterNode.idl:
        * Modules/webaudio/ChannelMergerNode.idl:
        * Modules/webaudio/ChannelSplitterNode.idl:
        * Modules/webaudio/ConvolverNode.idl:
        * Modules/webaudio/DOMWindowWebAudio.idl: Removed.
        * Modules/webaudio/DelayNode.idl:
        * Modules/webaudio/DynamicsCompressorNode.idl:
        * Modules/webaudio/GainNode.idl:
        * Modules/webaudio/MediaElementAudioSourceNode.idl:
        * Modules/webaudio/MediaStreamAudioDestinationNode.idl:
        * Modules/webaudio/MediaStreamAudioSourceNode.idl:
        * Modules/webaudio/OfflineAudioContext.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webaudio/ScriptProcessorNode.idl:
        * Modules/webaudio/WaveShaperNode.idl:
        * Modules/webaudio/WaveTable.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLError.idl:
        * Modules/webdatabase/SQLResultSet.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/websockets/DOMWindowWebSocket.idl: Removed.
        * Modules/websockets/WebSocket.idl:
        * PlatformBlackBerry.cmake:
        * UseJSC.cmake:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/IDLParser.pm:
        (parseTypedef):
        * bindings/scripts/preprocess-idls.pl:
        (GenerateConstructorAttribute):
        (getFileContents):
        (getPartialInterfaceNameFromIDL):
        (isCallbackInterfaceFromIDL):
        (trim):
        (getInterfaceExtendedAttributesFromIDL):
        * css/CSSFontFaceLoadEvent.idl:
        * css/CSSFontFaceRule.idl:
        * css/CSSSupportsRule.idl:
        * css/CSSUnknownRule.idl:
        * css/DOMWindowCSS.idl:
        * css/FontLoader.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * dom/CustomElementConstructor.idl:
        * dom/DOMError.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/EventListener.idl:
        * dom/EventTarget.idl:
        * dom/NodeIterator.idl:
        * dom/ShadowRoot.idl:
        * dom/TreeWalker.idl:
        * dom/WebKitNamedFlow.idl:
        * fileapi/FileException.idl:
        * fileapi/FileReaderSync.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLDetailsElement.idl:
        * html/HTMLOptionElement.idl:
        * html/MediaError.idl:
        * html/MediaKeyError.idl:
        * html/MicroDataItemValue.idl:
        * html/RadioNodeList.idl:
        * html/ValidityState.idl:
        * html/canvas/CanvasRenderingContext.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/EXTTextureFilterAnisotropic.idl:
        * html/canvas/OESElementIndexUint.idl:
        * html/canvas/OESStandardDerivatives.idl:
        * html/canvas/OESTextureFloat.idl:
        * html/canvas/OESTextureHalfFloat.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/WebGLCompressedTextureATC.idl:
        * html/canvas/WebGLCompressedTexturePVRTC.idl:
        * html/canvas/WebGLCompressedTextureS3TC.idl:
        * html/canvas/WebGLContextAttributes.idl:
        * html/canvas/WebGLDebugRendererInfo.idl:
        * html/canvas/WebGLDebugShaders.idl:
        * html/canvas/WebGLDepthTexture.idl:
        * html/canvas/WebGLLoseContext.idl:
        * html/canvas/WebGLVertexArrayObjectOES.idl:
        * html/track/AudioTrack.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrackRegionList.idl:
        * html/track/VideoTrack.idl:
        * html/track/VideoTrackList.idl:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.idl:
        * inspector/ScriptProfile.idl:
        * inspector/ScriptProfileNode.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/AbstractView.idl:
        * page/BarInfo.idl:
        * page/Console.idl:
        * page/Crypto.idl:
        * page/DOMSecurityPolicy.idl:
        * page/DOMWindow.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/MemoryInfo.idl:
        * page/Navigator.idl:
        * page/PagePopupController.idl:
        * page/Performance.idl:
        * page/PerformanceEntry.idl:
        * page/PerformanceEntryList.idl:
        * page/PerformanceMark.idl:
        * page/PerformanceMeasure.idl:
        * page/PerformanceNavigation.idl:
        * page/PerformanceResourceTiming.idl:
        * page/PerformanceTiming.idl:
        * page/Screen.idl:
        * page/SpeechInputResult.idl:
        * page/SpeechInputResultList.idl:
        * page/WorkerNavigator.idl:
        * page/make_settings.pl:
        (generateInternalSettingsIdlFile):
        * svg/ElementTimeControl.idl:
        * svg/SVGAnimationElement.idl:
        * svg/SVGExternalResourcesRequired.idl:
        * svg/SVGFilterPrimitiveStandardAttributes.idl:
        * svg/SVGFitToViewBox.idl:
        * svg/SVGLangSpace.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGStyledElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGTransformable.idl:
        * svg/SVGURIReference.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * testing/MallocStatistics.idl:
        * testing/TypeConversions.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/SharedWorkerContext.idl:
        * workers/WorkerContext.idl:
        * workers/WorkerLocation.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:

2013-05-09  ChangSeok Oh  <changseok.oh@collabora.com>

        [GTK][AC] Buildfix after r149694
        https://bugs.webkit.org/show_bug.cgi?id=115797

        Reviewed by Gustavo Noronha Silva.

        Some interfaces, such as a return value and parameters of functions are changed.

        No new tests since no functionality changed.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::animationHasStepsTimingFunction):
        (WebCore::GraphicsLayerClutter::timingFunctionForAnimationValue):
        (WebCore::GraphicsLayerClutter::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerClutter::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerClutter::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerClutter::setAnimationEndpoints):
        (WebCore::GraphicsLayerClutter::setAnimationKeyframes):
        * platform/graphics/clutter/GraphicsLayerClutter.h:
        (GraphicsLayerClutter):

2013-05-08  Rob Buis  <rbuis@rim.com>

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

        Reviewed by Brent Fulgham.

        Get rid of the following warning for BlackBerry:

        NavigatorContentUtils.cpp:60:78: warning: comparison of unsigned expression < 0 is always false [-Wtype-limits]

        by not compiling any of the code to add protocols to the protocol whitelist.

        * Modules/navigatorcontentutils/NavigatorContentUtils.cpp:
        (WebCore::initProtocolHandlerWhitelist):

2013-05-08  peavo@outlook.com  <peavo@outlook.com>

        [Windows] The function seekFile() is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=115246

        Reviewed by Brent Fulgham.

        Implemented seekFile() function for Windows.

        * platform/win/FileSystemWin.cpp:
        (WebCore::seekFile):

2013-05-08  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Fix a typo in Settings.js
        https://bugs.webkit.org/show_bug.cgi?id=115849

        Reviewed by Joseph Pecoraro.

        No new tests, no behavior change.

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

2013-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        SecurityOrigin doesn’t need to forward declare or include Document
        https://bugs.webkit.org/show_bug.cgi?id=115847

        Reviewed by Alexey Proskuryakov.

        Merge https://chromium.googlesource.com/chromium/blink/+/fc7a88caa9c41f3471d8994a530643e5225f82fc.

        Removed unused Document forward declaration+include from SecurityOrigin.

        * page/SecurityOrigin.cpp:
        * page/SecurityOrigin.h:

2013-05-08  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Don't use adoptCF() with NSDictionary * object

        Fixes the following build failure:

            In file included from Source/WebCore/platform/network/mac/ResourceErrorMac.mm:27:
            In file included from Source/WebCore/platform/network/cf/ResourceError.h:31:
            /usr/local/include/wtf/RetainPtr.h:81:13: error: static_assert failed "Don't use adoptCF with Objective-C pointer types, use adoptNS."
                        static_assert(!std::is_convertible<T, id>::value, "Don't use adoptCF with Objective-C pointer types, use adoptNS.");
                        ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            /usr/local/include/wtf/RetainPtr.h:274:16: note: in instantiation of member function 'WTF::RetainPtr<NSDictionary *>::RetainPtr' requested here
                    return RetainPtr<T>(AdoptCF, o);
                           ^
            Source/WebCore/platform/network/mac/ResourceErrorMac.mm:214:44: note: in instantiation of function template specialization 'WTF::adoptCF<NSDictionary *>' requested here
                    RetainPtr<NSDictionary> userInfo = adoptCF((NSDictionary *) CFErrorCopyUserInfo(error));
                                                       ^
            1 error generated.

        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::ResourceError::nsError): Switch from adoptCF() to
        adoptNS().  This is in USE(CFNETWORK) code, so it's not
        exercised on the Mac.

2013-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove Editor::setSelectionOffsets
        https://bugs.webkit.org/show_bug.cgi?id=115831

        Reviewed by Andreas Kling.

        Removed the function added in r120985 for Chromium Android port.

        * editing/Editor.cpp:
        * editing/Editor.h:

2013-05-07  Ryosuke Niwa  <rniwa@webkit.org>

        Potential use-after-free of Frame
        https://bugs.webkit.org/show_bug.cgi?id=115774

        Reviewed by Simon Fraser.

        Merge https://chromium.googlesource.com/chromium/blink/+/c5b4a6db82e8280c7fc55ee3dc3a84c6b026e66e.

        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        (WebCore::Frame::setPageAndTextZoomFactors):
        (WebCore::Frame::deviceOrPageScaleFactorChanged):

2013-05-08  Roger Fong  <roger_fong@apple.com>

        Unreviewed build fix, AppleWin port.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation):
        (WebCore::MediaPlayerPrivateAVFoundation::seek):
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted):
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification):
        (WebCore):
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:
        (MediaPlayerPrivateAVFoundation):

2013-05-08  Xingnan Wang  <xingnan.wang@intel.com>

        Heap-use-after-free in WebCore::AudioNodeOutput::pull
        https://bugs.webkit.org/show_bug.cgi?id=111362

        Reviewed by Chris Rogers.

        * Modules/webaudio/AudioBuffer.cpp:
        (WebCore::AudioBuffer::createFromAudioFileData):
        * Modules/webaudio/AudioNodeInput.cpp:
        (WebCore::AudioNodeInput::AudioNodeInput):
        (WebCore::AudioNodeInput::updateInternalBus):
        * Modules/webaudio/AudioNodeInput.h:
        (AudioNodeInput):
        * Modules/webaudio/AudioNodeOutput.cpp:
        (WebCore::AudioNodeOutput::AudioNodeOutput):
        (WebCore::AudioNodeOutput::updateInternalBus):
        (WebCore::AudioNodeOutput::pull):
        (WebCore::AudioNodeOutput::bus):
        * Modules/webaudio/AudioNodeOutput.h:
        (AudioNodeOutput):
        * Modules/webaudio/OfflineAudioDestinationNode.cpp:
        (WebCore::OfflineAudioDestinationNode::OfflineAudioDestinationNode):
        * Modules/webaudio/OfflineAudioDestinationNode.h:
        (OfflineAudioDestinationNode):
        * platform/audio/AudioBus.cpp:
        (WebCore::AudioBus::createBufferFromRange):
        (WebCore::AudioBus::createBySampleRateConverting):
        (WebCore::AudioBus::createByMixingToMono):
        * platform/audio/AudioBus.h:
        (AudioBus):
        * platform/audio/AudioFileReader.h:
        (WebCore):
        * platform/audio/AudioResampler.cpp:
        (WebCore::AudioResampler::AudioResampler):
        (WebCore::AudioResampler::configureChannels):
        * platform/audio/AudioResampler.h:
        (AudioResampler):
        * platform/audio/HRTFElevation.cpp:
        (WebCore::getConcatenatedImpulseResponsesForSubject):
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        * platform/audio/MultiChannelResampler.cpp:
        * platform/audio/Reverb.cpp:
        (WebCore::Reverb::initialize):
        * platform/audio/Reverb.h:
        (Reverb):
        * platform/audio/efl/AudioBusEfl.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/gstreamer/AudioFileReaderGStreamer.cpp:
        (AudioFileReader):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/gtk/AudioBusGtk.cpp:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/mac/AudioBusMac.mm:
        (WebCore::AudioBus::loadPlatformResource):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/mac/AudioFileReaderMac.h:
        (AudioFileReader):
        * platform/audio/qt/AudioBusQt.cpp:
        (WebCore::AudioBus::loadPlatformResource):

2013-05-08  Eli Fidler  <efidler@blackberry.com>

        [BlackBerry] Fix usage of BlackBerry::Platform::String
        https://bugs.webkit.org/show_bug.cgi?id=115781

        Reviewed by Rob Buis.

        BlackBerry PRs 304193 and 327181
        Internally Reviewed by Mike Lattanzio, Arvid Nilsson, Joe Mason, Jeff Rogers, and George Staikos

        We currently have a problem where we're passing UTF-8 encoded data into
        the char* constructors of BlackBerry::Platform::String. This means the string
        thinks its data is not UTF-8.

        * platform/blackberry/ClipboardBlackBerry.cpp:
        (WebCore::ClipboardBlackBerry::setData):
        (WebCore::ClipboardBlackBerry::writeURL):
        (WebCore::ClipboardBlackBerry::writePlainText):
        * platform/blackberry/CookieManager.cpp:
        (WebCore::CookieManager::getRawCookies):
        (WebCore::CookieManager::getBackingStoreCookies):
        * platform/blackberry/CookieParser.cpp:
        (WebCore::CookieParser::CookieParser):
        (WebCore::CookieParser::parseOneCookie):
        * platform/blackberry/CursorBlackBerry.cpp:
        (WebCore::Cursor::Cursor):
        * platform/blackberry/PlatformBlob.cpp:
        (WebCore::PlatformBlob::nextDataItem):
        * platform/blackberry/WorkerAsyncFileSystemBlackBerry.cpp:
        (WebCore::WorkerAsyncFileSystemBlackBerry::openFileSystemOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::deleteFileSystemOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::moveOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::copyOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::removeOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::removeRecursivelyOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::readMetadataOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createFileOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createDirectoryOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::fileExistsOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::directoryExistsOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::readDirectoryOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createWriterOnMainThread):
        (WebCore::WorkerAsyncFileSystemBlackBerry::createSnapshotFileAndReadMetadataOnMainThread):
        * platform/graphics/blackberry/ImageBlackBerry.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
        (WebCore::MediaPlayerPrivate::load):
        (WebCore::MediaPlayerPrivate::notifyChallengeResult):
        (WebCore::toWebMediaStreamSource):
        (WebCore::toWebMediaStreamDescriptor):
        * platform/network/blackberry/NetworkManager.cpp:
        (WebCore::NetworkManager::startJob):
        * platform/network/blackberry/SocketStreamHandleBlackBerry.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        * platform/network/blackberry/rss/RSSFilterStream.cpp:
        (WebCore::RSSFilterStream::notifyStatusReceived):
        (WebCore::RSSFilterStream::notifyHeadersReceived):
        (WebCore::RSSFilterStream::convertContentToHtml):
        (WebCore::RSSFilterStream::charset):
        (WebCore::RSSFilterStream::removeHeader):
        (WebCore::RSSFilterStream::updateHeader):
        (WebCore::RSSFilterStream::updateRSSHeaders):
        * platform/network/blackberry/rss/RSSFilterStream.h:
        * platform/text/blackberry/StringBlackBerry.cpp:
        (WTF::String::operator BlackBerry::Platform::String):

2013-05-08  Anders Carlsson  <andersca@apple.com>

        Assert at compile time that we don't pass Objective-C object pointers to adoptCF
        https://bugs.webkit.org/show_bug.cgi?id=115823

        Reviewed by Geoffrey Garen.

        * platform/graphics/ca/mac/TileController.mm:
        (WebCore::TileController::TileController):
        Use adoptNS for CALayer.

2013-05-08  Eric Carlson  <eric.carlson@apple.com>

        TextTrackCue should support empty content
        https://bugs.webkit.org/show_bug.cgi?id=115821

        Reviewed by Jer Noble.

        Test: media/track/track-cue-empty-text-crash.html

        * html/shadow/MediaControlElements.cpp:
        (WebCore::MediaControlTextTrackContainerElement::updateDisplay): Don't bother trying to render
            cues with no content.

        * html/track/TextTrackCue.cpp:
        (WebCore::TextTrackCue::getCueAsHTML): Return early if there isn't a node tree.
        (WebCore::TextTrackCue::createCueRenderingTree): Ditto.
        (WebCore::TextTrackCue::determineTextDirection): Ditto.
        (WebCore::TextTrackCue::updateDisplayTree): Return early if there isn't a cue rendering tree.

2013-05-08  Roger Fong  <roger_fong@apple.com>

        Unreviewed AppleWin build fix.

        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.h:
        (MediaPlayerPrivateAVFoundationCF):
        (WebCore::MediaPlayerPrivateAVFoundationCF::currentTrack):

2013-05-08  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Plumb the Automake build system for the Battery Status API feature
        https://bugs.webkit.org/show_bug.cgi?id=115718

        Reviewed by Martin Robinson.

        No new tests - no new functionality. The feature is not enabled yet, though all the relevant tests
        pass when it is.

        * GNUmakefile.am: Add the Modules/battery directory to the list of search paths for header inclusions.
        Include the same directory under the IDL_PATH variable so the IDL files it contains are processed.
        List these IDL files using a wildcard under the EXTRA_DIST list.
        * GNUmakefile.list.am: Add the build targets for the module source files, IDLs and resulting JS bindings.
        * bindings/gobject/GNUmakefile.am: Add the build targets for the GObject DOM bindings.

2013-05-08  Roger Fong  <roger_fong@apple.com>

        Unreviewed. AppleWin VS2010 build fix.

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

2013-05-08  Darin Adler  <darin@apple.com>

        REGRESSION(r149700): fast/css-generated-content/close-quote-negative-depth.html
        https://bugs.webkit.org/show_bug.cgi?id=115776

        Reviewed by Anders Carlsson.

        I changed depth to more closely match what is in the CSS3 specification.
        There may be a more optimal way to make it work, but this seems the most straightforward.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::RenderQuote): Initialize m_depth to -1 because that depth
        is consistent with the empty string that is the initial value of the text. The
        real depth will be calculated when the node is attached.
        (WebCore::RenderQuote::originalText): Removed the "depth - 1" logic that
        used to be done for close quotes. Instead, the updateDepth function now correctly
        subtracts one for the close quote itself, not just afterward. Also added an early
        exit when the depth is negative; these changes together fix the bug.
        (WebCore::RenderQuote::attachQuote): Added a call to updateDepth even for the render
        quote head, we now need that to set the depth either to 0 or to -1.
        (WebCore::RenderQuote::detachQuote): Removed code to set m_depth to 0;  if we are not
        resetting the text then m_depth should be left matching the text, otherwise updateDepth
        might not do its job correctly if the quote is later re-attached. What matters is that
        m_depth and the text are in sync.
        (WebCore::RenderQuote::updateDepth): Changed updating logic in two ways. First,
        compute the depth in a local variable rather than computing it in a data member
        after first saving off the old value of the data member. That's clearer style.
        Second, add the code to change negative depths to zero when propagating to the
        next quote in the chain, which matches how the standard is written, and decrement
        the depth of the close quote itself, not the quote after the close quote.

2013-05-08  Eric Carlson  <eric.carlson@apple.com>

        Prevent crash when track is deleted during video element deletion.
        https://bugs.webkit.org/show_bug.cgi?id=106183

        Reviewed by Dean Jackson.

        Test: media/track/track-remove-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::removedFrom): Set m_inActiveDocument to false so we
            do not process text track cues or dispatch related events.

2013-05-08  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Unreviewed buildfix after r149741.

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

2013-05-08  Eric Carlson  <eric.carlson@apple.com>

        [Mac] Inband text tracks are not in track menu on Lion
        https://bugs.webkit.org/show_bug.cgi?id=115740

        Reviewed by Dean Jackson.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Remove m_legacyWebKitClosedCaptionsVisible.
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible): Set m_closedCaptionsVisible
            to false immediately, it will be reset to the appropriate value if necessary.
        (WebCore::HTMLMediaElement::setWebkitClosedCaptionsVisible): Remove m_legacyWebKitClosedCaptionsVisible.
        (WebCore::HTMLMediaElement::webkitClosedCaptionsVisible): Remove m_legacyWebKitClosedCaptionsVisible.
        * html/HTMLMediaElement.h:

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp: Remove 
            HAVE(AVFOUNDATION_TEXT_TRACK_SUPPORT) requirement. AVFOUNDATION_TEXT_TRACK_SUPPORT ->
            AVFOUNDATION_MEDIA_SELECTION_GROUP
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h: Ditto.

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp: 
        (WebCore::MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::dispatchNotification): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundation::trackModeChanged): Ditto.
        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:  Ditto.

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:  Ditto.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::kind): Don't look at media characteristics, 
            a legacy CC track is always Captions.
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::isClosedCaptions): Ditto.
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::containsOnlyForcedSubtitles): Ditto.
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::isMainProgramContent): Ditto.
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::isEasyToRead): Ditto.
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::label): Use different AVFoundation API on 10.7.
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC): AVFOUNDATION_TEXT_TRACK_SUPPORT ->
            AVFOUNDATION_MEDIA_SELECTION_GROUP.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setClosedCaptionsVisible): Do nothing. AVFOUNDATION_TEXT_TRACK_SUPPORT ->
            AVFOUNDATION_MEDIA_SELECTION_GROUP.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Support legacy CC tracks
            only on 10.8. AVFOUNDATION_TEXT_TRACK_SUPPORT -> AVFOUNDATION_MEDIA_SELECTION_GROUP
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyClosedCaptionsTracks): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): AVFOUNDATION_TEXT_TRACK_SUPPORT -> 
            AVFOUNDATION_MEDIA_SELECTION_GROUP

2013-05-08  Sergio Villar Senin  <svillar@igalia.com>

        Allow blank spaces before colon (:) on CSS variable definition
        https://bugs.webkit.org/show_bug.cgi?id=115802

        Reviewed by Darin Adler.

        Test: css3/css-variable-definition.html

        Modified the grammar to allow blank spaces before the colon on CSS
        variable definitions.

        * css/CSSGrammar.y.in:

2013-05-08  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GStreamer] Does memory buffering even with preload set to none
        https://bugs.webkit.org/show_bug.cgi?id=115754

        Reviewed by Philippe Normand.

        Covered by existing tests.

        Revision 148840 fixed on-disk buffering being done when preload is set to none,
        but memory buffering is still being done. That is because setting the state to
        paused causes GStreamer to start loading the media, to gather information. Only
        doing that when committing the load avoids that while maintaining the tested
        behaviour unchanged.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::load): move setting pause state to commitLoad.
        (WebCore::MediaPlayerPrivateGStreamer::commitLoad): see above.

2013-05-08  Andreas Kling  <akling@apple.com>

        SVGStyledElement::getPresentationAttribute() does not need to be virtual.

        From Blink r149888 by <cevans@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=149888>

        * svg/SVGStyledElement.h:

2013-05-08  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Crash when loading link to audio file
        https://bugs.webkit.org/show_bug.cgi?id=115794

        Reviewed by Jocelyn Turcotte.

        Do not access a null pointer frame.

        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::isApplicationCacheEnabled):

2013-05-08  Christophe Dumez  <ch.dumez@sisa.samsung.com>

        Remove unused [TransferList] extended attribute
        https://bugs.webkit.org/show_bug.cgi?id=115788

        Reviewed by Kentaro Hara.

        Remove [TransferList] extended attribute and corresponding tests as it has no
        effect on the generated JSC bindings.

        No new tests, no behavior change.

        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h:
        (WebDOMTestSerializedScriptValueInterface):
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.cpp:
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.h:
        (WebDOMTestTypedefs):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore):
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::finishCreation):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
        (JSTestSerializedScriptValueInterfacePrototype):
        (JSTestSerializedScriptValueInterfaceConstructor):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore):
        * bindings/scripts/test/JS/JSTestTypedefs.h:
        (WebCore):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.mm:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestTypedefs.idl:

2013-05-08  Dongseong Hwang  <dongseong.hwang@intel.com>

        Make optional arguments in CanvasRenderingContext2D match the spec.
        https://bugs.webkit.org/show_bug.cgi?id=115723

        Reviewed by Dean Jackson.

        WebKit r98985 set many arguments optional although the canvas spec[1] does not
        indicate. So this patch corrects CanvasRenderingContext2D.idl to match the spec.

        [1] http://www.w3.org/html/wg/drafts/2dcontext/html5_canvas/

        Covered by existing tests:
          canvas/philip/tests/2d.missingargs.html
          fast/canvas/canvas-overloads-strokeRect.html
          inspector/profiler/canvas2d/canvas2d-profiler-capturing-basics.html

        * html/canvas/CanvasRenderingContext2D.idl:

2013-05-08  Ryosuke Niwa  <rniwa@webkit.org>

        Remove unused method and de-virtualize others in Element.h
        https://bugs.webkit.org/show_bug.cgi?id=115770

        Reviewed by Andreas Kling.

        Merge https://chromium.googlesource.com/chromium/blink/+/c2c2ff9cb69f46f5cc9d289b2bfbdb8ab5bd3e49

        The de-virtualization possibilities were noted whilst "FINALizing" the Node
        hierarchy. If a method is successfully marked FINAL but then fails when marked
        OVERRIDE as well, the method by definition does not need to be virtual.

        * WebCore.exp.in:
        * dom/Element.h:
        (WebCore::Element::hasAuthorShadowRoot):

2013-05-06  Darin Adler  <darin@apple.com>

        Use adoptCF and adoptNS in more places
        https://bugs.webkit.org/show_bug.cgi?id=115657

        Reviewed by Sam Weinig.

        This is similar to my last set of changes, but covers code that I missed with
        global replace using the Safari Xcode workspace.

        * platform/cf/win/CertificateCFWin.cpp:
        (WebCore::copyCertificateToData):
        * platform/graphics/avfoundation/cf/MediaPlayerPrivateAVFoundationCF.cpp:
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformBufferedTimeRanges):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMinTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeSeekable):
        (WebCore::MediaPlayerPrivateAVFoundationCF::platformMaxTimeLoaded):
        (WebCore::MediaPlayerPrivateAVFoundationCF::totalBytes):
        (WebCore::mimeTypeCache):
        (WebCore::MediaPlayerPrivateAVFoundationCF::tracksChanged):
        (WebCore::MediaPlayerPrivateAVFoundationCF::sizeChanged):
        (WebCore::AVFWrapper::createAssetForURL):
        (WebCore::AVFWrapper::createPlayer):
        (WebCore::AVFWrapper::createPlayerItem):
        (WebCore::AVFWrapper::setAsset):
        (WebCore::AVFWrapper::platformLayer):
        (WebCore::AVFWrapper::createAVCFVideoLayer):
        (WebCore::AVFWrapper::createImageGenerator):
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateLegacyAVFObjC::language):
        * platform/graphics/ca/win/PlatformCAAnimationWin.cpp:
        (toCACFTimingFunction):
        (PlatformCAAnimation::PlatformCAAnimation):
        (PlatformCAAnimation::setFromValue):
        (PlatformCAAnimation::setToValue):
        (PlatformCAAnimation::setValues):
        (PlatformCAAnimation::setKeyTimes):
        (PlatformCAAnimation::setTimingFunctions):
        * platform/graphics/ca/win/PlatformCALayerWin.cpp:
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::setBackgroundColor):
        (PlatformCALayer::setBorderColor):
        * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
        (PlatformCALayerWinInternal::PlatformCALayerWinInternal):
        (PlatformCALayerWinInternal::addTile):
        * platform/graphics/ca/win/WKCACFViewLayerTreeHost.cpp:
        (WebCore::WKCACFViewLayerTreeHost::WKCACFViewLayerTreeHost):
        * platform/graphics/gstreamer/PlatformVideoWindowMac.mm:
        (PlatformVideoWindow::PlatformVideoWindow):
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        (WebCore::getPostScriptName):
        (WebCore::FontPlatformData::platformDataInit):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawWindowsBitmap):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::create):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::rfc2616DateStringFromTime):
        (WebCore::QTCFDictionaryCreateWithDataCallback):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        * platform/graphics/win/WKCAImageQueue.cpp:
        (WebCore::WKCAImageQueue::WKCAImageQueue):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::qcmsOutputDeviceProfile):
        * platform/network/cf/AuthenticationCF.cpp:
        (WebCore::core):
        * platform/network/cf/CookieJarCFNet.cpp:
        (WebCore::cookieDomain):
        (WebCore::cookieName):
        (WebCore::cookiePath):
        (WebCore::cookieValue):
        (WebCore::filterCookies):
        (WebCore::setCookiesFromDOM):
        (WebCore::cookiesForDOM):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::getRawCookies):
        (WebCore::deleteCookie):
        (WebCore::getHostnamesWithCookies):
        (WebCore::deleteCookiesForHostname):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::certificatePath):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::urlFromPath):
        (WebCore::getURL):
        * platform/win/LocalizedStringsWin.cpp:
        (WebCore::createWebKitBundle):
        (WebCore::localizedString):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::saveRecentSearches):
        (WebCore::SearchPopupMenuWin::loadRecentSearches):
        * plugins/mac/PluginPackageMac.cpp:
        (WebCore::stringListFromResourceId):
        (WebCore::PluginPackage::fetchInfo):
        (WebCore::PluginPackage::load):
        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::platformStart):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::platformFocusRingColor):
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        Use adoptCF and adoptNS throughout.

2013-05-07  Benjamin Poulain  <bpoulain@apple.com>

        Make CanvasStyle's CMYKAValues allocated on the heap and move the pointer in the union.
        https://bugs.webkit.org/show_bug.cgi?id=115764

        Reviewed by Andreas Kling.

        CMYKA input is uncommon enough that we should not pay the price for
        every CanvasStyle.
        Make those values heap allocated and put the pointer in the union. Since
        the RGBA32 values are needed for CMYKA, a RGBA32 value is added to the structure.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::CanvasStyle::~CanvasStyle):
        (WebCore::CanvasStyle::isEquivalentColor):
        (WebCore::CanvasStyle::isEquivalentCMYKA):
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/canvas/CanvasStyle.h:
        (CanvasStyle):
        (CMYKAValues):
        (WebCore::CanvasStyle::CMYKAValues::CMYKAValues):
        (WebCore::CanvasStyle::color):
        (WebCore):

2013-05-07  Darin Adler  <darin@apple.com>

        Use OwnPtr instead of deleteAllValues for requests in PluginView
        https://bugs.webkit.org/show_bug.cgi?id=115731

        Reviewed by Sam Weinig.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::~PluginView): Removed the call to deleteAllValues.
        (WebCore::PluginView::requestTimerFired): Use release to remove an OwnPtr
        from m_requests rather than an explicit delete. Also use !isEmpty instead
        of size > 0.
        (WebCore::PluginView::scheduleRequest): Changed argument type to PassOwnPtr.
        (WebCore::PluginView::load): Use adoptPtr to call scheduleRequest.

        * plugins/PluginView.h: Changed argument type of scheduleRequest to
        PassOwnPtr, and m_requests to a Vector<OwnPtr>.

2013-05-07  Antti Koivisto  <antti@apple.com>

        Remove SelectRuleFeatureSet
        https://bugs.webkit.org/show_bug.cgi?id=115757

        Reviewed by Benjamin Poulain.

        This is dead code.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore):
        (WebCore::Element::didAffectSelector):
        * dom/Element.h:
        (Element):
        * dom/ElementShadow.h:
        (WebCore::ElementShadow::invalidateDistribution):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::ContentDistributor):
        (WebCore):
        * html/shadow/ContentDistributor.h:
        (ContentDistributor):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::insertedInto):
        (WebCore::InsertionPoint::removedFrom):
        * html/shadow/InsertionPoint.h:
        (InsertionPoint):
        * html/shadow/SelectRuleFeatureSet.cpp: Removed.
        * html/shadow/SelectRuleFeatureSet.h: Removed.
        * testing/Internals.cpp:
        (WebCore):
        * testing/Internals.idl:

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Store the quotes in the same allocation as the QuotesData object
        https://bugs.webkit.org/show_bug.cgi?id=115768

        Reviewed by Andreas Kling.

        Since the QuotesData object is immutable we don't need a Vector to store the quote pairs,
        they can just be stored after the class data.

        * rendering/style/QuotesData.cpp:
        (WebCore::sizeForQuotesDataWithQuoteCount):
        Helper function for computing the allocation size.

        (WebCore::QuotesData::create):
        Use fastMalloc + placement new.

        (WebCore::QuotesData::QuotesData):
        Use placement new to allocate the quote pairs.

        (WebCore::QuotesData::~QuotesData):
        Destroy the quote pairs.

        (WebCore::QuotesData::openQuote):
        Stop using Vector.

        (WebCore::QuotesData::closeQuote):
        Ditto.

        (WebCore::operator==):
        Ditto.

        * rendering/style/QuotesData.h:

2013-05-07  Benjamin Poulain  <bpoulain@apple.com>

        We should not ref() the RefPtr twice in CanvasStyle

        Reviewed by Darin Adler.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        We leak the ref of PassRefPtr, we should not ref() it a second time.

2013-05-07  Ryosuke Niwa  <rniwa@webkit.org>

        Devirtualize Document class type checking
        https://bugs.webkit.org/show_bug.cgi?id=115755

        Reviewed by Benjamin Poulain.

        Merge https://chromium.googlesource.com/chromium/blink/+/dae5adc768d5ce6bff301df6515745da8ea24950

        Document has a bunch of virtual bool is*Document() methods on it, but it also has
        two bools for XHTML and HTML documents which is silly. We can merge them all
        together into an enum of values and devirtualize the type checking methods.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::createElement):
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createXHTML):
        (WebCore::Document::isHTMLDocument):
        (WebCore::Document::isXHTMLDocument):
        (WebCore::Document::isImageDocument):
        (WebCore::Document::isSVGDocument):
        (WebCore::Document::isPluginDocument):
        (WebCore::Document::isMediaDocument):
        (WebCore::Document):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument):
        * html/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * html/ImageDocument.h:
        (WebCore::ImageDocument):
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument):
        * html/MediaDocument.h:
        (WebCore::MediaDocument):
        * html/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * html/PluginDocument.h:
        (WebCore::PluginDocument):
        * loader/PlaceholderDocument.h:
        (WebCore::PlaceholderDocument::PlaceholderDocument):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        * svg/SVGDocument.h:
        (WebCore::SVGDocument):

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Begin unraveling the mess that is QuotesData
        https://bugs.webkit.org/show_bug.cgi?id=115765

        Reviewed by Andreas Kling.

        Change QuotesData to be an immutable object and fix other things that are broken.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):
        QuotesData::addPair is gone. Instead, create the Vector up front and pass it to QuotesData.

        * rendering/RenderQuote.cpp:
        (WebCore::RenderQuote::originalText):
        Update for renames.

        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::create):
        Remove the create overload that wasn't used. Add a new create overload that takes a Vector.

        (WebCore::QuotesData::openQuote):
        Rename this from getOpenQuote and clean it up.

        (WebCore::QuotesData::closeQuote):
        Rename this from getCloseQuote and clean it up.

        (WebCore::operator==):
        Replace the equals member function with a proper equality operator.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        Stop calling QuotesData::equals. Use the same idiom as used for other properties.

        (WebCore::RenderStyle::setQuotes):
        * rendering/style/StyleRareInheritedData.cpp:
        Use operator==.

        (WebCore::quotesDataEquivalent):
        Add helper function.

        (WebCore::StyleRareInheritedData::operator==):
        Call quotesDataEquivalent.

2013-05-06  Enrica Casucci  <enrica@apple.com>

        Support -webkit-system-font on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=115758
        <rdar://problem/13433854>

        Reviewed by Dean Jackson.

        Test: platform/mac/fast/text/systemFont.html

        * platform/mac/WebFontCache.mm:
        (+[WebFontCache internalFontWithFamily:traits:weight:size:]):

2013-05-07  Benjamin Poulain  <bpoulain@apple.com>

        Move CanvasGradient and CanvasPattern in the union of CanvasStyle
        https://bugs.webkit.org/show_bug.cgi?id=115759

        Reviewed by Andreas Kling.

        The Gradient and Pattern are exclusive with the other values, but they
        were left out of the union because they are ref-counted.

        This patch moves them in the union, and simply does the ref-counting manually.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::CanvasStyle::~CanvasStyle):
        * html/canvas/CanvasStyle.h:
        (CanvasStyle):
        (WebCore::CanvasStyle::canvasGradient):
        (WebCore::CanvasStyle::canvasPattern):

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Remove custom allocator support from PODArena
        https://bugs.webkit.org/show_bug.cgi?id=115762

        Reviewed by Andreas Kling.

        Nobody uses PODArena with a custom allocator, so just get rid of it and always use fastMalloc/fastFree.

        * platform/PODArena.h:
        (WebCore::PODArena::PODArena):
        (WebCore::PODArena::allocateBase):
        (WebCore::PODArena::Chunk::Chunk):
        (WebCore::PODArena::Chunk::~Chunk):
        (Chunk):
        * platform/PODFreeListArena.h:
        (WebCore::PODFreeListArena::allocate):
        (WebCore::PODFreeListArena::FreeListChunk::FreeListChunk):

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Clean up KeyframeValueList and related classes
        https://bugs.webkit.org/show_bug.cgi?id=115738

        Reviewed by Simon Fraser.

        Add static create() functions to the AnimationValue subclasses, and change a bunch of parameters
        and return values that can never be null from pointer types to reference types to better indicate this.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::filterOperationsAt):
        (WebCore::GraphicsLayer::validateFilterOperations):
        (WebCore::operationsAt):
        (WebCore::GraphicsLayer::validateTransformOperations):
        * platform/graphics/GraphicsLayer.h:
        (AnimationValue):
        (WebCore::AnimationValue::AnimationValue):
        (WebCore::FloatAnimationValue::create):
        (FloatAnimationValue):
        (WebCore::FloatAnimationValue::FloatAnimationValue):
        (WebCore::TransformAnimationValue::create):
        (TransformAnimationValue):
        (WebCore::TransformAnimationValue::value):
        (WebCore::TransformAnimationValue::TransformAnimationValue):
        (WebCore::FilterAnimationValue::create):
        (WebCore::FilterAnimationValue::value):
        (WebCore::FilterAnimationValue::FilterAnimationValue):
        (FilterAnimationValue):
        (WebCore::KeyframeValueList::~KeyframeValueList):
        (KeyframeValueList):
        (WebCore::KeyframeValueList::at):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::animationHasStepsTimingFunction):
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::createFilterAnimationsFromKeyframes):
        (WebCore::GraphicsLayerCA::timingFunctionForAnimationValue):
        (WebCore::GraphicsLayerCA::setAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setAnimationKeyframes):
        (WebCore::GraphicsLayerCA::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerCA::setFilterAnimationEndpoints):
        (WebCore::GraphicsLayerCA::setFilterAnimationKeyframes):
        * platform/graphics/ca/GraphicsLayerCA.h:
        (GraphicsLayerCA):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        (WebCore::RenderLayerBacking::startTransition):

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Add and remove databases and origins from the database tracker
        https://bugs.webkit.org/show_bug.cgi?id=115752

        Reviewed by Andreas Kling.

        Add symbols needed by WebKit2.

        * WebCore.exp.in:

2013-05-07  Beth Dakin  <bdakin@apple.com>

        Still possible to fire paint-related LayoutMilestones before CA has committed the 
        changes
        https://bugs.webkit.org/show_bug.cgi?id=115753
        -and corresponding-
        <rdar://problem/13822315>

        Reviewed by Simon Fraser.

        To ensure we wait for the CA commit, we should wait until the end of the runloop 
        with a zero-delay timer.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::paintRelatedMilestonesTimerFired):
        (WebCore):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-05-07  Chris Fleizach  <cfleizach@apple.com>

        Bug 115694 - Fix bad cast to RenderHTMLCanvas
        https://bugs.webkit.org/show_bug.cgi?id=115694

        Reviewed by Ryosuke Niwa.

        Don't cast to RenderHTML until we check what kind of object it is.

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

2013-05-07  Anders Carlsson  <andersca@apple.com>

        The storage database tracker should know when databases come and go
        https://bugs.webkit.org/show_bug.cgi?id=115748

        Reviewed by Andreas Kling.

        Export symbol needed by WebKit2.

        * WebCore.exp.in:

2013-05-07  Darin Adler  <darin@apple.com>

        Use OwnPtr instead of deleteAllValues in SVGResourcesCache
        https://bugs.webkit.org/show_bug.cgi?id=115729

        Reviewed by Benjamin Poulain.

        * rendering/svg/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::~SVGResourcesCache): Removed call to deleteAllValues.
        (WebCore::SVGResourcesCache::addResourcesFromRenderObject): Use adoptPtr and release
        to create new SVGResources object.
        (WebCore::SVGResourcesCache::removeResourcesFromRenderObject): Use take to remove
        the SVGResources from the map rather than a get combined with delete/take.
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject): Removed unneeded
        call to contains, since get already returns 0 if there is no item in the map.
        (WebCore::SVGResourcesCache::resourceDestroyed): Use typedef for the map type so
        we don't have to repeat the type.

        * rendering/svg/SVGResourcesCache.h: Added typedef CacheMap, and changed value
        type to OwnPtr.

2013-05-07  Anders Carlsson  <andersca@apple.com>

        REGRESSION(r149647): Assertion failure in LocalStorageDatabaseTracker::setLocalStorageDirectoryInternal
        https://bugs.webkit.org/show_bug.cgi?id=115711

        Reviewed by Andreas Kling.

        Export SQLiteDatabase::close.

        * WebCore.exp.in:

2013-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        Add an 'isReadOnly' member to IDL parse tree structure
        https://bugs.webkit.org/show_bug.cgi?id=115704

        Reviewed by Kentaro Hara.

        Add an 'isReadOnly' member to IDL parse tree structure by merging
        https://chromium.googlesource.com/chromium/blink/+/d6add80ecd08bcd88a6ae0e1698d929830b3bd8b
        and update Objective-C, C++, and GObject binding generators to use isReadOnly.

        * bindings/scripts/CodeGeneratorCPP.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (GetWriteableProperties):
        (GenerateProperty):
        (GenerateFunctions):
        * bindings/scripts/CodeGeneratorJS.pm:
        (IsReadonly):
        * bindings/scripts/CodeGeneratorObjC.pm:
        (GenerateHeader):
        (GenerateImplementation):
        * bindings/scripts/IDLParser.pm:
        (parseAttributeRest):
        (parseExceptionField):
        (parseAttributeRestOld):

2013-05-07  Darin Adler  <darin@apple.com>

        Use OwnPtr instead of deleteAllValues in SMILTimeContainer
        https://bugs.webkit.org/show_bug.cgi?id=115730

        Reviewed by Geoffrey Garen.

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::~SMILTimeContainer): Removed call to deleteAllValues.
        (WebCore::SMILTimeContainer::schedule): Use add instead of get/set to put a new
        AnimationsVector into the map as needed.
        (WebCore::SMILTimeContainer::setElapsed): Added get since values are OwnPtr now.
        (WebCore::SMILTimeContainer::updateAnimations): Ditto.

        * svg/animation/SMILTimeContainer.h: Changed value type of GroupedAnimationsMap
        to OwnPtr instead of raw pointer.

2013-05-07  Anders Carlsson  <andersca@apple.com>

        Remove AlwaysInline.h from WTF
        https://bugs.webkit.org/show_bug.cgi?id=115727

        Reviewed by Brent Fulgham.

        The macro that used to be in AlwaysInline.h is now in Compiler.h so there's no reason
        to keep AlwaysInline.h around anymore.

        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSDOMWindowCustom.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateHeader):
        * platform/graphics/filters/FEConvolveMatrix.h:
        * rendering/InlineIterator.h:
        * rendering/InlineTextBox.cpp:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderText.cpp:

2013-05-07  peavo@outlook.com  <peavo@outlook.com>

        [Curl] POST requests sometimes fail.
        https://bugs.webkit.org/show_bug.cgi?id=111844

        Reviewed by Brent Fulgham.

        Curl adds the header 'Expect: 100-Continue' when sending a POST request.
        When we receive the header 'HTTP/1.1 100 Continue', we should not call
        ResourceHandleClient::didReceiveResponse(), as this will cancel the request,
        because the MIME type is empty in this case, causing the POST request to fail.
        This header is only sent as an info header, or provisional response.
        
        In addition, this patch changes the classification of http code 304 (Not modified).
        It is not reported as a redirect anymore, but as a response
        (ResourceHandleClient::didReceiveResponse() is called.

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::isHttpInfo): Added helper method to determine if http code is http info.
        (WebCore::isHttpRedirect): Added helper method to determine if http code is http redirect.
        (WebCore::headerCallback): Just return when receiving the header'HTTP/1.1 100 Continue'.

2013-05-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [X11][BlackBerry] Check if MOZ_X11 is defined instead of XP_UNIX npruntime_internal.h
        https://bugs.webkit.org/show_bug.cgi?id=113687

        Reviewed by Anders Carlsson.

        It's assumed that all UNIX platforms use X11 for plugins, which is
        not the case of BlackBerry.

        * bridge/npruntime_internal.h: Use MOZ_X11 instead of XP_UNIX.

2013-05-07  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        HashTraits<RefPtr<P> >::PeekType should be raw pointer for better performance
        https://bugs.webkit.org/show_bug.cgi?id=115646

        Reviewed by Darin Adler.

        No new tests, no new functionality.

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::get):
        (WebCore::AXObjectCache::remove):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::objectFromAXID):
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::getImage):
        * css/InspectorCSSOMWrappers.cpp:
        (WebCore::InspectorCSSOMWrappers::getWrapperForRuleInSheets):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::loadPendingSVGDocuments):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::rootEditableElementForSelectionOnMouseDown):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::elementForAlias):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::findInsertionPointFor):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForURL):
        * loader/archive/ArchiveResourceCollection.cpp:
        (WebCore::ArchiveResourceCollection::archiveResourceForURL):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::transientLocalStorage):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions):
        (WebCore::CompositeAnimation::pauseTransitionAtTime):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateMaskLayer):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::getBlobDataFromURL):
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::pluginForMIMEType):
        (WebCore::PluginDatabase::MIMETypeForExtension):
        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        (showCounterRendererTree):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::getEffectById):
            Updated accordingly to new HashMap<.., RefPtr>::get() semantics.

2013-05-06  Darin Adler  <darin@apple.com>

        Use OwnPtr instead of deleteAllValues in KeyframeValueList
        https://bugs.webkit.org/show_bug.cgi?id=115652

        Reviewed by Simon Fraser.

        Also made a few related style fixes in the functions touched.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::KeyframeValueList::insert): Change argument type to PassOwnPtr
        and update use of m_values since it has OwnPtr now instead of raw pointer.

        * platform/graphics/GraphicsLayer.h: Move conditional includes to a
        separate paragraph, removed an unneeded forward class declaration.
        (WebCore::AnimationValue::AnimationValue): Marked this constructor explicit
        and removed an unneeded if statement.
        (WebCore::AnimationValue::clone): Changed to use adoptPtr and PassOwnPtr.
        (WebCore::FloatAnimationValue::clone): Changed this to return a PassOwnPtr.
        (WebCore::TransformAnimationValue::TransformAnimationValue): Marked explicit.
        (WebCore::TransformAnimationValue::clone): Changed to use adoptPtr and PassOwnPtr.
        (WebCore::FilterAnimationValue::FilterAnimationValue): Marked explicit.
        (WebCore::FilterAnimationValue::clone): Changed to use adoptPtr and PassOwnPtr.
        (WebCore::KeyframeValueList::KeyframeValueList): Marked explicit.
        (WebCore::KeyframeValueList::~KeyframeValueList): Removed, since the default
        destructor works without an explicit deleteAllValues call.
        (WebCore::KeyframeValueList::at): Added call to get needed since the vector
        contains OwnPtr now.
        (WebCore::KeyframeValueList::insert): Changed to take PassOwnPtr and then
        removed now-redundant comment saying "takes ownership of the pointer".
        (WebCore::KeyframeValueList::m_values): Changed type to Vector<OwnPtr>.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation): Added adoptPtr next to the
        all the places new was done before calling KeyframeValueList::insert. Also
        simplified the booleans and #if in this function.
        (WebCore::RenderLayerBacking::startTransition): Ditto.

2013-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        [Replaceable] attributes must be readonly
        https://bugs.webkit.org/show_bug.cgi?id=115692

        Reviewed by Kentaro Hara.

        Merge https://chromium.googlesource.com/chromium/blink/+/ac61fbfe875d3c3c37d529683139ceb0ad4330bb.

        Web IDL specification says [Replaceable] attributes are readonly:
        http://www.w3.org/TR/2012/CR-WebIDL-20120419/#Replaceable

        Update the two instances of [Replaceable] in WebCore that didn't have readonly modifier to match
        the specifcation and the rest of WebCore. There should be no behavioral changes as the code generator
        already assumed [Replaceable] attributes are readonly.

        * html/HTMLDocument.idl:
        * page/DOMWindow.idl:

2013-05-06  Darin Adler  <darin@apple.com>

        Use OwnPtr instead of deleteAllValues in DocumentMarkerController
        https://bugs.webkit.org/show_bug.cgi?id=115655

        Reviewed by Andreas Kling.

        * dom/DocumentMarkerController.cpp:
        (WebCore::DocumentMarkerController::~DocumentMarkerController): Added here
        so the destructor isn't implicitly inline.
        (WebCore::DocumentMarkerController::detach): Removed now-unneeded code to
        call deleteAllValues. Also moved code to set m_possiblyExistingMarkerTypes
        to after clearing m_markers to be consistent with how other functions do it.
        (WebCore::DocumentMarkerController::addMarker): Changed code to use the
        add idiom to avoid double hash table lookup. Changed to use adoptPtr since
        the map now contains OwnPtr.
        (WebCore::DocumentMarkerController::removeMarkers): Removed explicit calls
        to delete list since removing the entry from the map now deletes the list.
        Moved the code to check if m_markers has become empty so it's only called
        when we actually remove something from m_markers.
        (WebCore::DocumentMarkerController::markerContainingPoint): Added get().
        (WebCore::DocumentMarkerController::renderedRectsForMarkers): Added get().
        (WebCore::DocumentMarkerController::removeMarkers): Changed to use a new
        interface to removeMarkersFromList. This eliminated the need to copy the
        entire map when removing markers; instead we can just copy the keys.
        (WebCore::DocumentMarkerController::removeMarkersFromList): Changed to use
        an iterator instead of being passed the key/value pair from the map. Also
        rearranged the logic so there is less repeated code and removed some now-
        unneeded comments.
        (WebCore::DocumentMarkerController::repaintMarkers): Added get().
        (WebCore::DocumentMarkerController::invalidateRenderedRectsForMarkersInRect):
        Added get().
        (WebCore::DocumentMarkerController::showMarkers): Added get().

        * dom/DocumentMarkerController.h: Removed implementation of the destructor
        that called the detach function; that was just sharing the now-unneeded
        call to deleteAllValues. Changed the type of the map to use an OwnPtr for
        the value. Changed the interface of removeMarkersFromList to take a map
        iterator instead of a key/value pair.

2013-05-06  Beth Dakin  <bdakin@apple.com>

        Reproducible crash in RenderBoxModelObject::adjustedPositionRelativeToOffsetParent()
        https://bugs.webkit.org/show_bug.cgi?id=115685
        -and corresponding-
        <rdar://problem/13700734>

        Reviewed by Sam Weinig.

        This fix here is just to rollout the change that caused this regression, which is 
        http://trac.webkit.org/changeset/147395 . That change was not intended to cause any 
        behavioral differences. The change made it so RenderObject::offsetParent() returned 
        an Element* instead of a RenderBoxModelObject*. However, can muddle things when the 
        object we are returning is a continuation. Multiple RenderObjects have the same 
        Element in a continuation, so this new code can lead to a crash in 
        adjustedPositionRelativeToOffsetParent() when we expect to walk the RenderObject 
        chain and find the offsetParent in the Element’s parent chain. But we might crash in 
        some complicated continuation scenarios because we lost this disambiguation of which 
        RenderObject to start with.

        Roll out.
        * dom/Element.cpp:
        (WebCore::Element::offsetParent):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::adjustedPositionRelativeToOffsetParent):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::offsetParent):
        * rendering/RenderObject.h:
        (RenderObject):

2013-05-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unify ways to cache named item in HTMLCollections
        https://bugs.webkit.org/show_bug.cgi?id=115584

        Reviewed by Antti Koivisto.

        Refactor the code to share the same infrastructure for both id and name attributes maps.

        Also get rid of shouldRegisterAsNamedItem and shouldRegisterAsExtraNamedItem from various Element subclasses
        as these member functions were duplicating the information in HTMLNameCollection.cpp. Nevertheless, HTMLImageElement
        and HTMLObjectElement still update HTMLDocument's window and document name getter maps when their presence as named
        item changes due to an attribute change and children changes respectively.

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::namedItemGetter): Use windowNamedItemMap().containsSingle() instead of collection->hasExactlyOneItem() to
        avoid instantiating HTMLCollection until we know for sure we're returning multiple items.
        (WebCore::JSDOMWindow::getOwnPropertySlot): Call windowNamedItemMap().contains() instead of document->hasNamedItem()
        since the latter has been removed.
        (WebCore::JSDOMWindow::getOwnPropertySlotByIndex): Ditto.
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor): Ditto.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::canGetItemsForName): Call documentNamedItemMap().contains() instead of
        document->hasExtraNamedItem() since the latter has been removed.
        (WebCore::JSHTMLDocument::nameGetter): Use documentNamedItemMap().containsSingle() instead of
        collection->hasExactlyOneItem() to avoid instantiating HTMLCollection when we're returning the first item.

        * dom/Document.cpp:
        (WebCore::Document::windowNamedItems): Instantiate WindowNameCollection, which is a subclass of HTMLNameCollection,
        instead of HTMLNameCollection since the latter class no longer has a public constructor.
        (WebCore::Document::documentNamedItems): Ditto; instantiate DocumentNameCollection.

        * dom/DocumentOrderedMap.cpp:
        (WebCore::keyMatchesName): Added for name attribute.
        (WebCore::keyMatchesWindowNamedItem): Added for window name getter.
        (WebCore::keyMatchesDocumentNamedItem): Added for document name getter.
        (WebCore::DocumentOrderedMap::getElementByName): Added for name attribute.
        (WebCore::DocumentOrderedMap::getElementByWindowNamedItem): Added for window name getter.
        (WebCore::DocumentOrderedMap::getElementByDocumentNamedItem): Added for document name getter.

        * dom/DocumentOrderedMap.h:
        (WebCore::DocumentOrderedMap::containsSingle): Added.
        (WebCore::DocumentOrderedMap::containsMultiple): Fixed the bug that containsMultiple returns true even when
        the duplicate count has been reduced to 1. Unfortunately this behavior change is not testable because the old code
        worked properly (though less efficient) even if this function returned a wrong value.

        * dom/Element.cpp:
        (WebCore::Element::insertedInto):
        (WebCore::Element::removedFrom):
        (WebCore::Element::updateName): Added. Updates TreeScope's name attribute map as well as HTMLDocument's window name
        and document name maps.
        (WebCore::Element::updateId): Added the code to update HTMLDocument's window name and document name maps.

        * dom/Element.h:
        (Element): Removed shouldRegisterAsNamedItem, shouldRegisterAsExtraNamedItem, updateNamedItemRegistration, and
        updateExtraNamedItemRegistration as they're no longer used.

        * dom/TreeScope.cpp:
        (SameSizeAsTreeScope):
        (WebCore::TreeScope::getElementByName): Added.
        (WebCore::TreeScope::addElementByName): Added.
        (WebCore::TreeScope::removeElementByName): Added.

        * dom/TreeScope.h:
        (WebCore::TreeScope::hasElementWithName): Added.
        (WebCore::TreeScope::containsMultipleElementsWithName): Added.

        * html/HTMLAppletElement.h:
        (HTMLAppletElement):

        * html/HTMLCollection.cpp:
        (WebCore::isMatchingElement): Use HTMLNameCollection subclasses' nodeMatches.
        (WebCore::HTMLCollection::namedItem): Added a fast path for named item.
        (WebCore::HTMLCollection::hasNamedItem): Use namedItem to avoid the work in the fast path.

        * html/HTMLCollection.h:
        (HTMLCollection): Removed checkForNameMatch.
        * html/HTMLDocument.cpp:
        (WebCore): Removed various member functions related to m_namedItemCounts and m_extraNamedItemCounts.

        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::documentNamedItemMap): Added.
        (WebCore::HTMLDocument::windowNamedItemMap): Added.
        (HTMLDocument): Replaced m_namedItemCounts and m_extraNamedItemCounts by m_documentNamedItem and m_windowNamedItem.
        Note that they're not one to one.

        * html/HTMLEmbedElement.h:
        (HTMLEmbedElement):

        * html/HTMLFormElement.h:
        (HTMLFormElement):

        * html/HTMLIFrameElement.cpp: Removed the code to track the element's name since we already do this in Element.
        (WebCore::HTMLIFrameElement::parseAttribute):

        * html/HTMLIFrameElement.h:
        (HTMLIFrameElement):

        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseAttribute): Update the HTMLDocument's maps when the name attribute's existence
        changes its presence on window and document name getters in turn. This behavior change, again, appears to be
        untestable due to the old being more graceful when DocumentOrderedMap returned a wrong value.

        * html/HTMLImageElement.h:

        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::HTMLNameCollection): No longer overrides itemAfter. This enables backwards traversals
        of the tree along with other optimizations in HTMLCollection.

        (WebCore::WindowNameCollection::nodeMatchesIfNameAttributeMatch): Added. Used in Element::updateName to determine
        whether add() or remove() should be called on HTMLDocument's maps.
        (WebCore::WindowNameCollection::nodeMatches): Added.

        (WebCore::DocumentNameCollection::nodeMatchesIfIdAttributeMatch): Added. Used in Element::updateName to determine
        whether add() or remove() should be called on HTMLDocument's maps.
        (WebCore::DocumentNameCollection::nodeMatchesIfNameAttributeMatch): Ditto.
        (WebCore::DocumentNameCollection::nodeMatches): Added.

        * html/HTMLNameCollection.h:
        (HTMLNameCollection): Removed create since this class shouldn't be instantiated on its own.

        (WebCore::WindowNameCollection): Added.
        (WebCore::WindowNameCollection::create): Added.
        (WebCore::WindowNameCollection::nodeMatches): Added.
        (WebCore::WindowNameCollection::nodeMatchesIfIdAttributeMatch): Added.
        (WebCore::WindowNameCollection::WindowNameCollection): Added.
        (WebCore::DocumentNameCollection): Added.
        (WebCore::DocumentNameCollection::create): Added.
        (WebCore::DocumentNameCollection::nodeMatches): Added.
        (WebCore::DocumentNameCollection::DocumentNameCollection): Added.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateDocNamedItem): Update both window and document getter maps of HTMLDocument when
        the visibility of this element changes due to the DOM mutations in the subtree.

        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement):
        (WebCore::toHTMLObjectElement): Added.

2013-05-06  Andreas Kling  <akling@apple.com>

        Flaky Test: fast/frames/crash-remove-iframe-during-object-beforeload.html
        <http://webkit.org/b/115674>

        Reviewed by Alexey Proskuryakov.

        Don't cache the Document::renderer() in a local since layout may blow it away.

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

2013-05-06  Anders Carlsson  <andersca@apple.com>

        More work on LocalStorageDatabaseTracker
        https://bugs.webkit.org/show_bug.cgi?id=115680

        Reviewed by Andreas Kling.

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2013-05-06  Manuel Rego Casasnovas  <rego@igalia.com>

        [GTK] Add webkit_uri_scheme_request_finish_error
        https://bugs.webkit.org/show_bug.cgi?id=94316

        Reviewed by Anders Carlsson.

        No behaviour change, covered by existing tests.

        * platform/network/soup/ResourceError.h:
        (ResourceError): Rename genericIOError() to genericGError().
        * platform/network/soup/ResourceErrorSoup.cpp:
        (WebCore::ResourceError::httpError): Use genercicGError() instead of
        genericIOError().
        (WebCore::ResourceError::genericGError): Use error domain instead of
        always return a G_IO_ERROR.
        * platform/network/soup/ResourceHandleSoup.cpp: Use genericGError()
        instead of genericIOError().
        (WebCore::redirectSkipCallback):
        (WebCore::readCallback):

2013-05-06  Bem Jones-Bey  <bjonesbe@adobe.com>

        Heap-use-after-free in WebCore::InlineFlowBox::deleteLine
        https://bugs.webkit.org/show_bug.cgi?id=114772

        Reviewed by David Hyatt.

        Fix the new use after free issues in Ruby.

        Test: fast/ruby/ruby-svg-crash.html

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):

2013-05-06  Robert Hogan  <robert@webkit.org>

        REGRESSION(r140024): child of fixed div inside of absolute div does not get resized when window is resized
        https://bugs.webkit.org/show_bug.cgi?id=115379

        Reviewed by David Hyatt.

        When detecting whether a fixed pos object needed to move with an absolute ancestor we checked
        whether the logical width of the fixed pos object had changed. This check prevented the fixed pos
        object from detecting later on that it needed to relayout its children in layoutBlock(). So recompute the width
        for our check instead of updating it.

        Test: fast/block/positioning/child-of-fixed-pos-after-movement.html

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

2013-05-06  Mike Lattanzio  <mlattanzio@blackberry.com>

        [BlackBerry] Enable and Expose Text Autosizing through BlackBerry::WebKit::WebSettings
        https://bugs.webkit.org/show_bug.cgi?id=113808

        Reviewed by Rob Buis.

        Added TextAutosizer.cpp to the BlackBerry build.

        * PlatformBlackBerry.cmake:

2013-05-06  Darin Adler  <darin@apple.com>

        Use OwnPtr instead of deleteAllValues in SVGAttributeToPropertyMap
        https://bugs.webkit.org/show_bug.cgi?id=115653

        Reviewed by Andreas Kling.

        Also made a few style fixes to the code at the same time.

        * svg/properties/SVGAttributeToPropertyMap.cpp:
        (WebCore::SVGAttributeToPropertyMap::addProperties): Changed argument to
        const because there was no reason for it to be non-const. Added calls to
        get() since the items in the map are now OwnPtr. Added a couple FIXMEs
        about performance mistakes.
        (WebCore::SVGAttributeToPropertyMap::addProperty): Added a FIXME about
        a small performance mistake, and updated to use OwnPtr instead of raw
        pointers.
        (WebCore::SVGAttributeToPropertyMap::synchronizeProperties): Added a call
        to get().

        * svg/properties/SVGAttributeToPropertyMap.h: Removed now-unneeded
        constructor and destructor definitions. Changed the type for the
        addProperties to be const&. Added a comment about incorrect function
        naming. Changed the type of the map data member to use OwnPtr.

2013-05-06  Antti Koivisto  <antti@apple.com>

        Remove more code that was only needed for younger/older shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=115662

        Reviewed by Andreas Kling.

        This is dead code.

        * WebCore.exp.in:
        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::nodeCanBeDistributed):
        (WebCore::ComposedShadowTreeWalker::traverseParentBackToShadowRootOrHost):
        * dom/EventPathWalker.cpp:
        (WebCore::EventPathWalker::moveToParent):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ScopeContentDistribution::ScopeContentDistribution):
        (WebCore::ScopeContentDistribution::registerInsertionPoint):
        (WebCore::ScopeContentDistribution::unregisterInsertionPoint):
        (WebCore):
        (WebCore::ScopeContentDistribution::hasInsertionPoint):
        (WebCore::ContentDistributor::invalidate):
        * html/shadow/ContentDistributor.h:
        (ScopeContentDistribution):
        * html/shadow/InsertionPoint.cpp:
        (WebCore::InsertionPoint::contains):
        (WebCore::resolveReprojection):
        (WebCore::collectInsertionPointsWhereNodeIsDistributed):
        * html/shadow/InsertionPoint.h:
        * testing/Internals.cpp:
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-05-06  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update HTML5 progress bar UX.
        https://bugs.webkit.org/show_bug.cgi?id=115284.

        Reviewed by Rob Buis.

        BlackBerry PR 331729.
        Internally Reviewed by Jeff Rogers.

        Use GL render to paint progress bar to meet UX specs.
        Also change the slider range to GL render.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::RenderThemeBlackBerry::paintSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintProgressTrackRect):
        (WebCore::drawProgressTexture):
        (WebCore::RenderThemeBlackBerry::paintProgressBar):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2013-05-06  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Exclusions] remove unused -webkit-wrap property
        https://bugs.webkit.org/show_bug.cgi?id=102105

        Reviewed by Darin Adler.

        Remove -webkit-wrap property and all mentions. This property doesn't
        exist in the spec anymore, and was never implemented more than just
        parsing the property.

        * WebCore.order:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::isInheritedProperty):
        * css/CSSPropertyNames.in:
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyValue):
        (WebCore::StylePropertySet::asText):
        * css/StylePropertyShorthand.cpp:
        (WebCore::shorthandForProperty):
        * css/StylePropertyShorthand.h:
        (WebCore):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::applyProperty):

2013-05-06  Anders Carlsson  <andersca@apple.com>

        Write storage changes to disk
        https://bugs.webkit.org/show_bug.cgi?id=115660

        Reviewed by Andreas Kling.

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2013-05-06  Tiancheng Jiang  <tijiang@rim.com>

        [BlackBerry] Update HTML5 progress bar UX.
        https://bugs.webkit.org/show_bug.cgi?id=115284.

        Reviewed by Rob Buis.

        BlackBerry PR 331729.
        Internally Reviewed by Jeff Rogers.

        * platform/blackberry/RenderThemeBlackBerry.cpp:
        (WebCore):
        (WebCore::createLinearGradient):
        (WebCore::RenderThemeBlackBerry::paintSliderTrack):
        (WebCore::RenderThemeBlackBerry::paintSliderTrackRect):
        (WebCore::RenderThemeBlackBerry::paintProgressBar):
        * platform/blackberry/RenderThemeBlackBerry.h:
        (RenderThemeBlackBerry):

2013-05-06  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>

        [texmap] draw content if graphics layer displays a video
        https://bugs.webkit.org/show_bug.cgi?id=114742

        Reviewed by Noam Rosenthal.

        Bug #86410 focuses on having composited/accelerated video using the
        TextureMapper. But the video is not rendered fast by using the
        repaint() method. In the case of the TextureMapper it is required to
        call a content display as fast as possible.

        This patch adds the class TextureMapperPlatformLayer::Client with the
        method setLayerNeedsDisplay(). The GraphicsLayerTextureMapper
        implements this new class and the new method calls
        setContentsNeedsDisplay(), causing a faster content display when
        requested.

        No new tests. Covered by existing tests.

        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::GraphicsLayerTextureMapper::setContentsToMedia): sets itself
        as the TextureMapperPlatformLayer's client
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h:
        (WebCore::GraphicsLayerTextureMapper::setLayerNeedsDisplay):
        TextureMapperPlatformLayer::Client::setLayerNeedsDisplay implementation
        (GraphicsLayerTextureMapper):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (Client): New class
        (WebCore::TextureMapperPlatformLayer::TextureMapperPlatformLayer):
        (WebCore::TextureMapperPlatformLayer::setClient): client setter
        (WebCore::TextureMapperPlatformLayer::setLayerNeedsDisplay): facade
        for client's method

2013-05-02  David Hyatt  <hyatt@apple.com>

        Improve the performance of RenderDeprecatedFlexibleBox.
        https://bugs.webkit.org/show_bug.cgi?id=115543.

        Optimize deprecated flexible box layout to be much faster. This patch implements
        the following optimizations in the deprecated flexible box:
        
        (1) Defer repainting of children until they have been placed into their final
        positions. This is done by collecting all of the old frame rects into a Vector
        and then doing a walk after layout is finished to repaint any of the children if
        they moved from that position. This code matches the new RenderFlexibleBox's system
        for repainting moved children.
        
        (2) Implement support for layout deltas. We keep a Vector of layout deltas for each
        child as we shift them around, and every time we lay a child out again, we apply that
        child's current layout delta to avoid repainting at the new position. RenderFlexibleBox
        does not have support for layout deltas yet, so we'll need to implement this in the
        new flexbox code as well.
        
        (3) Optimize flexible objects to avoid laying them out unflexed. When laying out
        horizontal and vertical boxes now, we lay out the inflexible items first. We then
        check to see if the inflexible extent of all those children has changed.
        
        If this extent didn't change, and the flexible items either don't need layout or there
        is only one flexing item, then we avoid laying out the item in an unflexed state
        and simply lay out one time with the flex applied instead. The new RenderFlexibleBox
        does not have these optimizations and would benefit from them in the block-direction box
        case (it uses preferred logical widths in the inline-direction box case, and so avoided
        layouts in that direction already).
        
        Reviewed by Beth Dakin.

        * rendering/RenderDeprecatedFlexibleBox.cpp:
        (WebCore::appendChildFrameRects):
        Cache all of the old child frame rects so that we can compare them with the final
        positions for repaintDuringLayoutIfMoved. This collection is identical to what the
        new flexbox code does.
        
        (WebCore::appendChildLayoutDeltas):
        Build up a vector that tracks layout deltas. We apply these layout deltas every
        time we lay out a child so that any repainting done during layout ignores our shifted
        position and just keeps using the old position. The new flexbox does not have this
        code yet.

        (WebCore::repaintChildrenDuringLayoutIfMoved):
        After final placement of children, we do a single pass over all of the children and
        repaint them if they shifted their positions. This matches how the new flexbox works.
        
        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
        Collect the frame rects and layout deltas, and defer repainting of children to the
        end of layout.
        
        (WebCore::gatherFlexChildrenInfo):
        Don't clear flex overrides when gathering flex information. Add additional information
        such as the number of flexing items so that we can use it to optimize flex layout.
        
        (WebCore::layoutChildIfNeededApplyingDelta):
        A helper for applying your current layout delta for a child when laying that child out.
        
        (WebCore::RenderDeprecatedFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderDeprecatedFlexibleBox::layoutVerticalBox):
        Both methods are patched to aggregate layout deltas as children move around during
        the multiple passes. In addition we now optimize layout in a couple of cases, such
        as when the inflexible space stays the same (thus giving a flexible object the
        same amount of available space, avoiding a need to lay out unflexed first).
        
        (WebCore::RenderDeprecatedFlexibleBox::placeChild):
        Patched to add to our cached layout delta for that child when we do a movement.

        * rendering/RenderDeprecatedFlexibleBox.h:
        Changes to method signatures.

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

        REGRESSION (r125592): Reproducible crash in DOMWindow::open when a delegate closes the new window in decidePolicyForNavigationAction
        https://bugs.webkit.org/show_bug.cgi?id=115609

        Reviewed by Oliver Hunt.

        When a window created by window.open() is navigated, the embedder might
        close it in decidePolicyForNavigationAction. If this happens, we end up
        with a pointer to a deleted Frame.

        Fix this by keeping a strong reference to the Frame created by
        createWindow(). We can later determine if the window was closed by
        checking if the new Frame has a detached Page.

        Added an API test: WebKit1.CloseNewWindowInNavigationPolicyDelegate.

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

2013-05-06  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Move GeolocationProviderGeoclue into libPlatform
        https://bugs.webkit.org/show_bug.cgi?id=115591

        Reviewed by Martin Robinson.

        No new tests - no new functionality.

        * GNUmakefile.am: Remove the Source/WebCore/platform/geoclue directory from the webkitgtk_cppflags list.
        * GNUmakefile.list.am: Move the GeolocationProviderGeoclue(Client) sources under platform_sources.

2013-05-06  Zoltan Arvai  <zarvai@inf.u-szeged.hu>

        [Qt][Win] Unreviewed buildfix after r149579.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addQtWebKitPluginPath):

2013-05-06  Antoine Quint  <graouts@apple.com>

        Manage the presentation of the snapshotted plug-in using JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=115548

        Reviewed by Dean Jackson.

        * Resources/plugIns.js:
        (createOverlay):
        Implement the createOverlay(shadowRoot, titleText, subtitleText) method
        that is called from WebCore (HTMLPlugInImageElement::didAddUserAgentShadowRoot)
        to allow the injected script to customize the shadow root for a snapshotted
        plug-in. This is a default implementation, clients are expected to customize
        this by providing their own JS file with enhanced behavior.

        * css/CSSDefaultStyleSheets.cpp:
        (WebCore::CSSDefaultStyleSheets::ensureDefaultStyleSheetsForElement):
        Since we no longer have a default shadow tree generated in C++, it makes little
        sense for clients to extend the default snapshotted plug-in stylesheet, so we
        only insert it if no custom one is provided by the chrome client.

        * css/plugIns.css:
        Better styling of the default snapshotted plug-in overlay look by using CSS
        flex boxes. Also using more explicit selector as an optimization.

        * dom/Document.cpp:
        (WebCore::Document::ensurePlugInsInjectedScript):
        Expose a new method to allow HTMLPlugInImageElement instances to ensure that
        the JavaScript code required to customize the snapshotted plug-in's shadow root
        is indeed injected in the current document. The actual injection would only
        happen once per document so all snapshotted plug-ins share the same scripting
        context.

        * dom/Document.h:
        Expose the new ensurePlugInsInjectedScript method and the m_hasInjectedPlugInsScript
        property used to ensure injection happens only once per document.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::titleText):
        (WebCore::subtitleText):
        Store the localized strings for each mime-type in a static hash map as it can be
        costly to retrieve them each time from the client. It is expected the chrome client
        will want to provide localized strings taking into account the snapshotted plug-in's
        mime-type, so we're adding this as a parameter.
        (WebCore::HTMLPlugInImageElement::checkSnapshotStatus):
        Dispatch a "resize" event to the shadow root to notify the injected script that the
        snapshotted plug-in's metrics have changed and to allow the overlay to update itself
        as a result.
        (WebCore::HTMLPlugInImageElement::didAddUserAgentShadowRoot):
        Remove all the DOM generation code in favor of an approach where we create a shared
        DOM scripting world in which we inject JavaScript code that will perform the same
        task but will additionally be provided by the client in order to provide a completely
        custom overlay for the snapshotted plug-in. The sole contract is for the JavaScript
        to implement a createOverlay(shadowRoot, titleText, subtitleText) method.
        (WebCore::HTMLPlugInImageElement::partOfSnapshotOverlay):
        Renamed method to be generic to the overlay as opposed to text labels and use the
        element with CSS class name "snapshot-overlay" as the comparison node.

        * html/HTMLPlugInImageElement.h:
        (HTMLPlugInImageElement):
        Removing a couple of unused members since we no longer generate the shadow DOM from C++
        and rename the partOfSnapshotLabel method to partOfSnapshotOverlay.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::plugInStartLabelTitle):
        (WebCore::ChromeClient::plugInStartLabelSubtitle):
        (WebCore::ChromeClient::plugInExtraScript):
        Pass in the mime-type to plugInStartLabelTitle and plugInStartLabelSubtitle and expose
        a new plugInExtraScript method to allow the chrome client to provide a custom JS file
        for the management of the shadow root.

        * rendering/RenderSnapshottedPlugIn.cpp:
        (WebCore::RenderSnapshottedPlugIn::handleEvent):
        Update the terminology from "label" to "overlay" per the changes made in HTMLPlugInImageElement.

2013-05-06  Robert Hogan  <robert@webkit.org>

        REGRESSION(r140907) - Backport blink r149612 to fix vertical-align and rowspan issue
        https://bugs.webkit.org/show_bug.cgi?id=115611

        Patch by Julien Chaffraix.
        Reviewed by Benjamin Poulain.

        Backport phttps://src.chromium.org/viewvc/blink?view=rev&revision=149612 from 
        https://chromiumcodereview.appspot.com/14105010
        
        Fix the rows' height computation with vertical-align: baseline and rowspan.
        r140907 was careful in avoiding updating the baseline descent for
        spanning cells. However it still added the non-spanning cells baseline
        descent to the spanning cells' row height computation.
        This change avoids the previous issue by not adding the baseline
        descent in this case.

        Test: fast/table/baseline-align-rowspan.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowLogicalHeight):

2013-05-05  Anders Carlsson  <andersca@apple.com>

        Remove Vector::prepend
        https://bugs.webkit.org/show_bug.cgi?id=115618

        Reviewed by Geoffrey Garen.

        Replace calls to Vector::prepend with either Vector::insert,
        or a combination of Vector::append and Vector::reverse.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::scrollToGlobalPoint):
        * css/CSSGradientValue.cpp:
        (WebCore::CSSGradientValue::addStops):
        * css/CSSValueList.h:
        (WebCore::CSSValueList::prepend):
        * dom/Document.cpp:
        (WebCore::Document::iconURLs):
        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::prependContext):
        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):
        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::padDailyCountsForNewVisit):
        (WebCore::HistoryItem::collapseDailyVisitsToWeekly):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::addInspectedObject):
        * platform/graphics/SVGGlyph.cpp:
        (WebCore::charactersWithArabicForm):

2013-05-05  Sam Weinig  <sam@webkit.org>

        Remove empty function SQLiteFileSystem::registerSQLiteVFS() and its callers
        https://bugs.webkit.org/show_bug.cgi?id=115619

        Reviewed by Dan Bernstein.

        * Modules/webdatabase/DatabaseTracker.cpp:
        * platform/sql/SQLiteFileSystem.cpp:
        * platform/sql/SQLiteFileSystem.h:
        * storage/StorageTracker.cpp:

2013-05-05  Chris Fleizach  <cfleizach@apple.com>

        AX: aria-checked not exposed correctly on menuitemcheckbox or menuitemradio roles
        https://bugs.webkit.org/show_bug.cgi?id=115499

        Reviewed by Tim Horton.

        Expose isChecked() for menu item objects.
        Return the Mac-platform specific value that you find on menu items for "checked" menu items.

        Test: platform/mac/accessibility/aria-menuitem-checked-value.html

        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::isChecked):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:]):

2013-05-05  Tim Horton  <timothy_horton@apple.com>

        [wk2] Page Overlays: deviceScaleFactor doesn't update when the display changes
        https://bugs.webkit.org/show_bug.cgi?id=115577
        <rdar://problem/13762583>

        Reviewed by Darin Adler.

        * WebCore.exp.in:
        Export GraphicsLayer::noteDeviceOrPageScaleFactorChangedIncludingDescendants

2013-05-05  Anders Carlsson  <andersca@apple.com>

        Remove the Vector::append overload that takes a Vector
        https://bugs.webkit.org/show_bug.cgi?id=115535

        Reviewed by Andreas Kling.

        Use Vector::appendVector instead.

        * Modules/indexeddb/IDBBackingStore.cpp:
        (WebCore::IDBBackingStore::putRecord):
        (WebCore::IDBBackingStore::putIndexDataForRecord):
        * Modules/indexeddb/IDBLevelDBCoding.cpp:
        (WebCore::IDBLevelDBCoding::encodeStringWithLength):
        (WebCore::IDBLevelDBCoding::encodeIDBKey):
        (WebCore::IDBLevelDBCoding::encodeIDBKeyPath):
        (WebCore::IDBLevelDBCoding::SchemaVersionKey::encode):
        (WebCore::IDBLevelDBCoding::MaxDatabaseIdKey::encode):
        (WebCore::IDBLevelDBCoding::DataVersionKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseNameKey::encode):
        (WebCore::IDBLevelDBCoding::DatabaseMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::IndexMetaDataKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::IndexFreeListKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreNamesKey::encode):
        (WebCore::IDBLevelDBCoding::IndexNamesKey::encode):
        (WebCore::IDBLevelDBCoding::ObjectStoreDataKey::encode):
        (WebCore::IDBLevelDBCoding::ExistsEntryKey::encode):
        (WebCore::IDBLevelDBCoding::IndexDataKey::encode):
        * Modules/webaudio/AudioContext.cpp:
        (WebCore::AudioContext::clear):
        (WebCore::AudioContext::scheduleNodeDeletion):
        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addTableCellChild):
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::cells):
        * css/RuleFeature.cpp:
        (WebCore::RuleFeatureSet::add):
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::addToMatchedPropertiesCache):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::collectActiveCSSStyleSheetsFromSeamlessParents):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/Range.cpp:
        (WebCore::Range::getBorderAndTextQuads):
        * html/FormController.cpp:
        (WebCore::FormController::getReferencedFilePaths):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setLineDash):
        * html/parser/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::tryToEnsureNoahsArkConditionQuickly):
        * html/track/WebVTTToken.h:
        (WebCore::WebVTTToken::addNewClass):
        (WebCore::WebVTTToken::addNewAnnotation):
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::preferredLanguages):
        * platform/FileChooser.cpp:
        (WebCore::FileChooserSettings::acceptTypes):
        * platform/SharedBufferChunkReader.cpp:
        (WebCore::SharedBufferChunkReader::nextChunk):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::getSitesInMediaCache):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::updateSublayerList):
        * platform/mac/PasteboardMac.mm:
        (WebCore::createWritableTypesForImage):
        (WebCore::writableTypesForImage):
        (WebCore::Pasteboard::writeSelectionForTypes):
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::generateUniqueBoundaryString):
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::defaultPluginDirectories):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::constructBidiRunsForSegment):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::OverlapMap::popCompositingContainer):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::splitColumn):
        * svg/SVGGlyphMap.h:
        (WebCore::SVGGlyphMap::collectGlyphsForString):
        * xml/XPathNodeSet.h:
        (WebCore::XPath::NodeSet::append):

2013-05-05  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        Make plugIns.js have a non-zero length.

        * Resources/plugIns.js:

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

        Animations and Transitions should not start when globally suspended
        https://bugs.webkit.org/show_bug.cgi?id=114915

        Reviewed by Sam Weinig.

        When the Document's AnimationController was suspended, we still
        started new transitions and animations. Change this so that
        animations enter a paused-but-new state, where they are frozen
        until the AnimationController resumes. At that time, it is as
        if they had just appeared: any delay counts down before
        the animation starts.

        For transitions, the change in value must still happen, but
        it does so immediately. No transitionend event should be fired.
        This produces a slightly confusing behaviour, because any
        in-progress transitions are suspended, but any new style changes
        happen instantly. This might sound contradictory, but in general
        suspending the document is a rare (and dangerous) thing to do.

        Previously, the Document would call resumeAnimations as it loaded,
        effectively starting all the animations. This meant if you suspended
        animations before loading a document, it was ignored as soon as the
        load finished. Now there is a separate method startAnimationsIfNotSuspended
        which checks to see if the document is suspended as it loads.

        In order to handle this case, I added a new state to the Animation
        machinery: AnimationStatePausedNew. This is an animation that was created
        in the suspended state.

        Tests: animations/added-while-suspended.html
               transitions/started-while-suspended.html

        * WebCore.exp.in: Export AnimationController::isSuspended().

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
            resumeAnimationsForDocument() -> startAnimationsIfNotSuspended()

        * page/animation/AnimationBase.cpp:
        (WebCore::nameForState): New name for AnimationStatePausedNew.
        (WebCore::AnimationBase::updateStateMachine): Handle new state AnimationStatePausedNew. The
            most important change is that when go from PausedNew to Running, we jump back into
            the New state and continue from there.
        (WebCore::AnimationBase::updatePlayState): suspended -> isSuspended
        * page/animation/AnimationBase.h: New state: AnimationStatePausedNew
        (WebCore::AnimationBase::waitingToStart): Add AnimationStatePausedNew.
        (WebCore::AnimationBase::paused): Add AnimationStatePausedNew.
        (WebCore::AnimationBase::isNew): Add AnimationStatePausedNew.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::AnimationControllerPrivate): Initialise m_suspended.
        (WebCore::AnimationControllerPrivate::clear): suspended -> isSuspended
        (WebCore::AnimationControllerPrivate::updateAnimations): Ditto.
        (WebCore::AnimationControllerPrivate::updateAnimationTimerForRenderer): Ditto.
        (WebCore::AnimationControllerPrivate::suspendAnimations): Update m_suspended.
        (WebCore::AnimationControllerPrivate::resumeAnimations): Ditto.
        (WebCore::AnimationControllerPrivate::suspendAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::resumeAnimationsForDocument):
        (WebCore::AnimationControllerPrivate::startAnimationsIfNotSuspended): New method that will
            only resume animations if we were not globally suspended.
        (WebCore::AnimationController::isSuspended): New method.
        (WebCore::AnimationController::suspendAnimations): Add logging.
        (WebCore::AnimationController::resumeAnimations): Add logging.
        (WebCore::AnimationController::suspendAnimationsForDocument): Add logging.
        (WebCore::AnimationController::resumeAnimationsForDocument): Add logging.
        (WebCore::AnimationController::startAnimationsIfNotSuspended): Calls private method.
        * page/animation/AnimationController.h:
        (AnimationController): Add isSuspended() and animationsForDocumentMayStart().
        * page/animation/AnimationControllerPrivate.h:
        (WebCore::AnimationControllerPrivate::isSuspended): New method.
        (AnimationControllerPrivate): Add m_isSuspended member.

        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::CompositeAnimation): Moved from header - initialise m_isSuspended.
        (WebCore::CompositeAnimation::updateTransitions): Do not create ImplicitAnimation if suspended.
        (WebCore::CompositeAnimation::updateKeyframeAnimations): Move to AnimationStatePausedNew if suspended.
        (WebCore::CompositeAnimation::suspendAnimations): m_suspended -> m_isSuspended
        (WebCore::CompositeAnimation::resumeAnimations): Ditto.
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::isSuspended): Renamed from suspended()

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::animate): If we're in the AnimationStatePausedNew state, then
            we need to go to the first frame (to handle fill mode).

        * testing/Internals.cpp:
        (WebCore::Internals::animationsAreSuspended): New exposed method to reflect AnimationController.
        * testing/Internals.h: Add animationsAreSuspended.
        * testing/Internals.idl: Ditto.

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

        Move PopupMenuMac and SearchPopupMenuMac to Source/WebKit/mac
        matching where they are in WebKit2.

        Reviewed by Anders Carlsson.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/PopupMenuMac.h: Removed.
        * platform/mac/PopupMenuMac.mm: Removed.
        * platform/mac/SearchPopupMenuMac.h: Removed.
        * platform/mac/SearchPopupMenuMac.mm: Removed.

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

        Get rid of special cases in AddIncludesForTypeInImpl
        https://bugs.webkit.org/show_bug.cgi?id=115602

        Reviewed by Benjamin Poulain.

        Get rid of the special cases in AddIncludesForTypeInImpl subroutine in the
        JS bindings generator. Those are no longer needed and special cases should
        be avoided in the generator.

        No new tests, no behavior change.

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

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

        Get rid of AddIncludesForSVGAnimatedType in bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=115603

        Reviewed by Benjamin Poulain.

        Remove AddIncludesForSVGAnimatedType subroutine from the bindings generator
        as it is a special case which is no longer needed.

        No new tests, no behavior change.

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

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

        Update code generators to handle a new JavaScript file for snapshotted plug-ins
        https://bugs.webkit.org/show_bug.cgi?id=115596

        Reviewed by Dean Jackson.

        In preparation for https://webkit.org/b/115548, adding a new JS file at
        Resources/plugIns.js that we will use to provide presentation for the
        snapshotted plug-ins overlay.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * Resources/plugIns.js: Added.
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:

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

        REGRESSION(r142647): Flaky Test: fast/frames/crash-remove-iframe-during-object-beforeload.html
        <http://webkit.org/b/115322>
        <rdar://problem/13810719>

        Reviewed by Anders Carlsson.

        Don't cache the FrameView::renderView() in a local since updating Widgets may blow it away.

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

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

        Remove GraphicsContext::strokeArc(), which is unused.

        From Blink r149608 by <jbroman@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=149608>

        This is no longer used since almost a year ago, when HAVE(PATH_BASED_BORDER_RADIUS_DRAWING) was inlined.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/blackberry/GraphicsContextBlackBerry.cpp:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/wince/GraphicsContextWinCE.cpp:

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

        Remove unused CSSSelector::isCustomPseudoType().

        From Blink r149574 by <dominicc@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=149574>

        * css/CSSSelector.h:
        * css/CSSSelector.cpp:

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

        Remove ShadowRoot's previous/next ShadowRoot pointers.
        <http://webkit.org/b/115588>

        Reviewed by Anders Carlsson.

        ShadowRoot no longer inherits from DoublyLinkedListNode<ShadowRoot> because that code wasn't
        doing anything anymore. Shrinks ShadowRoot by two pointers.

        * dom/ElementShadow.h:
        * dom/ShadowRoot.cpp:
        (SameSizeAsShadowRoot):
        (WebCore::ShadowRoot::ShadowRoot):
        (WebCore::ShadowRoot::~ShadowRoot):
        * dom/ShadowRoot.h:

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

        RenderObject: don't change GraphicsContext state when not drawing dashed/dotted lines.

        From Blink r149546 by <jbroman@chromium.org>
        <http://src.chromium.org/viewvc/blink?view=revision&revision=149546>

        Previously, there was asymmetry between changing and restoring state (certain state
        would be restored only if thickness was positive, i.e. a line was actually drawn.)

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

2013-05-03  Andreas Kling  <akling@apple.com>

        Remove CSS selector profiler branches from ElementRuleCollector loop.
        <http://webkit.org/b/115581>

        Reviewed by Antti Koivisto.

        Templatize the method so we don't have to check for active inspector frontends on every
        pass through the loop.

        Time spent in this loop goes down from 0.5% to 0.2% on iTunes Store, WebCore binary size
        goes up 480 bytes (sorry Benjamin, I'll make it up to you.)

        * css/ElementRuleCollector.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::collectMatchingRulesForList):
        (WebCore::ElementRuleCollector::doCollectMatchingRulesForList):

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

        REGRESSION(r140907): Incorrect baseline on cells after updating vertical-align
        https://bugs.webkit.org/show_bug.cgi?id=115432

        Reviewed by Julien Chaffraix.

        If a cell changes vertical-align any intrinsic padding it has is now redundant. It
        needs to calculate its new height from RenderTableRow::layout() and then find its
        new intrinsic padding in RenderTableSection::layoutRows().

        Test: fast/table/correct-baseline-after-style-change.html

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleDidChange):

2013-05-03  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        incorrect repainting when a table has a transform
        https://bugs.webkit.org/show_bug.cgi?id=109867

        Reviewed by Simon Fraser.

        Disable LayoutState when table, tableRow or tableSection render
        objects have transforms or reflections.

        Tests: fast/repaint/reflection-table-layout.html
               fast/repaint/transform-table-layout.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):

2013-05-03  Antti Koivisto  <antti@apple.com>

        Remove concept of younger and older shadow trees
        https://bugs.webkit.org/show_bug.cgi?id=115570

        Reviewed by Andreas Kling.

        Younger and older shadow trees are an obscure corner of the Shadow DOM spec.
        
        Support only one shadow tree per element. This simplifies many things. 

        * dom/ComposedShadowTreeWalker.cpp:
        (WebCore::ComposedShadowTreeWalker::traverseChild):
        (WebCore::ComposedShadowTreeWalker::traverseSiblingInCurrentTree):
        (WebCore):
        (WebCore::ComposedShadowTreeWalker::traverseParent):
        (WebCore::ComposedShadowTreeWalker::traverseParentInCurrentTree):
        (WebCore::ComposedShadowTreeWalker::traverseParentBackToShadowRootOrHost):
        * dom/ComposedShadowTreeWalker.h:
        (WebCore::ComposedShadowTreeWalker::assertPrecondition):
        (ComposedShadowTreeWalker):
        * dom/ContainerNodeAlgorithms.cpp:
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoDocument):
        (WebCore::ChildNodeInsertionNotifier::notifyDescendantInsertedIntoTree):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromDocument):
        (WebCore::ChildNodeRemovalNotifier::notifyDescendantRemovedFromTree):
        (WebCore::ChildFrameDisconnector::collectFrameOwners):
        (WebCore::assertConnectedSubrameCountIsConsistent):
        * dom/Document.cpp:
        (WebCore::Document::buildAccessKeyMap):
        * dom/Element.cpp:
        (WebCore::Element::authorShadowRoot):
        (WebCore::Element::userAgentShadowRoot):
        (WebCore::Element::ensureUserAgentShadowRoot):
        * dom/Element.h:
        (Element):
        (WebCore::Element::hasAuthorShadowRoot):
        * dom/Element.idl:
        * dom/ElementShadow.cpp:
        (WebCore::ElementShadow::addShadowRoot):
        
        Allow only one ShadowRoot per ElementShadow. Remove linked list handling.
        
        (WebCore::ElementShadow::removeAllShadowRoots):
        (WebCore::ElementShadow::attach):
        (WebCore::ElementShadow::detach):
        (WebCore::ElementShadow::childNeedsStyleRecalc):
        (WebCore::ElementShadow::needsStyleRecalc):
        (WebCore::ElementShadow::recalcStyle):
        (WebCore::ElementShadow::removeAllEventListeners):
        * dom/ElementShadow.h:
        (WebCore::ElementShadow::shadowRoot):
        (ElementShadow):
        (WebCore::ElementShadow::host):
        (WebCore::Node::shadowRoot):
        (WebCore):
        * dom/Node.cpp:
        (WebCore):
        (WebCore::Node::showNodePathForThis):
        (WebCore::traverseTreeAndMark):
        (WebCore::showSubTreeAcrossFrame):
        * dom/Node.h:
        (Node):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::insertedInto):
        * dom/ShadowRoot.h:
        (ShadowRoot):
        
            Remove LinkedList base.
        
        * dom/TreeScopeAdopter.cpp:
        (WebCore::TreeScopeAdopter::moveTreeToNewScope):
        (WebCore::TreeScopeAdopter::moveTreeToNewDocument):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        (WebCore::ContentDistributor::invalidate):
        (WebCore::ContentDistributor::ensureSelectFeatureSet):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * page/FocusController.cpp:
        (WebCore::FocusNavigationScope::FocusNavigationScope):
        (WebCore::FocusNavigationScope::focusNavigationScopeOwnedByShadowHost):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::uploadButton):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::updateReferencedText):
        (WebCore::SVGTRefElement::detachTarget):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::clearResourceReferences):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::buildShadowTree):
        * testing/Internals.cpp:
        (WebCore::Internals::ensureShadowRoot):
        (WebCore::Internals::shadowRoot):
        (WebCore):
        * testing/Internals.h:
        (Internals):
        * testing/Internals.idl:

2013-05-03  Martin Robinson  <mrobinson@igalia.com>

        Simplify the #ifdefs in GraphicsContext3D.h
        https://bugs.webkit.org/show_bug.cgi?id=115568

        Reviewed by Daniel Bates.

        * platform/graphics/GraphicsContext3D.h:
        (GraphicsContext3D): Combine #ifdefs paths that have a common
        implementation. This reduces the #ifdef paths from many to just three.
        * platform/graphics/cairo/GraphicsContext3DCairo.cpp:
        (WebCore::GraphicsContext3D::platformTexture): Move the implementation
        here to simplify the header.
        * platform/graphics/efl/GraphicsContext3DEfl.cpp:
        (WebCore::GraphicsContext3D::platformTexture): Ditto.
        (WebCore):

2013-05-03  Brendan Long  <b.long@cablelabs.com>

        [Qt] Build with --video-track fails because String(AtomicString) is ambiguous
        https://bugs.webkit.org/show_bug.cgi?id=115551

        Reviewed by Benjamin Poulain.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::configureTextTrackGroup):
        Change String(textTrack->kind()) to textTrack->kind().string(), and same thing with language.

2013-05-03  Xabier Rodriguez Calvar  <calvaris@igalia.com>

        [GStreamer] GStreamer log crashes in MediaPlayerPrivateGStreamerBase because of uninitialized category
        https://bugs.webkit.org/show_bug.cgi?id=115575

        Reviewed by Philippe Normand.

        No new tests needed.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        Using extern debug category.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
        Declaring debug category as not static.

2013-05-03  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed VS2010 Build Correction.

        * WebCore.vcxproj/WebCore.vcxproj: Exclude CG-only
        SubimageCacheWithTimer.cpp from WinCairo build.

2013-05-03  Viatcheslav Ostapenko  <viatchslav.o@samsung.com>

        [Cairo] Anti-aliasing should not be always disabled for lines
        https://bugs.webkit.org/show_bug.cgi?id=109535

        Reviewed by Martin Robinson.

        Don't disable antialiasing for text lines because it produces ugly picture if
        page is scaled.

        Test: fast/css3-text/css3-text-decoration/text-decoration-line-scaled.html

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawLineOnCairoContext):

2013-05-03  Daniel Bates  <dbates@webkit.org>

        Remove unnecessary include HTMLNames.h from RenderThemeGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115571

        Reviewed by Martin Robinson.

        * platform/gtk/RenderThemeGtk.cpp:

2013-05-03  Alexey Proskuryakov  <ap@apple.com>

        [Mac] setMetadataURL incorrectly treats path bytes as Latin-1
        https://bugs.webkit.org/show_bug.cgi?id=115557

        Reviewed by Sam Weinig.

        * platform/mac/FileSystemMac.mm: (WebCore::setMetaData): Use the correct constructor.

2013-05-03  Andrei Bucur  <abucur@adobe.com>

        Move pixelSnappedLayoutOverflowRect and maxLayoutOverflow from RenderBox
        https://bugs.webkit.org/show_bug.cgi?id=115550

        Reviewed by Simon Fraser.

        The patch moves pixelSnappedLayoutOverflowRect and maxLayoutOverflow out
        of RenderBox somewhere logically closer to their usage place.

        pixelSnappedLayoutOverflowRect - moved to RenderView because it's called only
        for RenderView at this moment.
        There are other places when the overflow rect is pixel snapped but only after
        the rect is adjusted for writing modes or inflated.

        maxLayoutOverflow - moved to RenderTreeAsText.cpp as a static function because
        it's used only there.

        Tests: no new functional change.

        * rendering/RenderBox.h: The functions declarations are removed.
        * rendering/RenderTreeAsText.cpp:
        (WebCore::maxLayoutOverflow): 
        * rendering/RenderView.h:
        (WebCore::RenderView::pixelSnappedLayoutOverflowRect):

2013-05-03  Andreas Kling  <akling@apple.com>

        StyleResolver: Have "list of matched rules" API vend internal types instead of CSSOM wrappers.
        <http://webkit.org/b/115563>

        Reviewed by Antti Koivisto.

        Change styleRulesForElement() and pseudoStyleRulesForElement() to return Vectors of StyleRuleBase
        instead of CSSRuleLists. This defers instantiating CSSOM wrappers until they're actually needed
        for exposure to web API.

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

            Create a StaticCSSRuleList and populate it with CSSOM wrappers for the matched rules.
            This is the one place where we expose this functionality to the web.

        * css/ElementRuleCollector.h:
        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::matchedRuleList):
        (WebCore::ElementRuleCollector::sortAndTransferMatchedRules):

            Collect internal StyleRuleBase pointers here instead of creating wrappers.

        * css/StyleResolver.h:
        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::styleRulesForElement):
        (WebCore::StyleResolver::pseudoStyleRulesForElement):

            Vend said pointers.

        * editing/EditingStyle.cpp:
        (WebCore::styleFromMatchedRulesForElement):

            Dodge CSSOM wrapper instantiation (Woop woop!)

        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::buildObjectForRule):

            Split buildObjectForRule() into two versions, one for CSSStyleRule and one for StyleRule.
            The CSSStyleRule one doesn't need a special path for parent-less rules, since those always
            come in through the StyleRule interface instead. This factoring can be improved further
            after this change.

        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildArrayForMatchedRuleList):

            Tweaked for changes in StyleResolver API.

2013-05-03  Alexey Proskuryakov  <ap@apple.com>

        REGRESSION (r145042): Downloading a file sometimes results in could not create
        a sandbox extension Console message and file stays as a .download file
        https://bugs.webkit.org/show_bug.cgi?id=115559
        <rdar://problem/13785101>

        Reviewed by Sam Weinig.

        CString is evil, it has two lengths which can be different - specifically, fileSystemRepresentation()
        creates a string with maximum possible buffer size. This was confusing resolveSymlinksInPath().

        * platform/cf/FileSystemCF.cpp: (WebCore::fileSystemRepresentation):
        Change fileSystemRepresentation to be less surprising. Really, we should rip apart
        CString and update callers to use better defined semantics, but this is the one function
        that repeatedly causes problems in practice.

2013-05-03  Andreas Kling  <akling@apple.com>

        CSSRule style declarations getters shouldn't be const.
        <http://webkit.org/b/115572>

        Reviewed by Antti Koivisto.

        Accessing the CSSStyleDeclaration for a CSSRule is a potentially mutating operation,
        and should not be const.

        * css/CSSFontFaceRule.cpp:
        (WebCore::CSSFontFaceRule::style):
        * css/CSSFontFaceRule.h:
        * css/CSSPageRule.cpp:
        (WebCore::CSSPageRule::style):
        * css/CSSPageRule.h:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::style):
        * css/CSSStyleRule.h:
        (CSSStyleRule):
        * css/WebKitCSSFilterRule.cpp:
        (WebCore::WebKitCSSFilterRule::style):
        * css/WebKitCSSFilterRule.h:
        * css/WebKitCSSKeyframeRule.cpp:
        (WebCore::WebKitCSSKeyframeRule::style):
        * css/WebKitCSSKeyframeRule.h:
        (WebKitCSSKeyframeRule):
        * css/WebKitCSSViewportRule.cpp:
        (WebCore::WebKitCSSViewportRule::style):
        * css/WebKitCSSViewportRule.h:

2013-05-03  Andreas Kling  <akling@apple.com>

        Use NotNull tag for placement new in WebCore.
        <http://webkit.org/b/115569>

        Reviewed by Antti Koivisto.

        Avoid emitting null checks where we use placement new to construct objects into safe locations.

        * css/StylePropertySet.cpp:
        (WebCore::ImmutableStylePropertySet::create):
        * dom/Element.cpp:
        (WebCore::ShareableElementData::createWithAttributes):
        (WebCore::ShareableElementData::ShareableElementData):
        (WebCore::UniqueElementData::makeShareableCopy):
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::init):
        (WebCore::createQualifiedName):
        * dom/make_names.pl:
        (printNamesCppFile):
        * platform/ThreadGlobalData.h:
        (WebCore::threadGlobalData):
        * platform/graphics/GlyphPage.h:
        (WebCore::GlyphPage::createForMixedFontData):

2013-01-11  Andreas Kling  <akling@apple.com>

        Simplify CSSSelectorList creation/adoption.
        <http://webkit.org/b/106649>

        Reviewed by Antti Koivisto.

        Remove the optimization that special-cased construction of CSSSelectorLists with a single entry.
        This is in preparation for changing the way we store the selector lists on style rules.

        * css/CSSParser.h:
        * css/CSSSelector.h:

            Remove move(PassOwnPtr<CSSSelector> from, CSSSelector* to), inlining it into
            CSSSelectorList::adoptSelectorVector instead.

        * css/CSSSelectorList.cpp:
        (WebCore::CSSSelectorList::CSSSelectorList):
        (WebCore::CSSSelectorList::deleteSelectors):

            Handle all selector list lengths the same way.

        (WebCore::CSSSelectorList::adoptSelectorVector):

            Merge move() from CSSSelector.h into this code since it was the only call site.
            Also some minor readability cleanups.

2013-05-03  Antti Koivisto  <antti@apple.com>

        Remove HTMLShadowElement
        https://bugs.webkit.org/show_bug.cgi?id=115555

        Reviewed by Andreas Kling.

        This is not used internally.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ComposedShadowTreeWalker.cpp:
        * dom/NodeRenderingContext.cpp:
        * html/HTMLElementsAllInOne.cpp:
        * html/HTMLTagNames.in:
        * html/InputType.cpp:
        (WebCore::InputType::destroyShadowSubtree):
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distribute):
        * html/shadow/HTMLShadowElement.cpp: Removed.
        * html/shadow/HTMLShadowElement.h: Removed.
        * html/shadow/HTMLShadowElement.idl: Removed.
        * page/DOMWindow.idl:

2013-05-03  Mikhail Pozdnyakov  <mikhail.pozdnyakov@intel.com>

        Remove WTF::ListRefPtr class
        https://bugs.webkit.org/show_bug.cgi?id=115516

        Reviewed by Anders Carlsson.

        ListRefPtr was used only by FontFamily class, besides it strongly depended
        on FontFamily class semantics which made it non-generic and inappropriate
        for being present inside WTF.

        This patch removes WTF::ListRefPtr class and moves its the functionality
        into FontFamily class.

        No new tests, no change in the behavior.

        * page/FrameTree.h:
        (FrameTree):
        * platform/graphics/FontFamily.h:
        (FontFamily):
        (WebCore::FontFamily::~FontFamily):
        (WebCore):

2013-05-03  Allan Sandfeld Jensen  <allan.jensen@digia.com>

        Crash when calling QWebFrame::evaluateJavaScript
        https://bugs.webkit.org/show_bug.cgi?id=113434

        Reviewed by Simon Hausmann.

        We must take the JS API lock before accessing internal JS methods.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::unwrapBoxedPrimitive):
        (JSC::Bindings::getGregorianDateTimeUTC):
        (JSC::Bindings::convertQVariantToValue):

2013-05-02  Xan Lopez  <xlopez@igalia.com>

        [GTK] Fine tune dependencies for glslang generated files
        https://bugs.webkit.org/show_bug.cgi?id=115537

        Reviewed by Martin Robinson.

        Make glslang.* explictly depend on glslang_tab.*, since the
        dependency does exist. Otherwise Make might decide to compile
        things ahead of time and fail.

        * GNUmakefile.am:

2013-05-02  KyungTae Kim  <ktf.kim@samsung.com>

        Fix build warnings on ResourceHandleClient.h
        https://bugs.webkit.org/show_bug.cgi?id=115540

        Reviewed by Alexey Proskuryakov.

        Comment out the parameter names for 'getOrCreateReadBuffer' to fix -Wunused-parameter build warnings.

        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::getOrCreateReadBuffer):

2013-05-02  Roger Fong  <roger_fong@apple.com>

        Following r149463, set Path for WebCore makefile as well.

        * WebCore.vcxproj/WebCore.make:

2013-05-02  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed fix for Mac Lion build after r149503.

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h:
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm:

2013-05-02  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Move Mac-only symbols into the shared symbol list

        * WebCore.exp.in: Move symbols.

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

        Shadow DOM removal: Get rid of ContentSelectorQuery
        https://bugs.webkit.org/show_bug.cgi?id=115533

        Reviewed by Anders Carlsson.

        This is only used for Shadow DOM distribution. <details> element works fine without it.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * html/shadow/ContentDistributor.cpp:
        (WebCore::ContentDistributor::distributeSelectionsTo):
        * html/shadow/ContentSelectorQuery.cpp: Removed.
        * html/shadow/ContentSelectorQuery.h: Removed.
        * html/shadow/HTMLContentElement.cpp:

2013-05-02  Arnaud Renevier  <a.renevier@sisa.samsung.com>

        border-radius clipping a canvas does not always clip
        https://bugs.webkit.org/show_bug.cgi?id=113343

        Reviewed by Simon Fraser.

        clipToRect method clip context to clipRect, and then clip to rounded
        rect if clipRect has a radius. But currently, clipToRect exit early if
        clipToRect is equal to paintDirtyRect.

        This patch allows clipping to rounded corner ever if clipToRect is
        equal to paintDirtyRect.

        Test: fast/overflow/border-radius-clipping-2.html

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

2013-05-02  Eric Carlson  <eric.carlson@apple.com>

        Caption menu does not include in-band captions
        https://bugs.webkit.org/show_bug.cgi?id=111934

        Reviewed by Dean Jackson.

        No new tests, upated existing tests for these changes.

        * WebCore.xcodeproj/project.pbxproj: Add new files.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_legacyWebKitClosedCaptionsVisible.
        (WebCore::HTMLMediaElement::loadInternal): Clear the LoadMediaResource from m_pendingActionFlags
            in case there is a pending async load.
        (WebCore::HTMLMediaElement::configureTextTrackGroup): Always log the track score.
        (WebCore::HTMLMediaElement::configureTextTracks): Call configureTextTrackDisplay so 
            m_legacyWebKitClosedCaptionsVisible is always updated immediately.
        (WebCore::HTMLMediaElement::setWebkitClosedCaptionsVisible): Use m_legacyWebKitClosedCaptionsVisible.
        (WebCore::HTMLMediaElement::webkitClosedCaptionsVisible): Ditto.
        * html/HTMLMediaElement.h:

        * page/CaptionUserPreferences.cpp:
        (WebCore::CaptionUserPreferences::CaptionUserPreferences): Initialize m_displayMode to ForcedOnly
            because it is no longer used for testing only.
        (WebCore::CaptionUserPreferences::notify): Post notifications when not in testing-only mode.

        * page/CaptionUserPreferencesMac.h:
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Calculate a track score when
            webkitClosedCaptionsVisible has been set.
        (WebCore::CaptionUserPreferencesMac::sortedTrackListForMenu): Don't filter track list when we
            don't have the media accessibility framework. Make logging more informative.
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.h:

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.h:
        (WebCore::InbandTextTrackPrivateAVFObjC::create): Take a AVFInbandTrackParent instead of a
            MediaPlayerPrivateAVFoundationObjC.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::InbandTextTrackPrivateAVFObjC): Ditto.

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.h: Added.
        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateLegacyAVFObjC.mm: Added.

        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::cancelLoad): We only have legible output when
            HAVE_AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT is defined.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem): Ditto.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::tracksChanged): Create a legacy CC track if
            there are no media selection options and there is a CC AVAssetTrack.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processLegacyCCTracks): New, process CC tracks.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processNewAndRemovedTextTracks): New, refactored
            common setup/cleanup code from processMediaSelectionOptions.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::processMediaSelectionOptions): Renamed from 
            processTextTracks. Move common setup/cleanup code to processNewAndRemovedTextTracks.
        (WebCore::MediaPlayerPrivateAVFoundationObjC::setCurrentTrack): Deal with legacy CC tracks.

2013-05-02  Eric Carlson  <eric.carlson@apple.com>

        [Mac] caption track menu includes "easy to read" in-band tracks twice
        https://bugs.webkit.org/show_bug.cgi?id=115529

        Reviewed by Dean Jackson.

        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::sortedTrackListForMenu): Check to see if a track is
             easy-to-read after checking if it is forced only.

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

        Remove SiblingTraversalStrategies.h
        https://bugs.webkit.org/show_bug.cgi?id=115532

        Reviewed by Andreas Kling.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * css/SiblingTraversalStrategies.h: Removed.

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

        Shadow DOM removal: Make SelectorChecker non-generic
        https://bugs.webkit.org/show_bug.cgi?id=115526

        Reviewed by Andreas Kling.

        Without Shadow DOM distribution we don't need SiblingTraversalStrategies anymore.

        * css/ElementRuleCollector.cpp:
        (WebCore::ElementRuleCollector::ruleMatches):
        * css/SelectorChecker.cpp:
        (WebCore):
        (WebCore::isFirstChildElement):
        (WebCore::isLastChildElement):
        (WebCore::isFirstOfType):
        (WebCore::isLastOfType):
        (WebCore::countElementsBefore):
        (WebCore::countElementsOfTypeBefore):
        (WebCore::countElementsAfter):
        (WebCore::countElementsOfTypeAfter):
        (WebCore::SelectorChecker::match):
        (WebCore::SelectorChecker::checkOne):
        * css/SelectorChecker.h:
        (SelectorChecker):
        * css/SiblingTraversalStrategies.h:
        * css/StyleResolver.h:
        (WebCore::checkRegionSelector):
        * dom/SelectorQuery.cpp:
        (WebCore::SelectorDataList::selectorMatches):
        * html/shadow/ContentSelectorQuery.cpp:
        (WebCore::ContentSelectorDataList::checkContentSelector):

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

        Simplify WebCoreObjCExtras by using WTF::bind
        https://bugs.webkit.org/show_bug.cgi?id=115524

        Reviewed by Andreas Kling.

        * platform/mac/WebCoreObjCExtras.mm:
        (deallocCallback):
        (WebCoreObjCScheduleDeallocateOnMainThread):

2013-05-02  Alexey Proskuryakov  <ap@apple.com>

        <rdar://problem/13740375> Non-ASCII downloaded file names are garbled when using NetworkProcess
        https://bugs.webkit.org/show_bug.cgi?id=115520

        Reviewed by Darin Adler.

        Covered by existing tests when using NetworkProcess.

        * WebCore.exp.in:
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::responseContentDispositionEncodingFallbackArray):
        Added a getter for encoding fallback array.

        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        Removed obsolete checks for presence of fallback array methods, they were available
        since 10.6.8.

2013-05-01  Enrica Casucci  <enrica@apple.com>

        text-combine: horizontal does not work properly for some fonts.
        https://bugs.webkit.org/show_bug.cgi?id=115503.

        Reviewed by Dave Hyatt.

        For some fonts that don't have width variants, we fail to combine glyphs
        because we believe they don't fit. That decision is made comparing the run width
        with the font computed size multiplied by a margin factor.
        I've increased the margin from 10% to 15%.
         
        Test: fast/text/text-combine-different-fonts.html

        * rendering/RenderCombineText.cpp:

2013-05-01  Joseph Pecoraro  <pecoraro@apple.com>

        Null check plugInClient earlier in snapshotting path
        https://bugs.webkit.org/show_bug.cgi?id=115498

        Reviewed by Darin Adler.

        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::subframeLoaderWillCreatePlugIn):

2013-05-01  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Fix check-inspector-strings script and fix localized strings
        https://bugs.webkit.org/show_bug.cgi?id=115495

        Reviewed by Joseph Pecoraro.

        No new tests, because there is no change in behavior.

        * English.lproj/localizedStrings.js:

2013-05-01  Tim Horton  <timothy_horton@apple.com>

        <object data="<some data URL>"> MIME types aren't case-insensitive
        https://bugs.webkit.org/show_bug.cgi?id=115494

        Reviewed by Darin Adler.

        Test: fast/images/object-data-url-case-insensitivity.html

        MIME types are defined to be case-insensitive, but many places in WebCore
        only compare them against lower-case strings. Most entry points for MIME
        types lower-case them, but mimeTypeFromDataURL doesn't, causing, for example,
        data:image/png;... to work, but data:iMaGe/PNG;... to fail.

        To fix this, lower-case the string returned from mimeTypeFromDataURL.

        * platform/KURL.cpp:
        (WebCore::mimeTypeFromDataURL):

2013-05-01  Ryosuke Niwa  <rniwa@webkit.org>

        [Mac] Text replacement should use correction indicator
        https://bugs.webkit.org/show_bug.cgi?id=115471

        Reviewed by Darin Adler.

        Support autocorrection panel for text replacements by making AlternativeTextTypeCorrection
        handle text replacements as well as automatic spelling correction.

        No new tests. Unfortunately this feature is not testable as is. We need to provide some
        internals or testRunner methods to make this feature testable in the long term.

        * editing/AlternativeTextController.cpp:
        (WebCore::AlternativeTextController::timerFired): Trigger both TextCheckingTypeReplacement
        and TextCheckingTypeShowCorrectionPanel.

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor): Autocorrection panel maybe used for both
        TextCheckingTypeReplacement and TextCheckingTypeShowCorrectionPanel.

2013-05-01  Tim Horton  <timothy_horton@apple.com>

        Move knowledge of PDF/PostScript MIME types into MIMETypeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=115487

        Reviewed by Darin Adler.

        No new tests, just a refactoring.

        * WebCore.exp.in:
        Export newly-added isPDFOrPostScriptMIMEType and getPDFAndPostScriptMIMETypes.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        Adopt MIMETypeRegistry::isPDFOrPostScriptMIMEType instead of duplicating
        the list of MIME types. The previous list did not include PostScript, but
        it seems reasonable to put plugins ahead of built-in support for it in addition to PDF.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializePDFAndPostScriptMIMETypes): Added.
        (WebCore::initializeMIMETypeRegistry): Call initializePDFAndPostScriptMIMETypes.
        (WebCore::MIMETypeRegistry::isPDFOrPostScriptMIMEType):
        Consult our new HashSet to see if the given MIME type is one of those used for PDF or PS.

        (WebCore::MIMETypeRegistry::getPDFAndPostScriptMIMETypes): Added.
        * platform/MIMETypeRegistry.h:
        (MIMETypeRegistry): Add isPDFOrPostScriptMIMEType and getPDFAndPostScriptMIMETypes.

2013-05-01  Anders Carlsson  <andersca@apple.com>

        Implement LocalStorageDatabase::importItems
        https://bugs.webkit.org/show_bug.cgi?id=115493

        Reviewed by Andreas Kling.

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2013-05-01  Anders Carlsson  <andersca@apple.com>

        Begin work on loading items from the local storage database
        https://bugs.webkit.org/show_bug.cgi?id=115489

        Reviewed by Andreas Kling.

        Export symbols and SQLite headers needed.

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

2013-05-01  Hans Muller  <hmuller@adobe.com>
        [CSS Exclusions] Programmatic layout tests fail when subpixel layout is disabled
        https://bugs.webkit.org/show_bug.cgi?id=115455

        First round of changes to restore platform/mac exclusion tests that started failing when
        subpixel layout was turned off.

        Reviewed by Dirk Schulze.

        * rendering/ExclusionPolygon.cpp:
        (WebCore::appendArc): Ensure that the 3rd of 5 added vertices is in the center of the arc.
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop): Use ceiledLayoutUnit() for downwards-snapping first fit location.
        * rendering/ExclusionRectangle.cpp:
        (WebCore::ExclusionRectangle::firstIncludedIntervalLogicalTop): Ditto.

2013-05-01  Enrica Casucci  <enrica@apple.com>

        Incorrect layout for blocks containing ideographs with -webkit-linebox-contain: glyphs, font, inline-box.
        https://bugs.webkit.org/show_bug.cgi?id=115478.

        Reviewed by Dave Hyatt.

        Test: fast/block/lineboxcontain/block-with-ideographs.xhtml

        When computing ascent and descent we need to take into account
        the baseline type. RootInlineBox::ascentAndDescentForBox failed
        to do that in few cases.

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

2013-05-01  Anders Carlsson  <andersca@apple.com>

        Add LocalStorageDatabase class
        https://bugs.webkit.org/show_bug.cgi?id=115486

        Reviewed by Sam Weinig.

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2013-05-01  Eric Carlson  <eric.carlson@apple.com>

        [Mac Lion] Assertion failure in MediaControlTextTrackContainerElement::updateDisplay()
        https://bugs.webkit.org/show_bug.cgi?id=115289

        Reviewed by Jer Noble.

        No new tests, this is a speculative fix for an infrequent assertion.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::textTrackRemoveCue): Mark the cue as inactive when it is removed
            from the active set.

2013-05-01  Joseph Pecoraro  <pecoraro@apple.com>

        TextTrackMenu crashes in ports where MediaElement players are lazily created
        https://bugs.webkit.org/show_bug.cgi?id=115485

        Null check the player for ports, like iOS, that lazily create the player.

        Reviewed by Eric Carlson.

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

2013-05-01  Anders Carlsson  <andersca@apple.com>

        Add FunctionDispatcher class and make RunLoop derive from it
        https://bugs.webkit.org/show_bug.cgi?id=115480

        Reviewed by Sam Weinig.

        Change RunLoop to be a subclass of FunctionDispatcher.

        * platform/RunLoop.h:
        (RunLoop):

2013-05-01  Eric Carlson  <eric.carlson@apple.com>

        HTMLMediaElement::updateActiveTextTrackCues can do unnecessary work
        https://bugs.webkit.org/show_bug.cgi?id=81856

        Reviewed by Jer Noble.

        No new tests, covered by existing tests.

        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::ignoreTrackDisplayUpdateRequests): Add an early return when there
            is obviously no work to be done.

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

        Closed caption lines overlap
        https://bugs.webkit.org/show_bug.cgi?id=115438
        <rdar://problem/13351747>

        Reviewed by Eric Carlson.

        Take the line-box padding into account when determining line hight by setting
        the -webkit-line-box-contain property to include 'inline-box'.

        * css/mediaControls.css:
        (video::-webkit-media-text-track-container):

2013-05-01  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX (r149410): CFRunLoopStop() doesn't know what to do with a RetainPtr<CFRunLoopRef>

        Fixes the following build failure:

            WebCore/platform/cf/RunLoopCF.cpp:82:5: error: no matching function for call to 'CFRunLoopStop'
                CFRunLoopStop(m_runLoop);
                ^~~~~~~~~~~~~

        * platform/cf/RunLoopCF.cpp:
        (WebCore::RunLoop::stop): Call RetainPtr::get().

2013-05-01  Per-Erik Brodin  <per-erik.brodin@ericsson.com>

        EventSource: Loss of reconnect time precision due to integer division
        https://bugs.webkit.org/show_bug.cgi?id=115358

        Make sure precision is not lost when converting the reconnect time from milliseconds to seconds.

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/eventsource/eventsource-retry-precision.html

        * page/EventSource.cpp:
        (WebCore::EventSource::scheduleReconnect):

2013-05-01  Andreas Kling  <akling@apple.com>

        REGRESSION(r149287): Assertion failure in fast/frames/flattening/iframe-flattening-crash.html
        <http://webkit.org/b/115386>
        <rdar://problem/13769995>

        Reviewed by Antti Koivisto.

        Only send synchronous resize events for the main frame. Subframes change size during layout,
        so it never really makes sense for them to use synchronous dispatch anyway.

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

2013-05-01  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial buildfix after r149432.

        * testing/Internals.cpp:
        (WebCore):

2013-05-01  Sergio Villar Senin  <svillar@igalia.com>

        Show a block cursor in overtype mode
        https://bugs.webkit.org/show_bug.cgi?id=114819

        Reviewed by Ryosuke Niwa.

        Test: editing/selection/block-cursor-overtype-mode.html

        Overtype mode will use block cursor instead of a caret to
        highlight the next character to be replaced. It will fully cover
        the next character to be replaced (except at the end of a line
        where the usual blinking caret will be shown).

        This new block cursor is internally implemented as a selection
        (not exposed to JavaScript) because the selection code knows how
        to deal with bidi text.

        * WebCore.exp.in: Export symbols for testing purposes.
        * WebCore.order: Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::toggleOverwriteModeEnabled): Added a call to
        FrameLoader::setShouldShowBlockCursor.
        (WebCore):
        * editing/Editor.h:
        (Editor):
        * editing/FrameSelection.cpp:
        (WebCore::FrameSelection::FrameSelection):
        (WebCore::FrameSelection::updateAppearance): Use a 1-character
        long selection to paint the cursor in overtype mode.
        (WebCore::FrameSelection::setShouldShowBlockCursor):
        (WebCore):
        * editing/FrameSelection.h:
        (WebCore::FrameSelection::shouldShowBlockCursor):
        (FrameSelection):
        * testing/Internals.cpp:
        (WebCore):
        (WebCore::Internals::selectionBounds): Added a new method which
        returns the IntRect issued by FrameSelection::bounds().
        * testing/Internals.h: Ditto.
        * testing/Internals.idl: Ditto.

2013-04-30  Darin Adler  <darin@apple.com>

        [Mac] Remove adoptNS/retain pairs, since the two cancel each other out
        https://bugs.webkit.org/show_bug.cgi?id=115426

        Reviewed by Anders Carlsson.

        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::PlatformCAAnimation):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::filterValueForOperation):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::nsURLResponse):
        Remove adoptNS and release from code that is doing both.

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

        Add API to allow WebKit2 banners to get mouse events
        https://bugs.webkit.org/show_bug.cgi?id=115395

        Reviewed by Beth Dakin.

        * WebCore.exp.in:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::rootViewToTotalContents):
        * platform/ScrollView.h:
        Add and expose rootViewToTotalContents().

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

        Make RunLoop ref-counted
        https://bugs.webkit.org/show_bug.cgi?id=115384

        Reviewed by Benjamin Poulain.

        Add a RunLoop::Holder class which creates and holds the ref-counted RunLoop object.

        * platform/RunLoop.cpp:
        (RunLoop::Holder):
        (WebCore::RunLoop::Holder::Holder):
        (WebCore::RunLoop::Holder::runLoop):
        (WebCore::RunLoop::current):
        * platform/RunLoop.h:

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

        Clean up RunLoop code
        https://bugs.webkit.org/show_bug.cgi?id=115454

        Reviewed by Andreas Kling.

        Delete a couple of functions from RunLoopCF.cpp and just use the generic ones in RunLoop.cpp,
        use RetainPtr instead of manual retain/release. Always use an AutoreleasePool when calling performWork or timers.

        * platform/RunLoop.cpp:
        (WebCore::RunLoop::setUseApplicationRunLoopOnMainRunLoop):
        (WebCore):
        * platform/RunLoop.h:
        (TimerBase):
        (RunLoop):
        * platform/cf/RunLoopCF.cpp:
        (WebCore::RunLoop::performWork):
        (WebCore::RunLoop::RunLoop):
        (WebCore::RunLoop::~RunLoop):
        (WebCore::RunLoop::wakeUp):
        (WebCore::RunLoop::TimerBase::timerFired):
        (WebCore::RunLoop::TimerBase::TimerBase):
        (WebCore::RunLoop::TimerBase::start):
        (WebCore::RunLoop::TimerBase::stop):
        (WebCore::RunLoop::TimerBase::isActive):
        * platform/mac/RunLoopMac.mm:
        (WebCore::RunLoop::run):
        (WebCore::RunLoop::stop):

2013-04-30  David Hyatt  <hyatt@apple.com>

        <button> ignores margin-bottom.
        https://bugs.webkit.org/show_bug.cgi?id=114940
        
        Reviewed by Beth Dakin.

        Make sure that the inner block inside the <button> (flexbox) acts like it
        establishes a block formatting context, i.e., it should refuse to collapse
        its margins with its children. This causes margins to stay inside the <button>
        and be honored, adding to the button's overall height.
        
        Basically we have to remove the restriction that anonymous blocks can't be
        BFCs on the bottom margin.

        Added fast/forms/content-with-margins-inside-button.html

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

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

        Cleanup HTMLOListElement<->RenderListItem bridge
        https://bugs.webkit.org/show_bug.cgi?id=115434

        Reviewed by Darin Adler.

        Refactor the way HTMLOListElement is accessing its list items. Instead
        of exposing the nextListItem function, wrap the desiredfunctionality
        in static methods on RenderListItem. This should make the code more readable.
        I've also added more constness to some functions in RenderListItem.

        Tests: No new tests, just refactoring.

        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::updateItemValues): Use updateItemValuesForOrderedList.
        (WebCore::HTMLOListElement::recalculateItemCount): Use itemCountForOrderedList.
        * rendering/RenderListItem.cpp:
        (WebCore::isList): Add more constness.
        (WebCore::nextListItem): Make local to the CPP and add constness.
        (WebCore::previousListItem): Add constness.
        (WebCore::RenderListItem::updateItemValuesForOrderedList): Called by OL elements.
        (WebCore::RenderListItem::itemCountForOrderedList): Called by OL elements.
        (WebCore::previousOrNextItem):
        * rendering/RenderListItem.h: Add updateItemValuesForOrderedList and itemCountForOrderedList.

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

        More StorageTracker cleanup
        https://bugs.webkit.org/show_bug.cgi?id=115435

        Reviewed by Andreas Kling.

        Use bind instead of "onMainThread" helper functions.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::deleteEmptyDatabase):
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::deleteOriginWithIdentifier):
        * storage/StorageTracker.h:
        (StorageTracker):

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

        Objective-C JavaScriptCore API should publicly support bridging to C
        https://bugs.webkit.org/show_bug.cgi?id=115447

        Reviewed by Mark Hahnenberg.

        * bindings/js/ScriptControllerMac.mm:
        (WebCore::ScriptController::javaScriptContext):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject JSValue]):

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

        Fix an issue with JSPerformance.cpp in the WebCore.xcodeproj where
        it was being recognized as a diretory rather than a file, introduced
        in r149359.
        
        * WebCore.xcodeproj/project.pbxproj:

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

        Page::pageCount() is inaccurate when we allow the first paint in App Mode
        https://bugs.webkit.org/show_bug.cgi?id=115442
        -and corresponding-
        <rdar://problem/13758445>

        Reviewed by Dave Hyatt.

        We should set the height here all the time, even if it is the first layout.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::checkForPaginationLogicalHeightChange):

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

        Don't create StyleResolvers just to invalidate them.
        <http://webkit.org/b/115436>

        Reviewed by Geoffrey Garen.

        Renamed Document::styleResolver() to ensureStyleResolver() so it's clear that it never returns null.
        Removed a bunch of unnecessary null-checks I spotted while doing this.

        Also fixed Element::willModifyAttribute() and FrameView::setFrameRect() to not create a StyleResolver
        and immediately invalidate it in some cases.

        * css/FontLoader.cpp:
        (WebCore::FontLoader::loadFont):
        (WebCore::FontLoader::checkFont):
        (WebCore::FontLoader::resolveFontStyle):
        * css/MediaQueryMatcher.cpp:
        (WebCore::MediaQueryMatcher::prepareEvaluator):
        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):
        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets):
        (WebCore::Document::styleForPage):
        * dom/Document.h:
        (WebCore::Document::ensureStyleResolver):
        * dom/DocumentStyleSheetCollection.cpp:
        (WebCore::DocumentStyleSheetCollection::combineCSSFeatureFlags):
        (WebCore::DocumentStyleSheetCollection::resetCSSFeatureFlags):
        (WebCore::DocumentStyleSheetCollection::updateActiveStyleSheets):
        * dom/Element.cpp:
        (WebCore::StyleResolverParentPusher::push):
        (WebCore::StyleResolverParentPusher::~StyleResolverParentPusher):
        (WebCore::Element::styleForRenderer):
        (WebCore::Element::recalcStyle):
        (WebCore::Element::willModifyAttribute):
        * dom/NodeRenderingContext.cpp:
        (WebCore::NodeRenderingContext::createRendererForTextIfNeeded):
        * dom/ShadowRoot.cpp:
        (WebCore::ShadowRoot::recalcStyle):
        (WebCore::ShadowRoot::attach):
        * dom/Text.cpp:
        (WebCore::Text::recalcTextStyle):
        * editing/EditingStyle.cpp:
        (WebCore::styleFromMatchedRulesForElement):
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::customStyleForRenderer):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::updateNonRenderStyle):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::updateNonRenderStyle):
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::customStyleForRenderer):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setFont):
        * html/shadow/DateTimeEditElement.cpp:
        (WebCore::DateTimeEditElement::customStyleForRenderer):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getMatchedStylesForNode):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::updateFromElement):
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::fontSelector):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::getUncachedPseudoStyle):
        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::checkRegionStyle):
        (WebCore::RenderRegion::computeStyleInRegion):
        * rendering/RenderSearchField.cpp:
        (WebCore::RenderSearchField::fontSelector):
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::computeNewScaledFontForStyle):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::customStyleForRenderer):
        * svg/SVGElementRareData.h:
        (WebCore::SVGElementRareData::overrideComputedStyle):

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

        Cap max CALayer tree depth to avoid crashes
        https://bugs.webkit.org/show_bug.cgi?id=115431
        <rdar://problem/13401861>

        Reviewed by Tim Horton.
        
        Core Animation can crash if fed deeply nested layer trees.
        Avoid this by capping CALayer tree depth at some empirically-determined
        level.

        Test: compositing/layer-creation/deep-tree.html

        * platform/graphics/ca/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::CommitState::CommitState): Add treeDepth to the CommitState.
        * platform/graphics/ca/GraphicsLayerCA.cpp: Set cMaxLayerTreeDepth to 250
        (WebCore::GraphicsLayerCA::flushCompositingStateForThisLayerOnly): We need a dummy CommitState
        here. It is not expected that flushCompositingStateForThisLayerOnly() will be called for
        a layer in the middle of the hierarchy, only for custom-managed leaf layers, so we don't try
        to compute the correct tree depth.
        (WebCore::GraphicsLayerCA::recursiveCommitChanges): Pass in the commitState. Since this is
        copied for each frame, no need to decrement commitState.treeDepth.
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers): Increment treeDepth once or
        twice. If we've reached max, be sure to set the ChildrenChanged flag. We delay tree truncation
        until commitLayerChangesAfterSublayers() since ChildrenChanged can be set again when children
        are being processed.
        (WebCore::GraphicsLayerCA::commitLayerChangesAfterSublayers):
        (WebCore::GraphicsLayerCA::updateSublayerList): If we've hit max depth, just set
        empty sublayers.

2013-04-30  Darin Adler  <darin@apple.com>

        Formatting tweaks
        https://bugs.webkit.org/show_bug.cgi?id=115427

        Reviewed by Andreas Kling.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage): Fixed indenting to match
        normal WebKit style.

        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::pinnedInDirection): Removed an excess "+" that is harmless
        but strange.

        * platform/mac/SharedBufferMac.mm: Tweaked blank lines for better paragraphing.

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

        Simplify ContainerNode::removeChildren
        https://bugs.webkit.org/show_bug.cgi?id=115398

        Reviewed by Andreas Kling.

        Back port https://chromium.googlesource.com/chromium/blink/+/b981f01cd065236b5ff7e3a8446d15b384c1b557
        by Andrei Bucur, which includes both this and his r148754.

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

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

        [SOUP] Move default buffer handling from ResourceHandleClient to ResourceHandlesoup
        https://bugs.webkit.org/show_bug.cgi?id=115364

        Reviewed by Martin Robinson.

        ResourceHandleClient that is cross-platform file is not the right
        place for the default ResourceHandle read buffer. We can make
        getBuffer return 0 by default and handle it in ResourceHandleSoup,
        creating a default buffer when the client doesn't provide one.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::getOrCreateReadBuffer): Adapt to API change.
        * platform/network/ResourceHandle.h:
        (ResourceHandle): Add ensureReadBuffer().
        * platform/network/ResourceHandleClient.cpp:
        (WebCore::ResourceHandleClient::~ResourceHandleClient): Remove
        soup specific code.
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::getOrCreateReadBuffer): Rename
        getBuffer() as getOrCreateReadBuffer() and use a reference for the
        out parameter instead of a pointer.
        (ResourceHandleClient): Remove soup specific code.
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Rename
        m_buffer and m_bufferSize as m_readBufferPtr and m_readBufferSize
        and add m_readBuffer to be used as default read buffer.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::ensureReadBuffer): Helper function to
        make usre we have a read buffer before a read operation. It first
        checks if the client provides a buffer and if it doesn't it
        creates or reuses the default buffer.
        (WebCore::redirectSkipCallback): Call ensureReadBuffer() and adapt
        to variable name changes.
        (WebCore::cleanupSoupRequestOperation): Adapt to variable name
        changes.
        (WebCore::nextMultipartResponsePartCallback): Call
        ensureReadBuffer() and adapt to variable name changes.
        (WebCore::sendRequestCallback): Ditto.
        (WebCore::readCallback): Ditto.

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

        REGRESSION(r149287): Assertion failure in fast/frames/flattening/iframe-flattening-crash.html
        <http://webkit.org/b/115386>
        <rdar://problem/13769995>

        Reviewed by Darin Adler.

        Put the resize event on the Document's event queue if it happens while layout is in progress.
        This avoids re-entering layout while laying out flattened subframes.

        Also move the little logic for the resize event from EventHandler to FrameView (the only client.)

        * page/EventHandler.cpp:
        * page/EventHandler.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchResizeEvent):

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

        Fix build.

        * WebCore.exp.in:
        * storage/StorageTracker.h:
        (StorageTracker):

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

        More StorageTracker cleanup
        https://bugs.webkit.org/show_bug.cgi?id=115429

        Reviewed by Andreas Kling.

        Make a bunch of member functions private, and remove StorageTracker::syncLocalStorage.

        * WebCore.exp.in:
        * storage/StorageTracker.cpp:
        * storage/StorageTracker.h:
        (StorageTracker):

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

        REGRESSION(r149313) Crash at WebCore::FrameView::setFrameRect() when navigating back to previous page while find banner is displayed.
        <http://webkit.org/b/115421>
        <rdar://problem/13765739>

        Reviewed by Antti Koivisto.

        Add missing null-checks for Document and StyleResolver when re-evaluating media queries due to viewport changes.

        No layout test, since we can't show the find banner from WebCore, and I can't think of another way to
        trigger a back navigation to a Document-less Frame that would also change the FrameView's size.

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

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

        The bison grammar for @supports should return 0 in case of an error
        https://bugs.webkit.org/show_bug.cgi?id=115402

        Reviewed by Darin Adler.

        Back ported from https://chromium.googlesource.com/chromium/blink/+/74399c27c8b93286bae03a1d6371735935b34d85.

        Test: css3/supports-crash.html

        * css/CSSGrammar.y.in:

2013-04-30  Darin Adler  <darin@apple.com>

        [CG] Over-release in MIME type registry code
        https://bugs.webkit.org/show_bug.cgi?id=115423

        Reviewed by Eric Carlson.

        Sam Weinig spotted these by code inspection. I don't know how to make a test demonstrating
        the problem, but this is clearly an over-release.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes): Removed incorrect adoptCF call on a string we
        are getting from a CFArray.
        (WebCore::initializeSupportedImageMIMETypesForEncoding): Ditto.

2013-04-30  Mike Lattanzio  <mlattanzio@blackberry.com>

        [BlackBerry] ImageBuffer::copyImage leaking memory
        https://bugs.webkit.org/show_bug.cgi?id=115359

        Reviewed by George Staikos.

        Use a WebCore::Vector to ensure the temporary data is destroyed.
        The TiledImage does not take ownership of the data.

        * platform/graphics/blackberry/ImageBufferBlackBerry.cpp:
        (WebCore::ImageBuffer::copyImage):

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

        [Texmap] Avoid using overlap/non-overlap region in cases where the overhead is bigger than the gain
        https://bugs.webkit.org/show_bug.cgi?id=115226

        Reviewed by Allan Sandfeld Jensen.

        When there are several fragmeneted overlap regions, or when the overlap region is bigger than the
        non-overlap region, it's more efficient to have a single intermediate surface rather than split
        the rendering to overlap/non-overlap.

        Covered by tests in compositing/overlap-blending.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::shouldBlend):
            Readability fix.

        (WebCore::TextureMapperLayer::paintUsingOverlapRegions):
            Consolidate to one overlap rect when one of the following occurs:
            - The overlap region's area is larger than the non-overlap region area.
            - There are many fragmented overlap regions and no non-overlap regions.

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

        Stop using "in" keyword in IDL files
        https://bugs.webkit.org/show_bug.cgi?id=115418

        Reviewed by Kentaro Hara.

        Stop using "in" keyword in IDL files as this is no longer part of the
        Web IDL specification and it brings no additional information.

        For now, the IDL parser will still accept the "in" keyword for operation
        argument to not break anything. However, we should remove support for it
        later on.

        No new tests, no behavior change.

        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryEntrySync.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/EntriesCallback.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/EntryArray.idl:
        * Modules/filesystem/EntryArraySync.idl:
        * Modules/filesystem/EntryCallback.idl:
        * Modules/filesystem/EntrySync.idl:
        * Modules/filesystem/ErrorCallback.idl:
        * Modules/filesystem/FileCallback.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/FileSystemCallback.idl:
        * Modules/filesystem/FileWriter.idl:
        * Modules/filesystem/FileWriterCallback.idl:
        * Modules/filesystem/FileWriterSync.idl:
        * Modules/filesystem/MetadataCallback.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/GamepadList.idl:
        * Modules/geolocation/Geolocation.idl:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.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/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBuffer.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCErrorCallback.idl:
        * Modules/mediastream/RTCIceCandidate.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCSessionDescription.idl:
        * Modules/mediastream/RTCSessionDescriptionCallback.idl:
        * Modules/mediastream/RTCStatsCallback.idl:
        * Modules/mediastream/RTCStatsReport.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/quota/StorageErrorCallback.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/quota/StorageQuotaCallback.idl:
        * Modules/quota/StorageUsageCallback.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechRecognitionResult.idl:
        * Modules/speech/SpeechRecognitionResultList.idl:
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/vibration/NavigatorVibration.idl:
        * Modules/webaudio/AnalyserNode.idl:
        * Modules/webaudio/AudioBuffer.idl:
        * Modules/webaudio/AudioBufferCallback.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/OfflineAudioContext.idl:
        * Modules/webaudio/OscillatorNode.idl:
        * Modules/webaudio/PannerNode.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLResultSetRowList.idl:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionSync.idl:
        * Modules/webdatabase/SQLTransactionSyncCallback.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/WebSocket.idl:
        * bindings/scripts/test/TestCallback.idl:
        * bindings/scripts/test/TestCustomNamedGetter.idl:
        * bindings/scripts/test/TestDomainSecurity.idl:
        * bindings/scripts/test/TestEventTarget.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestMediaQueryListListener.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestOverloadedConstructors.idl:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestSupplemental.idl:
        * bindings/scripts/test/TestTypedArray.idl:
        * bindings/scripts/test/TestTypedefs.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/FontLoader.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMNamedFlowCollection.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/DocumentFragment.idl:
        * dom/Element.idl:
        * dom/Event.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/NodeList.idl:
        * dom/OverflowEvent.idl:
        * dom/PropertyNodeList.idl:
        * dom/Range.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/ShadowRoot.idl:
        * dom/StringCallback.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/TouchList.idl:
        * dom/UIEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/FileList.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMTokenList.idl:
        * html/DOMURL.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFieldSetElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLKeygenElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLOutputElement.idl:
        * html/HTMLPropertiesCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/MediaController.idl:
        * html/TimeRanges.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/DataView.idl:
        * html/canvas/EXTDrawBuffers.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/canvas/WebGLDebugShaders.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:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorFrontendHost.idl:
        * inspector/JavaScriptCallFrame.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/Location.idl:
        * page/PagePopupController.idl:
        * page/Performance.idl:
        * page/PerformanceEntryList.idl:
        * page/SpeechInputResultList.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/Storage.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGAngle.idl:
        * svg/SVGColor.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGLength.idl:
        * svg/SVGLengthList.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGMatrix.idl:
        * svg/SVGNumberList.idl:
        * svg/SVGPaint.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGPathSegList.idl:
        * svg/SVGPoint.idl:
        * svg/SVGPointList.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGStyledElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.idl:
        * testing/InternalSettings.idl:
        * testing/Internals.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

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

        [Texmap] Use fewer intermediate surfaces when compositing filters
        https://bugs.webkit.org/show_bug.cgi?id=115224

        Reviewed by Allan Sandfeld Jensen.

        Until now, when rendering CSS filters, the filters were applied to the texture
        and then the resulting texture would be composited to the target surface with
        its transform/opacity.
        This requires at least two intermediate surface passes for every filtered layer.

        This patch makes it so that the last filter pass is applied together with the 
        resulting surface's opacity and transform, during composition.

        Tested by css3/filters tests, whichn now scroll/zoom a lot faster.

        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::BitmapTexture::applyFilters):
        * platform/graphics/texmap/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (TextureMapperGLData):
        (WebCore):
        (WebCore::optionsForFilterType):
        (WebCore::getPassesRequiredForFilter):
        (WebCore::gauss):
        (WebCore::gaussianKernel):
        (WebCore::prepareFilterProgram):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::TextureMapperGL::drawFiltered):
        (WebCore::isCustomFilter):
        * platform/graphics/texmap/TextureMapperGL.h:
        (TextureMapperGL):
        (BitmapTextureGL):
        (FilterInfo):
        * platform/graphics/texmap/TextureMapperImageBuffer.cpp:
        (WebCore::BitmapTextureImageBuffer::applyFilters):
        * platform/graphics/texmap/TextureMapperImageBuffer.h:
        (BitmapTextureImageBuffer):
        (WebCore::BitmapTextureGL::FilterInfo::FilterInfo):
        (WebCore::BitmapTextureGL::filterInfo):
        (WebCore::BitmapTextureGL::applyFilters):
            Modify TextureMapperGL to remember the last filter operation applied
            to a BitmapTexture and apply it when the texture is composited.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintIntoSurface):
            Simplify the call to applyFilters, since now TextureMapperGL is responsible
            for maintaining the content texture.


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

        [EFL] Enable scaled cursors
        https://bugs.webkit.org/show_bug.cgi?id=106242

        Reviewed by Gyuyoung Kim.

        Correctly copy WebCore::Cursor's m_imageScaleFactor
        member in CursorEfl.cpp when MOUSE_CURSOR_SCALE is
        enabled.

        No new tests, already covered by existing tests.

        * platform/efl/CursorEfl.cpp:
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::operator=):

2013-04-30  Thiago Marcos P. Santos  <thiago.santos@intel.com>

        CSSParser::parseFontFamily should allow the keyword "default" as part of a font name
        https://bugs.webkit.org/show_bug.cgi?id=107231

        Reviewed by Ryosuke Niwa.

        Make sure that using the keyword "default" as font family doesn't
        invalidate the whole declaration. It is also OK to use a font that
        has "default" as part of a composite name (i.e. "default foo").
        This matches the behavior of Firefox and IE.

        Test: fast/css/font-family-parse-keyword.html

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

2013-04-30  Zalan Bujtas  <zalan@apple.com>

        Animations fail to start on http://www.google.com/insidesearch/howsearchworks/thestory/
        https://bugs.webkit.org/show_bug.cgi?id=111244

        Reviewed by David Kilzer.
        
        Enable performance.now() as a minimal subset of Web Timing API. 
        It returns DOMHighResTimeStamp, a monotonically increasing value representing the 
        number of milliseconds from the start of the navigation of the current document.
        JS libraries use this API to check against the requestAnimationFrame() timestamp.

        Test: fast/dom/Window/web-timing-minimal-performance-now.html

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventTargetFactory.in:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::~DOMWindow):
        (WebCore::DOMWindow::resetDOMWindowProperties):
        (WebCore):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:
        * page/Performance.cpp:
        (WebCore):
        * page/Performance.h:
        (Performance):
        * page/Performance.idl:

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

        Unreviewed, rolling out r149338.
        http://trac.webkit.org/changeset/149338
        https://bugs.webkit.org/show_bug.cgi?id=115409

        Broke layout/perf/API tests on non-Mac:
        ThreadSpecific<RefPtr<RunLoop>> does not initialize RunLoop
        (Requested by rakuco on #webkit).

        * platform/RunLoop.cpp:
        (WebCore::RunLoop::current):
        * platform/RunLoop.h:
        (RunLoop):
        * platform/cf/RunLoopCF.cpp:
        (WebCore::RunLoop::initializeMainRunLoop):
        (WebCore::RunLoop::current):
        (WebCore::RunLoop::~RunLoop):
        * platform/efl/RunLoopEfl.cpp:
        (WebCore::RunLoop::~RunLoop):
        * platform/gtk/RunLoopGtk.cpp:
        (WebCore::RunLoop::~RunLoop):
        * platform/win/RunLoopWin.cpp:
        (WebCore::RunLoop::~RunLoop):

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

        ImageBufferData: add BlackBerry header
        https://bugs.webkit.org/show_bug.cgi?id=115408

        Reviewed by Carlos Garcia Campos.

        * platform/graphics/ImageBufferData.h:

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

        Replace "Optional" extended attribute by proper Web IDL "optional" keyword
        https://bugs.webkit.org/show_bug.cgi?id=115380

        Reviewed by Kentaro Hara.

        Replace [Optional] with standard WebIDL optional type prefix:
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-optional-argument

        The default behavior now matches WebIDL: [Optional] => optional

        Two cases where WebKit has extended bindings behavior still
        require a non-standard IDL attribute:
        [Optional=DefaultIsNullString] => [Default=NullString] optional
        [Optional=DefaultIsUndefined] => [Default=Undefined] optional

        Based on corresponding Blink patch from Joshua Bell for compatibility.

        No new tests, no behavior change.

        * Modules/battery/BatteryManager.idl:
        * Modules/encryptedmedia/MediaKeySession.idl:
        * Modules/encryptedmedia/MediaKeys.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/FileWriter.idl:
        * Modules/filesystem/WorkerContextFileSystem.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/IDBRequest.idl:
        * Modules/indexeddb/IDBTransaction.idl:
        * Modules/mediasource/MediaSource.idl:
        * Modules/mediasource/SourceBufferList.idl:
        * Modules/mediastream/MediaStream.idl:
        * Modules/mediastream/MediaStreamTrack.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/RTCDTMFSender.idl:
        * Modules/mediastream/RTCDataChannel.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/mediastream/RTCStatsResponse.idl:
        * Modules/networkinfo/NetworkInfoConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/speech/SpeechGrammarList.idl:
        * Modules/speech/SpeechRecognition.idl:
        * Modules/speech/SpeechSynthesisUtterance.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webaudio/AudioNode.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/WebSocket.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GetFunctionLength):
        (GenerateFunctionParametersCheck):
        (GenerateArgumentsCountCheck):
        (GenerateParametersCheck):
        (GenerateConstructorDefinition):
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/IDLParser.pm:
        (parseOptionalOrRequiredArgument):
        * bindings/scripts/test/TestEventTarget.idl:
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestNamedConstructor.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestTypedefs.idl: optional cannot be used in a typedef.
        * 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/FontLoader.idl:
        * css/MediaList.idl:
        * css/MediaQueryList.idl:
        * css/MediaQueryListListener.idl:
        * css/StyleMedia.idl:
        * css/StyleSheetList.idl:
        * css/WebKitCSSKeyframesRule.idl:
        * css/WebKitCSSMatrix.idl:
        * dom/CharacterData.idl:
        * dom/ClientRectList.idl:
        * dom/Clipboard.idl:
        * dom/CompositionEvent.idl:
        * dom/CustomEvent.idl:
        * dom/DOMImplementation.idl:
        * dom/DOMStringList.idl:
        * dom/DataTransferItem.idl:
        * dom/DataTransferItemList.idl:
        * dom/DeviceMotionEvent.idl:
        * dom/DeviceOrientationEvent.idl:
        * dom/Document.idl:
        * dom/Element.idl:
        * dom/Event.idl:
        * dom/EventTarget.idl:
        * dom/HashChangeEvent.idl:
        * dom/KeyboardEvent.idl:
        * dom/MessageEvent.idl:
        * dom/MessagePort.idl:
        * dom/MouseEvent.idl:
        * dom/MutationEvent.idl:
        * dom/NamedNodeMap.idl:
        * dom/Node.idl:
        * dom/NodeFilter.idl:
        * dom/NodeList.idl:
        * dom/OverflowEvent.idl:
        * dom/Range.idl:
        * dom/ShadowRoot.idl:
        * dom/Text.idl:
        * dom/TextEvent.idl:
        * dom/TouchEvent.idl:
        * dom/UIEvent.idl:
        * dom/WebKitNamedFlow.idl:
        * dom/WheelEvent.idl:
        * fileapi/Blob.idl:
        * fileapi/FileReader.idl:
        * fileapi/FileReaderSync.idl:
        * html/DOMFormData.idl:
        * html/DOMTokenList.idl:
        * html/HTMLAllCollection.idl:
        * html/HTMLAudioElement.idl:
        * html/HTMLCanvasElement.idl:
        * html/HTMLCollection.idl:
        * html/HTMLDocument.idl:
        * html/HTMLElement.idl:
        * html/HTMLFormControlsCollection.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLOptionsCollection.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/MediaController.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasRenderingContext2D.idl:
        * html/canvas/DOMPath.idl:
        * html/canvas/DataView.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Float64Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/OESVertexArrayObject.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/Uint8ClampedArray.idl:
        * html/track/AudioTrackList.idl:
        * html/track/TextTrack.idl:
        * html/track/TextTrackCue.idl:
        * html/track/TextTrackList.idl:
        * html/track/VideoTrackList.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * page/DOMSelection.idl:
        * page/DOMWindow.idl:
        * page/EventSource.idl:
        * page/History.idl:
        * page/Location.idl:
        * page/Performance.idl:
        * plugins/DOMMimeTypeArray.idl:
        * plugins/DOMPlugin.idl:
        * plugins/DOMPluginArray.idl:
        * storage/StorageEvent.idl:
        * svg/ElementTimeControl.idl:
        * svg/SVGDocument.idl:
        * svg/SVGElementInstanceList.idl:
        * svg/SVGFEDropShadowElement.idl:
        * svg/SVGFEGaussianBlurElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFilterElement.idl:
        * svg/SVGLocatable.idl:
        * svg/SVGMarkerElement.idl:
        * svg/SVGPathElement.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStyledElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGTextContentElement.idl:
        * testing/Internals.idl:
        * workers/AbstractWorker.idl:
        * workers/DedicatedWorkerContext.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:
        * workers/WorkerContext.idl:
        * xml/DOMParser.idl:
        * xml/XMLHttpRequest.idl:
        * xml/XMLHttpRequestUpload.idl:
        * xml/XMLSerializer.idl:
        * xml/XPathEvaluator.idl:
        * xml/XPathExpression.idl:
        * xml/XPathNSResolver.idl:
        * xml/XPathResult.idl:
        * xml/XSLTProcessor.idl:

2013-04-30  Jocelyn Turcotte  <jocelyn.turcotte@digia.com>

        Fix the USE(3D_GRAPHICS) build with the standard OpenGL on Windows
        https://bugs.webkit.org/show_bug.cgi?id=114684

        Reviewed by Simon Hausmann.

        Currently USE(3D_GRAPHICS) is only supported with OpenGLES through ANGLE
        on Windows. Allow building with the stock opengl32.lib on Windows by adding
        missing glCompressedTex* entries in OpenGLShims.
        Those are used in Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp
        and will be substituted by the preprocessor.

        * platform/graphics/OpenGLShims.cpp:
        (WebCore::initializeOpenGLShims):
        * platform/graphics/OpenGLShims.h:
        (_OpenGLFunctionTable):

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

        Remove all remaining Skia code
        https://bugs.webkit.org/show_bug.cgi?id=115263

        Reviewed by Benjamin Poulain.

        * html/HTMLCanvasElement.cpp:
        (WebCore): Remove the MaxSkiaDim constant, which was a leftover
        from r149193.
        * platform/graphics/harfbuzz/FontHarfBuzz.cpp: Removed.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.cpp: Removed.
        * platform/graphics/harfbuzz/FontPlatformDataHarfBuzz.h: Removed.
        * platform/graphics/harfbuzz/HarfBuzzFaceSkia.cpp: Removed.

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

        Fix build.

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::DerivedFontData::~DerivedFontData):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):

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

        Don't do CGContext flipping when painting subframes in WebKit1 on post-MountainLion OSes
        https://bugs.webkit.org/show_bug.cgi?id=115392
        <rdar://problem/13421519>

        Reviewed by Beth Dakin.

        Sync up with AppKit behavior changes that could cause subviews to be flipped when
        painted.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::paint):

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

        WEB SPEECH: need to identify the default voice per language
        https://bugs.webkit.org/show_bug.cgi?id=115366

        Reviewed by Tim Horton.

        Use a WKSystemInterface method to determine which voice per language is the default voice.

        When looking for a voice, there may not be a default at all, so we need to search until we
        find a default.

        * WebCore.exp.in:
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (-[WebSpeechSynthesisWrapper speakUtterance:WebCore::]):
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

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

        Settings.in selectionIncludesAltImageText should default to true, due to update in HTML spec.
        https://bugs.webkit.org/show_bug.cgi?id=115283

        Reviewed by Chris Fleizach.

        Config change due to this spec update:
        https://www.w3.org/Bugs/Public/show_bug.cgi?id=21403
        http://html5.org/tools/web-apps-tracker?from=7854&to=7855

        Updated existing test coverage.

        * page/Settings.in:

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

        Make RunLoop ref-counted
        https://bugs.webkit.org/show_bug.cgi?id=115384

        Reviewed by Sam Weinig.

        This is a step towards creating a shared base class that both RunLoop and WorkQueue will derive from.

        * platform/RunLoop.cpp:
        (WebCore::RunLoop::current):
        (WebCore::RunLoop::~RunLoop):
        (WebCore):
        * platform/RunLoop.h:
        (RunLoop):
        * platform/cf/RunLoopCF.cpp:
        (WebCore::RunLoop::initializeMainRunLoop):
        (WebCore::RunLoop::current):
        (WebCore::RunLoop::~RunLoop):

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

        [Windows, WinCairo] Remove link and include directives for pthread.
        https://bugs.webkit.org/show_bug.cgi?id=115381

        Reviewed by Benjamin Poulain.

        Update various VS2005 and VS2010 property sheets to remove
        reference to the pthreads Include path and instructions to
        link to the pthreads library.

        * WebCore.vcproj/QTMovieWinCommon.vsprops:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/WebCoreDebug.vsprops:
        * WebCore.vcproj/WebCoreDebugAll.vsprops:
        * WebCore.vcproj/WebCoreProduction.vsprops:
        * WebCore.vcproj/WebCorePthreads.vsprops: Removed.
        * WebCore.vcproj/WebCoreRelease.vsprops:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/WebCoreDebug.props:
        * WebCore.vcxproj/WebCoreDebugWinCairo.props:
        * WebCore.vcxproj/WebCoreProduction.props:
        * WebCore.vcxproj/WebCorePthreads.props: Removed.
        * WebCore.vcxproj/WebCoreRelease.props:
        * WebCore.vcxproj/WebCoreReleaseWinCairo.props:

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

        Do not allocate Static Strings for Notification::permissionString
        https://bugs.webkit.org/show_bug.cgi?id=115316

        Reviewed by Geoffrey Garen.

        The code is not nearly hot enough to justify keeping this memory around.

        * Modules/notifications/Notification.cpp:
        (WebCore::Notification::permission):
        (WebCore::Notification::permissionString):
        * Modules/notifications/Notification.h:
        (Notification):

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

        Remove StorageTracker::originsLoaded
        https://bugs.webkit.org/show_bug.cgi?id=115382

        Reviewed by Sam Weinig.

        Remove m_finishedImportingOriginIdentifiers.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::StorageTracker):
        (WebCore::StorageTracker::finishedImportingOriginIdentifiers):
        * storage/StorageTracker.h:
        (StorageTracker):

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

        Get rid of StorageTracker::setClient
        https://bugs.webkit.org/show_bug.cgi?id=115376

        Reviewed by Sam Weinig.

        * WebCore.exp.in:
        * storage/StorageTracker.cpp:
        * storage/StorageTracker.h:
        (StorageTracker):

2013-04-22  Jeffrey Pfau  <jpfau@apple.com>

        Change approach to third-party blocking for LocalStorage
        https://bugs.webkit.org/show_bug.cgi?id=115004

        Reviewed by Maciej Stachowiak.

        Instead of outright blocking LocalStorage that's used in a third-party
        context, silently partition it based on the origin of the top context.
        These partitions are then discarded when the page group is unloaded.

        No new tests; modified existing tests to account for changes.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::localStorage):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::localStorage):
        (WebCore):
        (WebCore::PageGroup::transientLocalStorage):
        * page/PageGroup.h:
        (PageGroup):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canAccessStorage):

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

        HTML Editing: Insertion point jumps when using link detection
        https://bugs.webkit.org/show_bug.cgi?id=82198

        Reviewed by Ryosuke Niwa.

        Add links should be done only when typing a word separator (e.g. space or dot) which 
        breaks the text into two parts - the link and the rest of the text. Reflected in 
        code, we should only add link when the caret position is at the right end location of 
        TextChecking result. Otherwise, the text on the right of a word separator could be
        highlighted as a link and the insertion point jumps unexpectedly.

        Tests: update editing/inserting/typing-space-to-trigger-smart-link.html

        * editing/Editor.cpp:
        (WebCore::Editor::markAndReplaceFor):

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

        Need a LayoutMilestone to fire when we have done our first paint after suppressing 
        incremental layout
        https://bugs.webkit.org/show_bug.cgi?id=115330
        -and corresponding-
        <rdar://problem/12722365>

        Reviewed by Simon Fraser.

        To meet the needs of all of our clients, we really need two milestones. One 
        indicating that a layout has happened after setVisualUpdatesAllowed(true), and 
        another indicating that painting has happened.

        If layout is needed when setVisualUpdatesAllowed(true) is called, we need to 
        update it so that we can guarantee the first paint is really happening at this 
        time. Also fire the DidFirstLayoutAfterSuppressedIncrementalRendering milestone, 
        and call add DidFirstPaintAfterSuppressedIncrementalRendering to the FrameView's 
        pending paint milestones. 
        up the painting milestone.
        * dom/Document.cpp:
        (WebCore::Document::setVisualUpdatesAllowed):

        FrameView now stores m_milestonesPendingPaint. We'll send and clear them once we 
        have painted.
        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::paintContents):
        (WebCore::FrameView::addPaintPendingMilestones):
        (WebCore::FrameView::firePaintRelatedMilestones):
        * page/FrameView.h:
        (WebCore::FrameView::milestonesPendingPaint):

        Two new milestones.
        * page/LayoutMilestones.h:
        (WebCore):

        We don't need m_headerLayerAwaitingFirstFlush anymore since we can use FrameView's 
        pending paint milestones instead.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
        (WebCore::RenderLayerCompositor::updateLayerForHeader):
        * rendering/RenderLayerCompositor.h:
        (RenderLayerCompositor):

2013-04-29  David Hyatt  <hyatt@apple.com>

        [Mac] Links can't be hovered or clicked with overlay scrollbars hidden.
        https://bugs.webkit.org/show_bug.cgi?id=99379
        
        This is also <rdar://problem/10929565> Overlay scrollbars prevent hit-testing on
        content underneath them, even when hidden

        Reviewed by Beth Dakin.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::verticalScrollbarWidth):
        (WebCore::RenderLayer::horizontalScrollbarHeight):

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

        Begin cleaning up StorageTracker
        https://bugs.webkit.org/show_bug.cgi?id=115373

        Reviewed by Andreas Kling.

        Rename Mutexes to use "Mutex" and not "Guard".
        Don't use static locals for ".localstorage" and "*.localstorage" strings.
        Put end iterator declarations together with begin declarations.

        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::setDatabaseDirectoryPath):
        (WebCore::StorageTracker::trackerDatabasePath):
        (WebCore::StorageTracker::openTrackerDatabase):
        (WebCore::StorageTracker::finishedImportingOriginIdentifiers):
        (WebCore::StorageTracker::syncImportOriginIdentifiers):
        (WebCore::StorageTracker::syncFileSystemAndTrackerDatabase):
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::syncSetOriginDetails):
        (WebCore::StorageTracker::origins):
        (WebCore::StorageTracker::deleteAllOrigins):
        (WebCore::StorageTracker::syncDeleteAllOrigins):
        (WebCore::StorageTracker::deleteOrigin):
        (WebCore::StorageTracker::syncDeleteOrigin):
        (WebCore::StorageTracker::willDeleteAllOrigins):
        (WebCore::StorageTracker::willDeleteOrigin):
        (WebCore::StorageTracker::canDeleteOrigin):
        (WebCore::StorageTracker::cancelDeletingOrigin):
        (WebCore::StorageTracker::setClient):
        (WebCore::StorageTracker::databasePathForOrigin):
        (WebCore::StorageTracker::diskUsageForOrigin):
        * storage/StorageTracker.h:
        (StorageTracker):

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

        Don't check for @media rules affected by viewport changes in every layout.
        <http://webkit.org/b/115370>
        <rdar://problem/13765739>

        Reviewed by Antti Koivisto.

        Move the logic that checks if any @media rules are affected by a change in the viewport
        size to FrameView::setFrameRect(). This way it's no longer necessary to do the style
        recalc synchronously, which allows us to coalesce multiple updates in some cases.

        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect):
        (WebCore::FrameView::layout):

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

        Remove the last StorageSyncManager function
        https://bugs.webkit.org/show_bug.cgi?id=115371

        Reviewed by Sam Weinig.

        Move the import scheduling to the StorageAreaSync constructor. Remove code to set m_importComplete to true
        since that could only happen if the StorageSyncManager's thread is null which doesn't make any sense.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::create):
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:
        (StorageSyncManager):

2013-04-29  Daker Fernandes Pinheiro  <daker.pinheiro@openbossa.org>

        Remove unused method RenderMeter::valueRatio()
        https://bugs.webkit.org/show_bug.cgi?id=115266

        Reviewed by Darin Adler.

        The removed method is not used anywhere.
        No new tests are required.

        * rendering/RenderMeter.cpp:
        * rendering/RenderMeter.h:
        (RenderMeter):

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

        Remove two more StorageSyncManager wrapper functions
        https://bugs.webkit.org/show_bug.cgi?id=115367

        Reviewed by Andreas Kling.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::scheduleFinalSync):
        (WebCore::StorageAreaSync::syncTimerFired):
        * storage/StorageSyncManager.cpp:
        * storage/StorageSyncManager.h:

2013-04-29  Stephen Chenney  <schenney@chromium.org>

        SVGElement destructor can use invalid iterator
        https://bugs.webkit.org/show_bug.cgi?id=115361

        Reviewed by Philip Rogers.

        When an SVGElement object has rare data, its destructor gets a
        hash map iterator for the rare data, uses it to clear resources,
        then uses the iterator to delete the rare data. However, the resource
        cleanup can delete other SVG elements, thus modifying the hash map
        from which the iterator came and hence invalidating the iterator
        itself.

        The fix is to re-get the iterator before deleting the rare data.

        Test: svg/custom/svg-element-destructor-iteration-crash.html

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::~SVGElement): Get a new iterator after clearing rare data.

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

        REGRESSION: We see authentication challenge sheets for favicon requests.
        <rdar://problem/13753470> and https://bugs.webkit.org/show_bug.cgi?id=115288

        Reviewed by Alexey Proskuryakov.

        No new tests (Not in a tested config, might fix existing test).

        Rename ClientCrossOriginCredentialPolicy to ClientCredentialPolicy, make it be three options.
        and move it to ResourceHandleTypes where it belongs:
        * loader/ResourceLoaderOptions.h:
        * platform/network/ResourceHandleTypes.h:

        Expose the ClientCredentialPolicy the ResourceLoader was created with:
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::clientCredentialPolicy):

        Rework the “should ask client” clause for the new values of ClientCredentialPolicy:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveAuthenticationChallenge):

        Rework loadResourceSynchronously() to include a ClientCredentialPolicy argument:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::loadResourceSynchronously):
        * loader/LoaderStrategy.h:

        Never ask the client for credentials for icon loads:
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):

        Update all other users of ClientCredentialPolicy to the appropriate new value,
        and update all users of loadResourceSynchronously to the new function signature:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::loadResourceSynchronously):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::startLoadingMainResource):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        (FrameLoader):
        * loader/LoaderStrategy.cpp:
        (WebCore::LoaderStrategy::loadResourceSynchronously):
        * loader/LoaderStrategy.h:
        (LoaderStrategy):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::NetscapePlugInStreamLoader):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::defaultCachedResourceOptions):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        * xml/parser/XMLDocumentParserLibxml2.cpp:
        (WebCore::openFunc):

        * WebCore.exp.in:

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

        Add a StorageSyncManager::dispatch helper function
        https://bugs.webkit.org/show_bug.cgi?id=115365

        Reviewed by Andreas Kling.

        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::dispatch):
        (WebCore):
        (WebCore::StorageSyncManager::close):
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        (WebCore::StorageSyncManager::scheduleDeleteEmptyDatabase):
        * storage/StorageSyncManager.h:
        (StorageSyncManager):

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

        Re-indent StorageSyncManager and remove SecurityOrigin forward declaration.

        Rubber-stamped by Andreas Kling.

        * storage/StorageSyncManager.h:

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

        Get rid of StorageTask
        https://bugs.webkit.org/show_bug.cgi?id=115313

        Reviewed by Andreas Kling.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/StorageSyncManager.cpp:
        * storage/StorageTask.cpp: Removed.
        * storage/StorageTask.h: Removed.
        * storage/StorageThread.cpp:
        (WebCore::StorageThread::threadEntryPoint):
        (WebCore::StorageThread::dispatch):
        (WebCore::StorageThread::terminate):
        * storage/StorageThread.h:
        (StorageThread):
        * storage/StorageTracker.cpp:

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

        Add branch-prediction hint to FAST_RETURN_IF_NO_FRONTENDS.
        <http://webkit.org/b/115357>

        Reviewed by Anders Carlsson.

        Since this macro is used in some very hot code paths, give the compiler an extra hint
        to try and minimize the impact it has when the inspector is not active.

        * inspector/InspectorInstrumentation.h:

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

        [WIN] Add WTF_USE_IMLANG_FONT_LINK2
        https://bugs.webkit.org/show_bug.cgi?id=115198

        Reviewed by Andreas Kling.

        Add this new define to have a central place for switching
        the IMLangFontLinkType and adop all usages of the type.
        This makes the usage of the code easier on desktop pcs.

        * platform/graphics/FontCache.h:
        (WebCore):
        * platform/graphics/wince/FontCacheWinCE.cpp:
        (WebCore::currentFontContainsCharacter):
        (WebCore::createMLangFont):
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/wince/SimpleFontDataWinCE.cpp:
        (WebCore::SimpleFontData::containsCharacters):

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

        Get rid of "non-composited contents" in CoordinatedLayerTreeHost
        https://bugs.webkit.org/show_bug.cgi?id=110355

        Reviewed by Jocelyn Turcotte.

        When in force compositing mode, always assume that the main layer needs
        a backing store. Make setVisibleContentRectTrajectoryVector and accumulatedCoverRect
        recursive so that they don't rely on a specialized layer.

        No new testable behavior, changes to coverRect and trajectory vector only
        affect tiling latency in rare cases that are not trivial to test.

        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
        (WebCore::CoordinatedGraphicsLayer:setVisibleContentRectTrajectoryVector):
            Make the trajectory vector recursive, though limited only to layers with
            translate/identity. This allows us to keep the trajectory vector while removing
            the non-composited contents specialization.

        (WebCore::CoordinatedGraphicsLayer::accumulatedCoverRect):
            Added accumulatedCoverRect, so that the coverRect calculations for the UI process
            are not bound to the non-composited contents layer.

        (WebCore::CoordinatedGraphicsLayer::findDescendantWithContentsRecursively):
            Instead of saving a reference to the non-composited contents layer, we assume that
            the first layer we found recursively which has contents is the one to be used for
            coverRect/trajectory calculations.

        (WebCore):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
        (CoordinatedGraphicsLayer):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintsIntoWindow):
            Always create a layer for the non-composited contents when in forceCompositing mode.

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

        Animate clip rect() between different Length types
        https://bugs.webkit.org/show_bug.cgi?id=115336

        Reviewed by Andreas Kling.

        At the moment the animation for the 'clip' property
        has an early return if the type of two Length values
        does not match. This patch removes this early return.

        Modified existing tests to cover the changes.

        * page/animation/CSSPropertyAnimation.cpp:
        (WebCore::blendFunc):

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

        When updating geometry, send JavaScript resize before before layout/paint.
        <http://webkit.org/b/115199>
        <rdar://problem/13735535>

        Reviewed by Geoffrey Garen.

        Make the "resize" event synchronous and dispatch it before doing any automatic
        resize-induced layout. This avoids unnecessary work in cases where an event handler
        does something that dirties style.

        It also avoids a kind of JS-side FOUC that happens if we drop out to the runloop
        and paint before the resize event handler runs; for example, when viewing a popup
        on <http://lokeshdhakar.com/projects/lightbox2/> and resizing the window, the dark
        overlay sometimes resizes out of sync with the web view, since a paint may happen
        between automatic layout and the resize event.

        * page/EventHandler.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchResizeEvent):
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::dispatchResizeEvent):

            Renamed sendResizeEvent() to dispatchResizeEvent() and made it dispatch the event
            synchronously instead of adding it to the DocumentEventQueue.

        (WebCore::FrameView::performPostLayoutTasks):
        (WebCore::FrameView::setFrameRect):

            Dispatch the "resize" event right when the new frame rect is set.

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

        Remove OS(WINCE) from (Render|Scrollbar)ThemeWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115348

        Reviewed by Andreas Kling.

        Compile DIBPixelData.cpp on Windows CE too, which allows us
        to get rid of a few #if OS(WINCE) in other code parts.

        * PlatformWinCE.cmake:
        * platform/graphics/win/DIBPixelData.cpp:
        (WebCore::DIBPixelData::setRGBABitmapAlpha):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintTrackPiece):
        (WebCore::ScrollbarThemeWin::paintButton):
        (WebCore::ScrollbarThemeWin::paintThumb):
        * rendering/RenderThemeWin.cpp:
        (WebCore::drawControl):

2013-04-29  Eli Fidler  <efidler@blackberry.com>

        [BlackBerry] Fake-bold monospace fonts need to use non-fake-bold advances
        https://bugs.webkit.org/show_bug.cgi?id=115280

        Reviewed by George Staikos.

        BlackBerry PR 330864

        Tested by fast/css/css3-ch-unit.html

        * platform/graphics/blackberry/FontPlatformDataBlackBerry.cpp:
        (WebCore::FontPlatformData::applyState):
        (WebCore::FontPlatformData::isFixedPitch):
        * platform/graphics/blackberry/ITypeUtils.h:
        * platform/graphics/blackberry/SimpleFontDataBlackBerry.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

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

        [GTK][AC] Clean up code related with the children management stuff for clutter based AC
        https://bugs.webkit.org/show_bug.cgi?id=114260

        Reviewed by Gustavo Noronha Silva.

        Remove unused or usless code for children management stuff.

        No new tests since no functionality changed.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (_GraphicsLayerActorPrivate):
        (graphics_layer_actor_class_init):
        (graphicsLayerActorAllocate):
        (graphicsLayerActorDraw):
        (graphicsLayerActorNew):
        (graphicsLayerActorSetSublayers):
        * platform/graphics/clutter/GraphicsLayerActor.h:
        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::idleDestroy):
        (WebCore::GraphicsLayerClutter::ensureStructuralLayer):
        (WebCore::GraphicsLayerClutter::updateLayerDrawsContent):

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

        [WIN] Guard cfHDropFormat() with USE(CF) instead of OS(WINCE)
        https://bugs.webkit.org/show_bug.cgi?id=115195

        Reviewed by Andreas Kling.

        USE(CF) is the correct guard, which works on desktop pcs too.

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::numberOfFiles):
        (WebCore::DragData::asFilenames):

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

        Unreviewed. Fix make distcheck.

        * GNUmakefile.am: Add missing scripts to EXTRA_DIST.
        * GNUmakefile.list.am: Add missing files to compilation.

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

        [Qt] fast/canvas/webgl/webgl-composite-modes.html broken after r148433.
        https://bugs.webkit.org/show_bug.cgi?id=115243

        Reviewed by Jocelyn Turcotte.

        When compositing a layer with a canvas or directly composited image, it is
        wrong to use TextureMapperLayer::setBackingStore. Instead, setContentsLayer
        should be used, which allows for the layer to have both a backing store and
        a contents layer.

        * platform/graphics/texmap/TextureMapperLayer.cpp:
        (WebCore::TextureMapperLayer::paintSelf):
        * platform/graphics/texmap/TextureMapperLayer.h:
        (State):
        (WebCore::TextureMapperLayer::State::State):
        * platform/graphics/texmap/coordinated/CoordinatedGraphicsScene.cpp:
        (WebCore::CoordinatedGraphicsScene::createCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::destroyCanvasIfNeeded):
        (WebCore::CoordinatedGraphicsScene::assignImageBackingToLayer):

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

        Unreviewed build fix.

        * bindings/js/WorkerScriptDebugServer.cpp: Added missing header.

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

        Unreviewed build fix.

        * platform/graphics/wince/FontWinCE.cpp:
        (WebCore::generateComponents):

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

        Remove OS(WINCE) from HTMLSelectElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=115194

        Reviewed by Andreas Kling.

        Use the same files like the the other PLATFORM(WIN) ports use.

        * PlatformWinCE.cmake:
        * html/HTMLSelectElement.cpp:
        (WebCore):

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

        StaticHashSetNodeList is unnecessary
        https://bugs.webkit.org/show_bug.cgi?id=115219

        Reviewed by Antonio Gomes.

        Moved Document::nodesFromRect into Internals::nodesFromRect per
        https://chromium.googlesource.com/chromium/blink/+/78207c5c34383fbb807bb9347deb67168f09bb04.

        Also made TouchAdjustment functions use HashListSet directly instead of wrapping it inside
        a StaticHashSetNodeList since there was no need to use the latter.

        With these two changes, I deleted StaticHashSetNodeList.

        * GNUmakefile.list.am:
        * Target.pri:
        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore):
        * dom/Document.h:
        (Document):
        * dom/StaticHashSetNodeList.cpp: Removed.
        * dom/StaticHashSetNodeList.h: Removed.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::bestClickableNodeForTouchPoint):
        (WebCore::EventHandler::bestContextMenuNodeForTouchPoint):
        (WebCore::EventHandler::bestZoomableAreaForTouchPoint):
        * page/TouchAdjustment.cpp:
        (WebCore::TouchAdjustment::compileSubtargetList):
        (WebCore::TouchAdjustment::compileZoomableSubtargets):
        (WebCore::findBestClickableCandidate):
        (WebCore::findBestContextMenuCandidate):
        (WebCore::findBestZoomableArea):
        * page/TouchAdjustment.h:
        (WebCore):
        * testing/Internals.cpp:
        (WebCore::Internals::nodesFromRect):

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

        [Mac] Disable canvas backing store scaling (HIGH_DPI_CANVAS)
        https://bugs.webkit.org/show_bug.cgi?id=115310

        Reviewed by Simon Fraser.

        Disable the automatic pixel doubling in canvas backing stores on high
        dpi devices. This will potentially make canvases look worse of high dpi
        displays, but only if they were ignoring devicePixelRatio. Since the
        majority of high dpi displays *do not* auto-double (including mobile
        devices and other desktop browsers), this provides consistency and less
        chance of unnecessary memory use.

        * Configurations/FeatureDefines.xcconfig: Remove ENABLE_HIGH_DPI_CANVAS_macosx.

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

        Get rid of [Callback] IDL extended attribute for parameters
        https://bugs.webkit.org/show_bug.cgi?id=115250

        Reviewed by Kentaro Hara.

        Remove the WebKit-specific [Callback] extended attribute and make the bindings
        generator smart enough to know when a parameter is of callback type on its
        own.

        No new tests, no behavior change.

        * DerivedSources.make: Use WebCore/Modules as IDL include path instead of using
        subdirs. The generator will search recursively anyway and the list of subdirs was
        incomplete.
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DirectoryEntry.idl:
        * Modules/filesystem/DirectoryReader.idl:
        * Modules/filesystem/Entry.idl:
        * Modules/filesystem/FileEntry.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/mediastream/RTCPeerConnection.idl:
        * Modules/notifications/Notification.idl:
        * Modules/notifications/NotificationCenter.idl:
        * Modules/quota/StorageInfo.idl:
        * Modules/quota/StorageQuota.idl:
        * Modules/webaudio/AudioContext.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/Database.idl:
        * Modules/webdatabase/DatabaseSync.idl:
        * Modules/webdatabase/SQLTransaction.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * bindings/gobject/GNUmakefile.am: Add missing IDL include dirs.
        * bindings/scripts/CodeGenerator.pm:
        (IsWrapperType):
        (IsCallbackInterface):
        * bindings/scripts/CodeGeneratorGObject.pm:
        (SkipFunction):
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateParametersCheckExpression):
        (GenerateParametersCheck):
        * bindings/scripts/IDLAttributes.txt: Remove "Callback" extended attribute.
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::callbackWithArrayParam):
        (WebDOMTestCallback::callbackWithSerializedScriptValueParam):
        (WebDOMTestCallback::callbackWithNonBoolReturnType):
        (WebDOMTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        (WebDOMTestCallback):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::convert1):
        (WebDOMTestObj::convert2):
        (WebDOMTestObj::convert4):
        (WebDOMTestObj::convert5):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.cpp:
        (WebDOMTestSerializedScriptValueInterface::acceptTransferList):
        (WebDOMTestSerializedScriptValueInterface::multiTransferList):
        * bindings/scripts/test/CPP/WebDOMTestSerializedScriptValueInterface.h:
        (WebDOMTestSerializedScriptValueInterface):
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.cpp:
        (WebDOMTestTypedefs::multiTransferList):
        * bindings/scripts/test/CPP/WebDOMTestTypedefs.h:
        (WebDOMTestTypedefs):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_array_param):
        (webkit_dom_test_callback_callback_with_serialized_script_value_param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        (webkit_dom_test_callback_callback_requires_this_to_pass):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_convert1):
        (webkit_dom_test_obj_convert2):
        (webkit_dom_test_obj_convert4):
        (webkit_dom_test_obj_convert5):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.cpp:
        (webkit_dom_test_serialized_script_value_interface_accept_transfer_list):
        (webkit_dom_test_serialized_script_value_interface_multi_transfer_list):
        * bindings/scripts/test/GObject/WebKitDOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.cpp:
        (webkit_dom_test_typedefs_multi_transfer_list):
        * bindings/scripts/test/GObject/WebKitDOMTestTypedefs.h:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::callbackWithArrayParam):
        (WebCore::JSTestCallback::callbackWithSerializedScriptValueParam):
        (WebCore::JSTestCallback::callbackRequiresThisToPass):
        * bindings/scripts/test/JS/JSTestCallback.h:
        (JSTestCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionConvert1):
        (WebCore::jsTestObjPrototypeFunctionConvert2):
        (WebCore::jsTestObjPrototypeFunctionConvert4):
        (WebCore::jsTestObjPrototypeFunctionConvert5):
        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::constructJSTestSerializedScriptValueInterface):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionAcceptTransferList):
        (WebCore::jsTestSerializedScriptValueInterfacePrototypeFunctionMultiTransferList):
        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
        (WebCore::jsTestTypedefsPrototypeFunctionMultiTransferList):
        * bindings/scripts/test/ObjC/DOMTestCallback.h:
        * bindings/scripts/test/ObjC/DOMTestCallback.mm:
        (-[DOMTestCallback callbackWithArrayParam:]):
        (-[DOMTestCallback callbackWithSerializedScriptValueParam:strArg:]):
        (-[DOMTestCallback callbackWithNonBoolReturnType:]):
        (-[DOMTestCallback callbackRequiresThisToPass:testNodeParam:]):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj convert1:]):
        (-[DOMTestObj convert2:]):
        (-[DOMTestObj convert4:]):
        (-[DOMTestObj convert5:]):
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.h:
        * bindings/scripts/test/ObjC/DOMTestSerializedScriptValueInterface.mm:
        (-[DOMTestSerializedScriptValueInterface acceptTransferList:transferList:]):
        (-[DOMTestSerializedScriptValueInterface multiTransferList:tx:second:txx:]):
        * bindings/scripts/test/ObjC/DOMTestTypedefs.h:
        * bindings/scripts/test/ObjC/DOMTestTypedefs.mm:
        (-[DOMTestTypedefs multiTransferList:tx:second:txx:]):
        * bindings/scripts/test/TestCallback.idl: Use valid types instead of Class1, Class2, ...
        so that the bindings generator does not complain about not being able to resolve
        them.
        * bindings/scripts/test/TestObj.idl: Use valid parameter types instead of 'a', 'b', 'd', 'e'
        so that the bindings generator does not complain about them.
        * bindings/scripts/test/TestSerializedScriptValueInterface.idl:
        * bindings/scripts/test/TestTypedefs.idl:
        * css/FontLoader.idl:
        * dom/DataTransferItem.idl:
        * page/DOMWindow.idl:

2013-04-27  Darin Adler  <darin@apple.com>

        Move from constructor and member function adoptCF/NS to free function adoptCF/NS.
        https://bugs.webkit.org/show_bug.cgi?id=115307

        Reviewed by Geoffrey Garen.

        This change was done by a global replace followed by compiling and inspecting for
        cases that needed to be tweaked by hand.

        * accessibility/ios/AXObjectCacheIOS.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::attachWrapper):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodNamed):
        (JSC::Bindings::ObjcClass::fieldNamed):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::ObjcField):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):
        * history/cf/HistoryPropertyList.cpp:
        (WebCore::HistoryPropertyListWriter::releaseData):
        * html/HTMLMediaElement.cpp:
        (WebCore::createFileURLForApplicationCacheResource):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        (WebCore::LegacyWebArchive::create):
        (WebCore::LegacyWebArchive::rawDataRepresentation):
        * loader/archive/cf/LegacyWebArchiveMac.mm:
        (WebCore::LegacyWebArchive::createPropertyListRepresentation):
        * loader/mac/ResourceLoaderMac.mm:
        (WebCore::ResourceLoader::willCacheResponse):
        * page/CaptionUserPreferencesMac.mm:
        (WebCore::CaptionUserPreferencesMac::userPrefersCaptions):
        (WebCore::CaptionUserPreferencesMac::userPrefersSubtitles):
        (WebCore::CaptionUserPreferencesMac::captionsWindowCSS):
        (WebCore::CaptionUserPreferencesMac::captionsBackgroundCSS):
        (WebCore::CaptionUserPreferencesMac::captionsTextColor):
        (WebCore::CaptionUserPreferencesMac::captionsDefaultFontCSS):
        (WebCore::CaptionUserPreferencesMac::preferredLanguages):
        (WebCore::trackDisplayName):
        * platform/Language.cpp:
        (WebCore::displayNameForLanguageLocale):
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagSearchWeb):
        (WebCore::imageTitle):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        * platform/audio/mac/AudioFileReaderMac.cpp:
        (WebCore::AudioFileReader::AudioFileReader):
        * platform/cf/KURLCFNet.cpp:
        (WebCore::KURL::fileSystemPath):
        * platform/cf/SharedBufferCF.cpp:
        (WebCore::SharedBuffer::maybeTransferPlatformData):
        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
        (WebCore::MediaPlayerPrivateAVFoundationObjC::MediaPlayerPrivateAVFoundationObjC):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoLayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayer):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::createVideoOutput):
        (WebCore::MediaPlayerPrivateAVFoundationObjC::paintWithVideoOutput):
        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::GraphicsLayerCA::setContentsToImage):
        * platform/graphics/ca/mac/LayerFlushSchedulerMac.cpp:
        (WebCore::LayerFlushScheduler::schedule):
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::PlatformCAAnimation):
        * platform/graphics/ca/mac/PlatformCAFiltersMac.mm:
        (PlatformCAFilters::filterValueForOperation):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::addAnimationForKey):
        (PlatformCALayer::setBackgroundColor):
        (PlatformCALayer::setBorderColor):
        * platform/graphics/cg/BitmapImageCG.cpp:
        (WebCore::BitmapImage::checkForSolidColor):
        (WebCore::BitmapImage::getCGImageArray):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::ImageExtractor::extractImage):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::applyStrokePattern):
        (WebCore::GraphicsContext::applyFillPattern):
        (WebCore::GraphicsContext::setURLForRect):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::createIOSurface):
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::putByteArray):
        (WebCore::CGImageEncodeToData):
        (WebCore::CGImageToDataURL):
        (WebCore::ImageBuffer::toDataURL):
        (WebCore::ImageDataToDataURL):
        * platform/graphics/cg/ImageBufferDataCG.cpp:
        (WebCore::ImageBufferData::getData):
        (WebCore::ImageBufferData::putData):
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::Image::imageWithColorSpace):
        (WebCore::Image::drawPattern):
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::setData):
        (WebCore::ImageSource::isSizeAvailable):
        (WebCore::ImageSource::frameSizeAtIndex):
        (WebCore::ImageSource::orientationAtIndex):
        (WebCore::ImageSource::getHotSpot):
        (WebCore::ImageSource::repetitionCount):
        (WebCore::ImageSource::createFrameAtIndex):
        (WebCore::ImageSource::frameDurationAtIndex):
        * platform/graphics/cg/PDFDocumentImage.cpp:
        (WebCore::PDFDocumentImage::dataChanged):
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::createScratchContext):
        (WebCore::Path::contains):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::setFont):
        (WebCore::createFeatureSettingDictionary):
        (WebCore::cascadeToLastResortFontDescriptor):
        (WebCore::cascadeToLastResortAndDisableSwashesFontDescriptor):
        (WebCore::FontPlatformData::ctFont):
        (WebCore::FontPlatformData::description):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (-[WebCascadeList objectAtIndex:]):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::linearRGBColorSpaceRef):
        * platform/graphics/mac/ImageMac.mm:
        (WebCore::BitmapImage::getTIFFRepresentation):
        (WebCore::BitmapImage::getNSImage):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView):
        (WebCore::MediaPlayerPrivateQTKit::createQTVideoRenderer):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::setPreservesPitch):
        (WebCore::addFileTypesToCache):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::fontHasVerticalGlyphs):
        (WebCore::SimpleFontData::getCompositeFontReferenceFontData):
        (WebCore::SimpleFontData::platformCharWidthInit):
        (WebCore::SimpleFontData::canRenderCombiningCharacterSequence):
        * platform/graphics/mac/WebGLLayer.mm:
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        * platform/mac/ContentFilterMac.mm:
        (WebCore::ContentFilter::ContentFilter):
        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::ContextMenuItem):
        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor):
        (WebCore::createNamedCursor):
        * platform/mac/DisplaySleepDisabler.cpp:
        (WebCore::DisplaySleepDisabler::DisplaySleepDisabler):
        * platform/mac/DragImageMac.mm:
        (WebCore::dissolveDragImageToFraction):
        (WebCore::createDragImageFromImage):
        * platform/mac/HTMLConverter.mm:
        (+[WebHTMLConverter editingAttributedStringFromRange:]):
        * platform/mac/Language.mm:
        (WebCore::httpStyleLanguageCode):
        (WebCore::platformUserPreferredLanguages):
        * platform/mac/LocalizedStringsMac.cpp:
        (WebCore::localizedString):
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::getDataSelection):
        (WebCore::Pasteboard::writeSelectionForTypes):
        (WebCore::fragmentFromWebArchive):
        * platform/mac/PlatformClockCM.mm:
        (PlatformClockCM::PlatformClockCM):
        (PlatformClockCM::initializeWithTimingSource):
        * platform/mac/PlatformPasteboardMac.mm:
        (WebCore::PlatformPasteboard::addTypes):
        (WebCore::PlatformPasteboard::setTypes):
        (WebCore::PlatformPasteboard::setPathnamesForType):
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::PlatformSpeechSynthesizer::speak):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenuMac::populate):
        (WebCore::PopupMenuMac::show):
        * platform/mac/ScrollAnimatorMac.mm:
        (-[WebScrollbarPainterDelegate setUpAlphaAnimation:scrollerPainter:part:WebCore::animateAlphaTo:duration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateUIStateTransitionWithDuration:]):
        (-[WebScrollbarPainterDelegate scrollerImp:animateExpansionTransitionWithDuration:]):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::didAddVerticalScrollbar):
        (WebCore::ScrollAnimatorMac::didAddHorizontalScrollbar):
        * platform/mac/SharedBufferMac.mm:
        (WebCore::SharedBuffer::createCFData):
        * platform/mac/WebCoreNSStringExtras.mm:
        (stringEncodingForResource):
        * platform/network/ProtectionSpace.cpp:
        (WebCore::ProtectionSpace::receivesCredentialSecurely):
        * platform/network/SynchronousLoaderClient.cpp:
        (WebCore::SynchronousLoaderClient::platformBadResponseError):
        * platform/network/cf/CredentialStorageCFNet.cpp:
        (WebCore::CredentialStorage::getFromPersistentStorage):
        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::platformProxyIsEnabledInSystemPreferences):
        * platform/network/cf/FormDataStreamCFNet.cpp:
        (WebCore::advanceCurrentStream):
        * platform/network/cf/NetworkStorageSessionCFNet.cpp:
        (WebCore::overrideCookieStorage):
        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore::proxyAutoConfigurationResultCallback):
        (WebCore::processProxyServers):
        (WebCore::addProxyServersForURL):
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::platformLazyInit):
        (WebCore::ResourceError::cfError):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::willSendRequest):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::handleDataArray):
        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::setHeaderFields):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/cf/ResourceResponseCFNet.cpp:
        (WebCore::ResourceResponse::cfURLResponse):
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::executePACFileURL):
        (WebCore::SocketStreamHandle::chooseProxy):
        (WebCore::SocketStreamHandle::createStreams):
        (WebCore::SocketStreamHandle::addCONNECTCredentials):
        (WebCore::SocketStreamHandle::readStreamCallback):
        (WebCore::SocketStreamHandle::writeStreamCallback):
        (WebCore::SocketStreamHandle::reportErrorToClient):
        * platform/network/mac/AuthenticationMac.mm:
        (WebCore::mac):
        (WebCore::AuthenticationChallenge::setAuthenticationClient):
        * platform/network/mac/CookieJarMac.mm:
        (WebCore::filterCookies):
        * platform/network/mac/NetworkStateNotifierMac.cpp:
        (WebCore::NetworkStateNotifier::updateState):
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):
        * platform/network/mac/ResourceErrorMac.mm:
        (WebCore::createNSErrorFromResourceErrorBase):
        (WebCore::ResourceError::nsError):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        * platform/network/mac/ResourceRequestMac.mm:
        (WebCore::ResourceRequest::updateNSURLRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdatePlatformHTTPBody):
        (WebCore::ResourceRequest::setStorageSession):
        * platform/network/mac/ResourceResponseMac.mm:
        (WebCore::ResourceResponse::initNSURLResponse):
        (WebCore::ResourceResponse::nsURLResponse):
        (WebCore::ResourceResponse::platformLazyInit):
        * platform/network/mac/UTIUtilities.mm:
        (WebCore::mimeTypeFromUTITree):
        * platform/network/mac/WebCoreURLResponse.mm:
        (WebCore::adjustMIMETypeIfNecessary):
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForNullKey):
        (WebCore::lastHyphenLocation):
        * platform/text/mac/HyphenationMac.mm:
        (WebCore::::createValueForKey):
        (WebCore::lastHyphenLocation):
        * platform/text/mac/LocaleMac.mm:
        (WebCore::determineLocale):
        (WebCore::LocaleMac::LocaleMac):
        (WebCore::LocaleMac::initializeLocaleData):
        * platform/text/mac/TextBreakIteratorInternalICUMac.mm:
        (WebCore::textBreakLocalePreference):
        (WebCore::canonicalLanguageIdentifier):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::levelIndicatorFor):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::searchMenuTemplate):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):
        (WebCore::RenderThemeMac::textField):
        Use adoptNS and adoptCF free functions.

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

        Pressing mouse button inside a dragstart event causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=115296

        Reviewed by Darin Adler.

        Add a missing null pointer check. We should better encapsulate the states in DragState in the long term
        but this is good enough for now.

        Test: fast/events/mousedown-inside-dragstart-should-not-cause-crash.html

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

2013-04-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix when disabling video and video-track.

        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:

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

        WebGL shouldn't allocate a "length" Identifier just to move some numbers around
        https://bugs.webkit.org/show_bug.cgi?id=115317

        Reviewed by Dean Jackson.

        Saw this while debugging an ammo.js bug.

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::setWebGLArrayWithTypedArrayArgument):
        (WebCore::setWebGLArrayHelper):
        (WebCore::constructArrayBufferViewWithTypedArrayArgument):
        (WebCore::constructArrayBufferView):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toVector): Use the pre-computed "length" identifier instead of
        allocating a new one for each vector operation. There are lots more
        optimizations we could do here. This is a start.

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

        Remove two more StorageTask types
        https://bugs.webkit.org/show_bug.cgi?id=115312

        Reviewed by Dean Jackson.

        * storage/StorageTask.cpp:
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::setOriginDetails):
        (WebCore::StorageTracker::deleteOrigin):
        * storage/StorageTracker.h:

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

        Get rid of more uses of StorageTask
        https://bugs.webkit.org/show_bug.cgi?id=115311

        Reviewed by Dean Jackson.

        Make StorageAreaSync derive from ThreadSafeRefCounted as well, since it's passed between threads.

        * storage/StorageAreaSync.h:
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::scheduleImport):
        (WebCore::StorageSyncManager::scheduleSync):
        (WebCore::StorageSyncManager::scheduleDeleteEmptyDatabase):
        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        (StorageTask):

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

        Indent StorageAreaSync to match the style guidelines.

        Rubber-stamped by Andreas Kling.

        * storage/StorageAreaSync.h:

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

        Replace uses of StorageTask with StorageThread::dispatch and WTF::bind
        https://bugs.webkit.org/show_bug.cgi?id=115309

        Reviewed by Andreas Kling.

        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        * storage/StorageThread.cpp:
        (WebCore::StorageThread::terminate):
        (WebCore::StorageThread::releaseFastMallocFreeMemoryInAllThreads):
        * storage/StorageThread.h:
        * storage/StorageTracker.cpp:
        (WebCore::StorageTracker::importOriginIdentifiers):
        (WebCore::StorageTracker::deleteAllOrigins):

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

        Add StorageThread::dispatch
        https://bugs.webkit.org/show_bug.cgi?id=115308

        Reviewed by Andreas Kling.

        StorageThread::dispatch takes a Function<void ()> and runs it on the storage thread. This will be used to eventually get rid of StorageTask.

        * storage/StorageTask.cpp:
        (WebCore::StorageTask::StorageTask):
        (WebCore::StorageTask::performTask):
        * storage/StorageTask.h:
        (WebCore::StorageTask::createDispatch):
        * storage/StorageThread.cpp:
        (WebCore::StorageThread::dispatch):
        * storage/StorageThread.h:
        (StorageThread):

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

        REGRESSION (r147261): Audio controls background not displayed after loading audio file
        https://bugs.webkit.org/show_bug.cgi?id=115221

        Reviewed by Darin Adler.

        As in r147261, set a flex-shrink: 0 to avoid shrinking the media controls panel
        below the specified height.

        No new tests; fixes the media/media-document-audio-repaint.html test.

        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel):

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

        Video playback has corruption on the edges of the video
        https://bugs.webkit.org/show_bug.cgi?id=115216

        Reviewed by Simon Fraser.

        Test: media/video-poster-background.html

        RenderImage correctly answers foregroundIsKnownToBeOpaqueInRect() method
        when a poster image is displayed, but once the video begins playing and
        the poster image is no longer displayed, RenderImage will continue to
        answer 'true' even when the video does not occupy the entire render box.
        Override foregroundIsKnownToBeOpaqueInRect() in order to more correctly
        answer the question for the video layer.

        * rendering/RenderImage.h: Make foregroundIsKnownToBeOpaqueInRect() protected
            (vs. private).
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::foregroundIsKnownToBeOpaqueInRect): Added. Return
            true if the rect parameter is entirely contained by the video box.
        * rendering/RenderVideo.h:

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

        [CSS Exclusions] ExclusionShape bounding box methods should return LayoutRects
        https://bugs.webkit.org/show_bug.cgi?id=115117

        Reviewed by Dirk Schulze.

        Redefined the ExclusionShape API in terms of LayoutUnits, instead of floats: all of the
        ExclusionShape methods now have LayoutUnit parameters and return LayoutUnit values.
        This is more natural, since the callers work exclusively in LayoutUnits.

        This is strictly a refactoring, no new tests were needed.

        * rendering/ExclusionPolygon.cpp:
        (WebCore::ExclusionPolygon::getExcludedIntervals):
        (WebCore::ExclusionPolygon::getIncludedIntervals):
        (WebCore::ExclusionPolygon::firstIncludedIntervalLogicalTop):
        * rendering/ExclusionPolygon.h:
        * rendering/ExclusionRectangle.cpp:
        (WebCore::ExclusionRectangle::getExcludedIntervals):
        (WebCore::ExclusionRectangle::getIncludedIntervals):
        (WebCore::ExclusionRectangle::firstIncludedIntervalLogicalTop):
        * rendering/ExclusionRectangle.h:
        * rendering/ExclusionShape.cpp:
        (WebCore::ExclusionShape::createExclusionShape):
        * rendering/ExclusionShape.h:
        (LineSegment):
        (ExclusionShape):
        * rendering/ExclusionShapeInfo.cpp:
        (WebCore):
        (WebCore::::computedShape):
        * rendering/ExclusionShapeInfo.h:
        (WebCore):
        (WebCore::ExclusionShapeInfo::shapeLogicalTop):
        (WebCore::ExclusionShapeInfo::shapeLogicalBottom):
        (ExclusionShapeInfo):
        * rendering/ExclusionShapeInsideInfo.cpp:
        (WebCore::ExclusionShapeInsideInfo::adjustLogicalLineTop):
        * rendering/ExclusionShapeInsideInfo.h:
        * rendering/ExclusionShapeOutsideInfo.h:

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

        Nil-check the results of -[AVPlayerItemVideoOutput copyPixelBufferForItemTime:itemTimeForDisplay:].
        https://bugs.webkit.org/show_bug.cgi?id=115265

        Reviewed by Eric Carlson.

        copyPixelBufferForItemTime:itemTimeForDisplay: can return nil, even
        when hasNewPixelBufferForItemTime: returns YES. Check the results
        before passing the buffer on to VTPixelTransferSessionTransferImage()
        which does not NULL-check its parameters.

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

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

        Uninflate caret rect.
        http://bugs.webkit.org/show_bug.cgi?id=114997.
        <rdar://problem/12629007>.

        Reviewed by Timothy Horton.

        Inflation was causing painting errors with focus rings.
        It is no longer needed after disabling subpixel layout.

        * editing/FrameSelection.cpp:
        (WebCore::repaintCaretForLocalRect):

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

        Unreviewed build fix.

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

2013-04-26  Michael Saboff  <msaboff@apple.com>

        WebCore ObjC bridge is missing support for bool type
        https://bugs.webkit.org/show_bug.cgi?id=115276

        Reviewed by Geoffrey Garen.

        Added code to handle conversion between ObjC and JS booleans.

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeObjcMethod):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertValueToObjcValue):
        (JSC::Bindings::convertObjcValueToValue):
        (JSC::Bindings::objcValueTypeForType):

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

        Make Apple Windows VS2010 build results into and get dependencies from __32 suffixed folders.
        Make the DebugSuffix configuration use _debug dependencies.

        * WebCore.vcxproj/QTMovieWin/QTMovieWin.vcxproj:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCairoDebug.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCairoRelease.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinCommon.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinDebug.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinPostBuild.cmd:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinProduction.props:
        * WebCore.vcxproj/QTMovieWin/QTMovieWinRelease.props:
        * WebCore.vcxproj/WebCore.make:
        * WebCore.vcxproj/WebCore.vcxproj:
        * WebCore.vcxproj/WebCore.vcxproj.filters:
        * WebCore.vcxproj/WebCoreCommon.props:
        * WebCore.vcxproj/WebCoreDebug.props:
        * WebCore.vcxproj/WebCoreDebugWinCairo.props:
        * WebCore.vcxproj/WebCoreGenerated.make:
        * WebCore.vcxproj/WebCoreGenerated.vcxproj:
        * WebCore.vcxproj/WebCoreGeneratedCommon.props:
        * WebCore.vcxproj/WebCoreGeneratedDebug.props:
        * WebCore.vcxproj/WebCoreGeneratedDebugWinCairo.props:
        * WebCore.vcxproj/WebCoreGeneratedProduction.props:
        * WebCore.vcxproj/WebCoreGeneratedRelease.props:
        * WebCore.vcxproj/WebCoreGeneratedReleaseWinCairo.props:
        * WebCore.vcxproj/WebCoreProduction.props:
        * WebCore.vcxproj/WebCoreRelease.props:
        * WebCore.vcxproj/WebCoreReleaseWinCairo.props:
        * WebCore.vcxproj/WebCoreTestSupport.vcxproj:
        * WebCore.vcxproj/build-generated-files.sh:
        * WebCore.vcxproj/copyForwardingHeaders.cmd:
        * WebCore.vcxproj/copyWebCoreResourceFiles.cmd:

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

        Disable sub-pixel layout on mac.
        https://bugs.webkit.org/show_bug.cgi?id=114999.

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.exp.in: 
        Export symbol needed to be added for IntRect(const LayoutRect&) constructor, 
        which is now being used in pixelSnappedIntRect(const LayoutRect&) in LayoutRect.h after disabling sub-pixel layout.

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

        Layer-backed WebViews don't repaint content outside the visible area
        https://bugs.webkit.org/show_bug.cgi?id=115275

        Reviewed by Beth Dakin.

        Export ScrollView::setPaintsEntireContents(bool).

        * WebCore.exp.in:

2013-04-26  Daker Fernandes Pinheiro  <daker.pinheiro@openbossa.org>

        Change RenderMeter::valueRatio() visibility to public
        https://bugs.webkit.org/show_bug.cgi?id=115266

        This function is currently unused.
        However, it is necessary to implement a RenderTheme capable of rendering Meter elements.

        Reviewed by Alexis Menard.

        No new tests, because no behaviour is changed.

        * rendering/RenderMeter.h:
        (RenderMeter):

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

        Add Runtime.parse to the Inspector protocol.

        This will be used to parse console expressions for errors
        before evaluating them fully.

        https://webkit.org/b/115242

        Reviewed by Oliver Hunt.

        * ForwardingHeaders/parser/ParserError.h: Added.
        * inspector/Inspector.json:
        * inspector/InspectorRuntimeAgent.cpp:
        (WebCore::InspectorRuntimeAgent::parse):
        * inspector/InspectorRuntimeAgent.h:
        (InspectorRuntimeAgent):

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

        Fix the copyright years after r149057

        * page/DiagnosticLoggingKeys.cpp: I accidentally removed a year from
        the copyright in r149057.

2013-04-26  Konrad Piascik  <kpiascik@blackberry.com>

        Web Inspector: Crash due to null items from getDOMStorageItems
        https://bugs.webkit.org/show_bug.cgi?id=115176

        Reviewed by Joseph Pecoraro.

        findStorageArea was returning a null storageArea causing the items
        input paramater to not be set.  This was happening without any error
        being set at all.  Set an error to prevent a crash when we try to
        convert the result to a JSON string.

        Added tests to check if session and local storage are empty that
        they are still functional.

        * inspector/InspectorDOMStorageAgent.cpp:
        (WebCore::InspectorDOMStorageAgent::getDOMStorageItems):

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

        Remove the remaining Skia #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=114886

        Reviewed by Benjamin Poulain.

        * html/HTMLCanvasElement.cpp: Remove Skia #ifdef references.
        * platform/graphics/BitmapImage.cpp: Ditto.
        * platform/graphics/FloatPoint.h: Ditto.
        * platform/graphics/FloatRect.h: Ditto.
        * platform/graphics/FontCache.h: Ditto.
        * platform/graphics/Gradient.cpp: Ditto.
        * platform/graphics/Gradient.h: Ditto.
        * platform/graphics/GraphicsContext.cpp: Ditto.
        * platform/graphics/GraphicsContext.h: Ditto.
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/ImageBuffer.cpp: Ditto.
        * platform/graphics/ImageBuffer.h: Ditto.
        * platform/graphics/ImageBufferData.h: Ditto.
        * platform/graphics/IntPoint.h: Ditto.
        * platform/graphics/IntRect.h: Ditto.
        * platform/graphics/NativeImagePtr.h: Ditto.
        * platform/graphics/Path.h: Ditto.
        * platform/graphics/Pattern.cpp: Ditto.
        * platform/graphics/Pattern.h: Ditto.
        * platform/graphics/filters/FEBlend.h: Ditto.
        * platform/graphics/filters/FEColorMatrix.h: Ditto.
        * platform/graphics/filters/FEComponentTransfer.h: Ditto.
        * platform/graphics/filters/FEComposite.h: Ditto.
        * platform/graphics/filters/FEConvolveMatrix.h: Ditto.
        * platform/graphics/filters/FEDisplacementMap.h: Ditto.
        * platform/graphics/filters/FEGaussianBlur.h: Ditto.
        * platform/graphics/filters/FELighting.h: Ditto.
        * platform/graphics/filters/FEMorphology.h: Ditto.
        * platform/graphics/filters/FEOffset.h: Ditto.
        * platform/graphics/filters/FilterEffect.cpp: Ditto.
        * platform/graphics/filters/FilterEffect.h: Ditto.
        * platform/graphics/transforms/AffineTransform.h: Ditto.
        * platform/graphics/transforms/TransformationMatrix.h: Ditto.
        * platform/image-decoders/ImageDecoder.cpp: Ditto.
        * platform/image-decoders/ImageDecoder.h: Ditto.
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Ditto.
        * platform/image-decoders/webp/WEBPImageDecoder.cpp: Ditto.
        * platform/mac/LocalCurrentGraphicsContext.h: Ditto.
        * platform/mac/LocalCurrentGraphicsContext.mm: Ditto.
        * rendering/svg/RenderSVGResourceSolidColor.cpp: Ditto.
        * svg/graphics/SVGImage.cpp: Ditto.
        * svg/graphics/SVGImage.h: Ditto.

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

        Assert in JSC::Heap::unprotect when closing facebook.com web site
        https://bugs.webkit.org/show_bug.cgi?id=115058

        Reviewed by Darin Adler.

        Grab a JSLock before calling RootObject::invalidate().

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):

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

        [Mac] in-band cues sometimes have incorrect duration
        https://bugs.webkit.org/show_bug.cgi?id=115200

        Reviewed by Jer Noble.

        No new tests, this is not possible to test in DRT.

        * html/track/InbandTextTrack.cpp:
        (WebCore::InbandTextTrack::addGenericCue): Don't add completed cues to the map.
        (WebCore::InbandTextTrack::removeGenericCue): Log when a cue is removed from the track.

        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
        (WebCore::InbandTextTrackPrivateAVF::InbandTextTrackPrivateAVF): Initialize m_pendingCueStatus.
        (WebCore::InbandTextTrackPrivateAVF::processCue): Never call update() on a cue that is delivered
            while seeking.
        (WebCore::InbandTextTrackPrivateAVF::beginSeeking): Flush all incomplete cues, remember that 
            we are seeking.
        (WebCore::InbandTextTrackPrivateAVF::resetCueValues): 
        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:

        * platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:
        (WebCore::MediaPlayerPrivateAVFoundation::seek): Call track->beginSeeking() instead of resetCueValues().
        (WebCore::MediaPlayerPrivateAVFoundation::seekCompleted): Call track->endSeeking().

        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
        (WebCore::InbandTextTrackPrivateAVFObjC::kind): Include class name in Kind enum values to 
            avoid compile error.

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

        Remove wxWebKit from WebCore.
        <http://webkit.org/b/115255>

        Reviewed by Anders Carlsson.

        * DerivedSources.make:
        * WebCorePrefix.h:
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::port):
        * config.h:
        * html/HTMLFormElement.cpp:
        * platform/ContextMenu.h:
        (ContextMenu):
        * platform/ContextMenuItem.h:
        * platform/Cursor.h:
        * platform/DragData.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/PlatformExportMacros.h:
        * platform/PlatformKeyboardEvent.h:
        (PlatformKeyboardEvent):
        * platform/PlatformMenuDescription.h:
        * platform/PlatformMouseEvent.h:
        (PlatformMouseEvent):
        * platform/PlatformWheelEvent.h:
        (PlatformWheelEvent):
        * platform/ScrollView.cpp:
        * platform/ScrollView.h:
        (ScrollView):
        * platform/Widget.h:
        * platform/win/SharedTimerWin.cpp:

2013-04-26  Zalan Bujtas  <zalan@apple.com>

        use-after-free removing a frame from its parent in a beforeload event of an OBJECT element
        https://bugs.webkit.org/show_bug.cgi?id=113964

        Object elements have the tendecny to modify or even fully remove 
        the containing Document inside beforeload callback. While Document is removed, 
        RenderArena gets destroyed. Retained RenderWidgets fails to function with NULL arena.
        
        Protect RendereArena from getting wiped out, when Document is removed 
        during FrameView::updateWidget(). 

        Reviewed by Antti Koivisto.

        Test: fast/frames/crash-remove-iframe-during-object-beforeload.html

        * dom/Document.cpp:
        (WebCore::Document::attach):
        * dom/Document.h:
        (Document):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidgets):
        * rendering/RenderArena.h:
        (RenderArena):
        (WebCore::RenderArena::create):

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

        Optimize function and interface object length computation in bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=115247

        Reviewed by Kentaro Hara.

        Introduce new GetFunctionLength() function that efficiently compute the length
        of a function (i.e. its number of mandatory parameters).

        We now call GetFunctionLength() instead of GenerateFunctionParametersCheck()
        whenever we care only interested in the function length and not the actual
        expression for checking the parameters. This is much more efficient as
        GenerateFunctionParametersCheck() does a lot more processing than we need in
        this case.

        No new tests, no behavior change.

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

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

        Web Audio: Remove reduplicative addInput() in AnalyserNode.
        <http://webkit.org/b/115244>

        From Blink r149155 by <james.wei@intel.com>:

        The parent class BasicInspectorNode already called addInput() and addOutput().
        So it is reduplicative to call them in AnalyserNode.

        * Modules/webaudio/AnalyserNode.cpp:
        (WebCore::AnalyserNode::AnalyserNode):
        * Modules/webaudio/AudioBasicInspectorNode.cpp:
        (WebCore::AudioBasicInspectorNode::AudioBasicInspectorNode):
        * Modules/webaudio/AudioBasicInspectorNode.h:
        (AudioBasicInspectorNode):
        * Modules/webaudio/MediaStreamAudioDestinationNode.cpp:
        (WebCore::MediaStreamAudioDestinationNode::MediaStreamAudioDestinationNode):

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

        Mouseenter and mouseleave events not supported
        https://bugs.webkit.org/show_bug.cgi?id=18930

        Reviewed by David Hyatt.

        Implements mouseenter and mouseleave events from W3C DOM Level 3 Events.
        These event are already supported by all other major browsers.

        To avoid performance regressions the new events are only dispatched when
        there are event listeners for them.

        Tests: fast/events/mouseenter-mouseleave-capture.html
               fast/events/mouseenter-mouseleave.html

        * bindings/scripts/CodeGenerator.pm:
        * dom/Document.cpp:
        (WebCore::Document::prepareMouseEvent):
        (WebCore::Document::updateHoverActiveState):
        * dom/Document.h:
        (Document):
        * dom/Document.idl:
        * dom/Element.h:
        (Element):
        * dom/Element.idl:
        * dom/EventListenerMap.cpp:
        (WebCore::EventListenerMap::containsCapturing):
        * dom/EventListenerMap.h:
        (EventListenerMap):
        * dom/EventNames.h:
        * dom/EventTarget.h:
        (EventTarget):
        (WebCore::EventTarget::hasCapturingEventListeners):
        * dom/MouseEvent.cpp:
        (WebCore::MouseEvent::create):
        (WebCore::MouseEvent::toElement):
        (WebCore::MouseEvent::fromElement):
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::eventNameForAttributeName):
        * page/DOMWindow.h:
        (DOMWindow):
        * page/DOMWindow.idl:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::parseAttribute):
        * svg/SVGElementInstance.h:
        (SVGElementInstance):
        * svg/SVGElementInstance.idl:

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

        Add support for Web IDL partial interfaces to the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=115228

        Reviewed by Kentaro Hara.

        Add support for Web IDL partial interfaces to the bindings generator:
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-partial-interface

        Also drop support for the the WebKit-specific [Supplemental] extended
        attribute and use partial interfaces instead in existing IDL files.

        No new tests, no behavior change.

        * Modules/battery/NavigatorBattery.idl:
        * Modules/filesystem/DOMWindowFileSystem.idl:
        * Modules/filesystem/DataTransferItemFileSystem.idl:
        * Modules/filesystem/HTMLInputElementFileSystem.idl:
        * Modules/filesystem/WorkerContextFileSystem.idl:
        * Modules/gamepad/NavigatorGamepad.idl:
        * Modules/geolocation/NavigatorGeolocation.idl:
        * Modules/indexeddb/DOMWindowIndexedDatabase.idl:
        * Modules/indexeddb/WorkerContextIndexedDatabase.idl:
        * Modules/mediastream/DOMWindowMediaStream.idl:
        * Modules/mediastream/NavigatorMediaStream.idl:
        * Modules/navigatorcontentutils/NavigatorContentUtils.idl:
        * Modules/networkinfo/NavigatorNetworkInfoConnection.idl:
        * Modules/notifications/DOMWindowNotifications.idl:
        * Modules/notifications/WorkerContextNotifications.idl:
        * Modules/quota/DOMWindowQuota.idl:
        * Modules/quota/NavigatorStorageQuota.idl:
        * Modules/quota/WorkerNavigatorStorageQuota.idl:
        * Modules/speech/DOMWindowSpeech.idl:
        * Modules/speech/DOMWindowSpeechSynthesis.idl:
        * Modules/vibration/NavigatorVibration.idl:
        * Modules/webaudio/DOMWindowWebAudio.idl:
        * Modules/webdatabase/DOMWindowWebDatabase.idl:
        * Modules/webdatabase/WorkerContextWebDatabase.idl:
        * Modules/websockets/DOMWindowWebSocket.idl:
        * Modules/websockets/WorkerContextWebSocket.idl:
        * bindings/scripts/IDLAttributes.txt:
        * bindings/scripts/IDLParser.pm:
        (parsePartialDefinition):
        * bindings/scripts/generate-bindings.pl:
        * bindings/scripts/preprocess-idls.pl:
        (getPartialInterfaceNameFromIDLFile):
        * bindings/scripts/test/TestSupplemental.idl:
        * page/DOMWindowPagePopup.idl:

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

        [CSS Regions] Hit testing is broken for absolutely positioned regions that have overflow: hidden
        https://bugs.webkit.org/show_bug.cgi?id=113874

        Reviewed by David Hyatt.

        Test: fast/regions/hit-test-abspos-overflow-region.html

        When a region is an out-of-flow positioned object with an overflow clip, we need
        to make sure that hit testing works also for cases other than foreground (content)
        hit testing. This patch moves the previous hit testing code, that delegated foreground
        hit testing to the region's flow thread hit testing, into the hitTestContent method,
        now that RenderRegion is RenderBlock based.

        * rendering/RenderRegion.cpp:
        (WebCore::RenderRegion::hitTestContents):
        * rendering/RenderRegion.h:
        (RenderRegion):

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

        Copy and paste can strip !important CSS rules due to a bug in mergeStyleFromRules
        https://bugs.webkit.org/show_bug.cgi?id=115217

        Reviewed by Darin Adler.

        The bug was caused by mergeStyleFromRules overriding "important" style rules with "unimportant" inline styles.
        Fixed the bug by using addParsedProperty, which respects !important, in MutableStylePropertySet's
        mergeAndOverrideOnConflict, which was only used in editing code. Now that we've fixed this function, we can use
        it in ViewportStyleResolver::addViewportRule as well.

        Test: editing/pasteboard/copy-paste-with-important-rules.html

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::mergeAndOverrideOnConflict): Fixed to respect !important.
        * css/ViewportStyleResolver.cpp:
        (WebCore::ViewportStyleResolver::addViewportRule): Use mergeAndOverrideOnConflict now that the code is identical.

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

        StylePropertySet::getPropertyShorthand() should return a String.
        <http://webkit.org/b/115213>

        Reviewed by Anders Carlsson.

        Return a String directly from getPropertyShorthand() instead of forcing clients
        to call getPropertyNameString().

        * css/PropertySetCSSStyleDeclaration.cpp:
        (WebCore::PropertySetCSSStyleDeclaration::getPropertyShorthand):
        * css/StylePropertySet.cpp:
        (WebCore::StylePropertySet::getPropertyShorthand):
        * css/StylePropertySet.h:
        (StylePropertySet):

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

        WEB SPEECH: language support does not work as expected
        https://bugs.webkit.org/show_bug.cgi?id=115119

        Reviewed by Alexey Proskuryakov.

        Make the Mac platform synthesizer have access to all the voices installed on the system.

        * WebCore.exp.in:
        * platform/mac/PlatformSpeechSynthesizerMac.mm:
        (WebCore::PlatformSpeechSynthesizer::initializeVoiceList):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

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

        <meter> element not exposed to accessibility
        https://bugs.webkit.org/show_bug.cgi?id=109023
        rdar://problem/13658964

        Reviewed by Tim Horton.

        Makes the <meter> element appear in the AX tree by reusing the
        AccessibilityProgressIndicator element to handle either progress or meter
        elements.

        Test: accessibility/meter-element.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::createFromRenderer):
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AccessibilityNodeObject.cpp:
        (WebCore::AccessibilityNodeObject::canHaveChildren):
        (WebCore::AccessibilityNodeObject::visibleText):
        * accessibility/AccessibilityProgressIndicator.cpp:
        (WebCore::AccessibilityProgressIndicator::AccessibilityProgressIndicator):
        (WebCore::AccessibilityProgressIndicator::create):
        (WebCore::AccessibilityProgressIndicator::valueForRange):
        (WebCore::AccessibilityProgressIndicator::maxValueForRange):
        (WebCore::AccessibilityProgressIndicator::minValueForRange):
        (WebCore::AccessibilityProgressIndicator::progressElement):
        (WebCore::AccessibilityProgressIndicator::meterElement):
        * accessibility/AccessibilityProgressIndicator.h:
        (AccessibilityProgressIndicator):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::firstChild):
        (WebCore::AccessibilityRenderObject::lastChild):
            These methods are modified to handle when there is no rendered children, but there are Node
            children. The node children are desired when calculating text within a node, for example.

2013-04-25  Qiankun Miao  <qiankun.miao@intel.com>

        [CSS Shaders] Remove the meshType from the CustomFilterOperation
        https://bugs.webkit.org/show_bug.cgi?id=102529

        Reviewed by Dean Jackson.

        No new tests, no new functionality.

        MeshType can be accessed from program, so remove the m_meshType
        related code in CustomFilterOperation.

        * css/StyleResolver.cpp:
        (WebCore::StyleResolver::createCustomFilterOperationWithInlineSyntax):
        * platform/graphics/filters/CustomFilterOperation.cpp:
        (WebCore::CustomFilterOperation::CustomFilterOperation):
        (WebCore::CustomFilterOperation::blend):
        * platform/graphics/filters/CustomFilterOperation.h:
        (WebCore::CustomFilterOperation::create):
        (WebCore::CustomFilterOperation::meshType):
        (CustomFilterOperation):
        (WebCore::CustomFilterOperation::operator==):
        * platform/graphics/texmap/coordinated/CoordinatedCustomFilterOperation.h:
        (WebCore::CoordinatedCustomFilterOperation::CoordinatedCustomFilterOperation):

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

        Ignore invalid regular expressions for input[pattern].
        https://bugs.webkit.org/show_bug.cgi?id=115204

        Reviewed by Darin Adler.

        According to the specification, we should not proceed regular expression
        matching if a pattern attribute value is an invalid regular
        expression. We had a bug that invalid expressions such as
        pattern=")foo(" made RegularExpression objects successfully.

        http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-pattern-attribute
        > If an input element has a pattern attribute specified, and the
        > attribute's value, when compiled as a JavaScript regular expression with
        > the global, ignoreCase, and multiline flags disabled (see ECMA262
        > Edition 5, sections 15.10.7.2 through 15.10.7.4), compiles successfully,
        > then the resulting regular expression is the element's compiled pattern
        > regular expression. If the element has no such attribute, or if the
        > value doesn't compile successfully, then the element has no compiled
        > pattern regular expression.

        This imports a part of Blink r148951.

        Tests: Update fast/forms/ValidityState-patternMismatch.html

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch):
        Check correctness of pattern attribute value before wrapping with parentheses.
        * platform/text/RegularExpression.cpp:
        (WebCore::RegularExpression::isValid): Added.
        * platform/text/RegularExpression.h:
        (RegularExpression): Declare isValid.

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

        Glyphs may fail to render when using SVG font
        https://bugs.webkit.org/show_bug.cgi?id=115193

        Reviewed by Simon Fraser.

        Calling SimpleFontData::applyTransforms() when the font used is
        an SVG font makes little sense since Core Text doesn’t know or
        understand SVG fonts and would be passed some other, unrelated
        platform font.

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::applyTransforms):

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

        Media elements shouldn't resume playback when a page is restored from the back/forward cache if the WKView isn't in a window
        https://bugs.webkit.org/show_bug.cgi?id=115191

        Reviewed by Eric Carlson.

        If a page is suspended, then resumed when its WebView or WKView has been removed from a window,
        the page's media elements will unpause. Check whether media is allowed to start during resume()
        via Page::canMediaStart() and if not, register for mediaCanStart notifications. Then, in 
        mediaCanStart() if the media is force-paused, unpause it.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::mediaCanStart):
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::pageConsentRequiredForResume):

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

        Remove ENABLE(PARSED_STYLE_SHEET_CACHING) and make it always-on.

        Rubber-stamped by Anders Koivisto.

        * PlatformWinCE.cmake:
        * accessibility/AccessibilityObject.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):

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

        Remove OS(WINCE) from AccessibilityObject.h
        https://bugs.webkit.org/show_bug.cgi?id=115192

        Reviewed by Andreas Kling.

        Use the same files like the the other PLATFORM(WIN) ports use.

        * PlatformWinCE.cmake:
        * accessibility/AccessibilityObject.h:
        (AccessibilityObject):

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

        Add definition of GlyphBufferGlyph for BlackBerry
        https://bugs.webkit.org/show_bug.cgi?id=115183

        Reviewed by Xan Lopez.

        BlackBerry uses an unsigned int.

        * platform/graphics/GlyphBuffer.h:
        (WebCore):

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

        ScriptExecutionContext log exception should include a column number
        https://bugs.webkit.org/show_bug.cgi?id=114315

        Reviewed by Oliver Hunt.

        Test: inspector/console/console-exception-stack-traces.html

        * bindings/js/ScriptCallStackFactory.h:
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStackFromException):
        Generate a ScriptCallStack from an exception. Use the vm.exceptionStack
        if available, and fallback to the exception object where needed.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::reportException):
        Always include a non-empty call stack with exceptions.
        Where not provided, fallback to the exception object.

        * dom/Document.h:
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::PendingException::PendingException):
        (ScriptExecutionContext::PendingException):
        (WebCore::ScriptExecutionContext::reportException):
        * workers/DefaultSharedWorkerRepository.cpp:
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::logExceptionToConsole):
        * workers/SharedWorkerContext.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::logExceptionToConsole):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::performTask):
        Plumb columnNumber through as needed.

2013-04-25  Gregg Tavares  <gman@chromium.org>

        Fix build files so WebGLDebugXXX extensions can be used if enabled.
        https://bugs.webkit.org/show_bug.cgi?id=113976

        Reviewed by Dean Jackson.

        No new tests as no new functionality.

        * DerivedSources.make:
        * GNUmakefile.list.am:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:

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

        cloneChildNodes looks for deleteButtonController in each level of recursion
        https://bugs.webkit.org/show_bug.cgi?id=115146

        Reviewed by Andreas Kling.

        Obtain the delete button controller upfront, and shallow copy descendents of each child
        so that we don't look for the delete button controller inside cloneNode called on each child.

        Performance Tests: DOM/CloneNodes.html

        * dom/ContainerNode.cpp:
        (WebCore::cloneChildNodesAvoidingDeleteButon): Extracted.
        (WebCore::ContainerNode::cloneChildNodes):

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

        HTMLOptionsCollection's namedItem and name getter should return the first item
        https://bugs.webkit.org/show_bug.cgi?id=115150

        Reviewed by Andreas Kling.

        Following the resolution in http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2012-December/038355.html,
        the spefication has been updated to only return the first item when there are multiple items of the same name
        in HTMLOptionsCollection; this new behavior matches that of Firefox and Opera (Presto).

        Implement this new behavior to remove the custom binding code and use the fast path in namedItem and name
        getter of HTMLOptionsCollection. (Obtaining all items for a given name is expensive!).

        Tests: fast/dom/HTMLSelectElement/named-options.html
               fast/dom/html-collections-named-getter.html

        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore): Removed the custom bindings for name getter and namedItem.
        * html/HTMLOptionsCollection.idl:

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

        Web Inspector: ConsoleMessage should include line and column number where possible
        https://bugs.webkit.org/show_bug.cgi?id=114929

          - adds "m_column" to WebCore::ConsoleMessage
          - adds "column" to Console.ConsoleMessage in the inspector protocol
          - set the column number for console.* functions (Console.cpp)
          - set the column number for XSLT errors (XSLTProcessor)
          - plumb columnNumber everywhere else it is needed, set it to 0 and file
            bugs for all cases missing columnNumber that could provide it.

        Reviewed by Timothy Hatcher.

        Test: inspector/console/console-url-line-column.html
              inspector/console/console-messages-stack-traces.html

        * inspector/ConsoleMessage.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::autogenerateMetadata):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::isEqual):
        Add m_column and set it where appropriate.

        * inspector/Inspector.json:
        Add column property to Console.ConsoleMessage.

        * page/Console.cpp:
        (WebCore::internalAddMessage):
        (WebCore::Console::profile):
        Set columnNumber like lineNumber from the last stack frame.
        (WebCore::Console::groupEnd):
        Line and column are unused in this message type, set both to 0.

        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::XSLTProcessor::parseErrorFunc):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTMessageHandler::handleMessage):
        Add real column numbers, the XSLT handlers already had it available.

        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::logError):
        * dom/ScriptExecutionContext.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addConsoleMessage):
        * dom/Document.cpp:
        (WebCore::Document::logExceptionToConsole):
        (WebCore::Document::addMessage):
        * dom/Document.h:
        * inspector/InspectorConsoleAgent.cpp:
        (WebCore::InspectorConsoleAgent::addMessageToConsole):
        (WebCore::InspectorConsoleAgent::stopTiming):
        (WebCore::InspectorConsoleAgent::didFinishXHRLoading):
        (WebCore::InspectorConsoleAgent::didReceiveResponse):
        (WebCore::InspectorConsoleAgent::didFailLoading):
        * inspector/InspectorConsoleAgent.h:
        * inspector/InspectorConsoleInstrumentation.h:
        (WebCore::InspectorInstrumentation::addMessageToConsole):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsole):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::addMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::addStartProfilingMessageToConsoleImpl):
        (WebCore::InspectorInstrumentation::addProfileImpl):
        * inspector/InspectorInstrumentation.h:
        (InspectorInstrumentation):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::start):
        (WebCore::InspectorProfilerAgent::stop):
        * inspector/InspectorProfilerAgent.h:
        (InspectorProfilerAgent):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::addMessageToConsole):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::addMessageToConsole):
        * page/ContentSecurityPolicy.cpp:
        (WebCore::ContentSecurityPolicy::logToConsole):
        * page/PageConsole.cpp:
        (WebCore::PageConsole::addMessage):
        * page/PageConsole.h:
        * workers/DefaultSharedWorkerRepository.cpp:
        (SharedWorkerProxy):
        (WebCore::postExceptionTask):
        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
        (WebCore::postConsoleMessageTask):
        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
        * workers/SharedWorkerContext.cpp:
        (WebCore::SharedWorkerContext::logExceptionToConsole):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::logExceptionToConsole):
        (WebCore::WorkerContext::addConsoleMessage):
        (WebCore::WorkerContext::addMessage):
        (WebCore::WorkerContext::addMessageToWorkerConsole):
        * workers/WorkerContext.h:
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerExceptionTask::create):
        (WebCore::WorkerExceptionTask::WorkerExceptionTask):
        (WebCore::WorkerExceptionTask::performTask):
        (WorkerExceptionTask):
        (WebCore::WorkerMessagingProxy::postExceptionToWorkerObject):
        (WebCore::postConsoleMessageTask):
        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
        * workers/WorkerMessagingProxy.h:
        (WorkerMessagingProxy):
        * workers/WorkerReportingProxy.h:
        (WorkerReportingProxy):
        Plumb columnNumber through where appropriate. File bugs where missing.

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

        [Qt] Animated opacity does not trigger accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=115107

        Reviewed by Simon Fraser.

        Add extra option to also trigger compositing on animated opacity.

        * page/ChromeClient.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):

2013-04-25  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>

        Sec-WebSocket-Extensions header field must not appear more than once in an HTTP response.
        https://bugs.webkit.org/show_bug.cgi?id=115128

        Reviewed by Alexey Proskuryakov.

        According to WebSocket specification Sec-WebSocket-Extensions header field
        must not appear more than once in an HTTP response. It is ok if it appears
        more than once in client request. Also add a check for invalid UTF-8
        characters when parsing Sec-WebSocket-Extensions quoted string.

        Test: http/tests/websocket/tests/hybi/handshake-fail-by-more-extensions-header.html

        * Modules/websockets/WebSocketExtensionParser.cpp:
        (WebCore::WebSocketExtensionParser::consumeQuotedString): Return false if there is
        invalid character in the quoted string being parsed.
        * Modules/websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readHTTPHeaders): Check if Sec-WebSocket-Extensions
        appears more than once in header response. Abort handshake if it does.

2013-04-25  Raphael Kubo da Costa  <raphael.kubo.da.costa@intel.com>

        REGRESSION(r148758): Remove WTFLogAlways call from IconLoader.
        https://bugs.webkit.org/show_bug.cgi?id=115182

        Reviewed by Dan Bernstein.

        The call added in r148758 was apparently a leftover from some debugging
        session, and it makes the Interactive/window-resize.html performance
        test randomly fail on Qt and EFL due to WTFLogAlways writing to stderr.

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

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

        Add support for Web IDL callback interfaces to the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=115179

        Reviewed by Kentaro Hara.

        Add support in the bindings generator for Web IDL callback interfaces:
        http://dev.w3.org/2006/webapi/WebIDL/#dfn-callback-interface

        Drop support for the WebKit-specific [Callback] extended attributes
        on Web IDL interfaces and update existing IDL files to use proper
        callback interfaces instead.

        No new tests, no behavior change.

        * Modules/filesystem/EntriesCallback.idl:
        * Modules/filesystem/EntryCallback.idl:
        * Modules/filesystem/ErrorCallback.idl:
        * Modules/filesystem/FileCallback.idl:
        * Modules/filesystem/FileSystemCallback.idl:
        * Modules/filesystem/FileWriterCallback.idl:
        * Modules/filesystem/MetadataCallback.idl:
        * Modules/geolocation/PositionCallback.idl:
        * Modules/geolocation/PositionErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaErrorCallback.idl:
        * Modules/mediastream/NavigatorUserMediaSuccessCallback.idl:
        * Modules/mediastream/RTCErrorCallback.idl:
        * Modules/mediastream/RTCSessionDescriptionCallback.idl:
        * Modules/mediastream/RTCStatsCallback.idl:
        * Modules/notifications/NotificationPermissionCallback.idl:
        * Modules/quota/StorageErrorCallback.idl:
        * Modules/quota/StorageQuotaCallback.idl:
        * Modules/quota/StorageUsageCallback.idl:
        * Modules/webaudio/AudioBufferCallback.idl:
        * Modules/webdatabase/DatabaseCallback.idl:
        * Modules/webdatabase/SQLStatementCallback.idl:
        * Modules/webdatabase/SQLStatementErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionCallback.idl:
        * Modules/webdatabase/SQLTransactionErrorCallback.idl:
        * Modules/webdatabase/SQLTransactionSyncCallback.idl:
        * bindings/scripts/CodeGeneratorJS.pm:
        (GenerateInterface):
        * bindings/scripts/IDLParser.pm:
        (parseCallbackRestOrInterface):
        * bindings/scripts/test/TestCallback.idl:
        * dom/RequestAnimationFrameCallback.idl:
        * dom/StringCallback.idl:
        * html/VoidCallback.idl:

2013-04-25  Adrian Perez de Castro  <aperez@igalia.com>

        [GStreamer] Add audio/speex MIME type as supported
        https://bugs.webkit.org/show_bug.cgi?id=115032

        Reviewed by Philippe Normand.

        GStreamer has support for the Speex codec (http://www.speex.org).
        Speex streams may be embedded in a Ogg container, or standalone.
        The case of the Ogg container is already covered by the "*/ogg"
        MIME types declared as supported by the GStreamer media playing
        code, but for standalone streams to work, "audio/speex" has to
        be added.

        With this, and the needed GStreamer plugin installed, the GTK+
        launcher is able to correctly play Speex streams served with
        "Content-type: audio/speex".

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

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

        Add FINAL decorators to the InlineBox class hierarchy.
        <http://webkit.org/b/115177>

        Reviewed by Antti Koivisto.

        From Blink r148628 by <cevans@chromium.org>:

        FINAL is a macro in wtf/Compiler.h that does the correct thing if the compiler does not support "final")
        The approach used is as simple as possible whilst being thorough.
        So, leaf classes have FINAL applied to the whole class whereas intermediary classes have FINAL applied to relevant methods.

        FINAL allows a compiler to devirtualize call sites and turn them into direct calls. As you might expect, this is perf positive:
        (clang on Linux):
        - line_layout.html goes from 120 runs/s -> 123 runs/2, +2.5%
        - html5-full-render.html goes from 3176ms -> 3162ms, +0.4%

        I have confidence that the former result is statistically significant (as the numbers are very very stable) but not the latter.

        * rendering/EllipsisBox.h:
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.h:
        * rendering/RootInlineBox.h:
        * rendering/TrailingFloatsRootInlineBox.h:
        * rendering/svg/SVGInlineFlowBox.h:
        * rendering/svg/SVGInlineTextBox.h:
        * rendering/svg/SVGRootInlineBox.h:

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

        CSS parser: Add error recovery while parsing @-webkit-keyframes key values.
        <http://webkit.org/b/115175>

        From Blink r148714 by <apavlov@chromium.org>:

        If not a percentage, "from", or "to" value is used in a key list, the rule is erroneous,
        and due to the absense of recovery, the parser skips the following, valid CSS rule.

        On a related note, keyframes, whose selectors contain invalid keys, should be discarded
        altogether, according to <http://www.w3.org/TR/css3-animations/#keyframes>

        Tests: animations/keyframes-invalid-keys.html
               fast/css/webkit-keyframes-errors.html

        * css/CSSGrammar.y.in:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::rewriteSpecifiers):

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

        REGRESSION (r147797): Animations slideshows of images on www.thesuperficial.com are slow
        https://bugs.webkit.org/show_bug.cgi?id=115172

        Reviewed by Andreas Kling.

        On this page ads dynamically loaded to subframes on slideshow navigation switch us to state where we throttle layer flushes.
        
        Fix by ignoring any subframe-originated loads when determining throttling.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadProgressingStatusChanged):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::isMainLoadProgressing):
        
            Rename, ignore subframe originated loads. Subframe loads that are initiated during the main load still count.

        * loader/ProgressTracker.h:
        (ProgressTracker):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateLayerFlushThrottlingInAllFrames):
        * page/FrameView.h:
        (FrameView):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::computeTileCoverage):

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

        SVG: Fix viewBox animations on shapes with non-scaling-stroke.
        <http://webkit.org/b/115173>

        From Blink r149058 by <pdr@chromium.org>:

        Previously hasAttribute() to determine if a viewBox was set in the transform
        code for non-scaling-strokes. hasAttribute() should not be used in this case,
        as it will return false if the attribute is not set but the value is animating.

        This patch switches to checking if the viewBox is empty instead of checking for
        the presence of the attribute.

        Test: svg/stroke/animated-non-scaling-stroke.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::hasEmptyViewBox):

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

        Remove isPluginElement hack in Document::setFocusedNode()
        <http://webkit.org/b/115171>

        From Blink r148800 by <tkent@chromium.org>:

        This hack is no longer necessary because r147591 made isFocusable for plugin
        elements work correctly.

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

2013-04-25  Per-Erik Brodin  <per-erik.brodin@ericsson.com>

        EventSource: Synchronous loader callback not handled properly
        https://bugs.webkit.org/show_bug.cgi?id=115104

        When attempting a cross-origin request towards a non-HTTP URL, an early verification
        of the protocol scheme will cause didFailAccessControlCheck to be called synchronously
        before the loader has even finished being created. This special case was not handled
        properly, since we tried to cancel a non-existing loader, which resulted in a crash.
        In addition to checking whether a request is in flight before trying to cancel it,
        this change also schedules the initial creation of the loader to happen asynchronously
        when an EventSource is constructed, so that a script can register for the error event
        before it is dispatched (as a result of passing a non-HTTP URL to the constructor).

        Reviewed by Alexey Proskuryakov.

        Test: http/tests/eventsource/eventsource-cors-non-http.html

        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource):
        (WebCore::EventSource::create):
        (WebCore::EventSource::scheduleInitialConnect):
        (WebCore):
        (WebCore::EventSource::scheduleReconnect):
        (WebCore::EventSource::connectTimerFired):
        (WebCore::EventSource::close):
        (WebCore::EventSource::abortConnectionAttempt):
        * page/EventSource.h:
        (EventSource):

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

        Unreviewed WinCE build fix after r148545.

        * page/wince/FrameWinCE.cpp:

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

        Back references don't work in pattern attribute
        https://bugs.webkit.org/show_bug.cgi?id=105875

        Reviewed by Geoffrey Garen.

        This imports a part of Blink r148951.

        Tests: Update fast/forms/ValidityState-patternMismatch.html

        * html/BaseTextInputType.cpp:
        (WebCore::BaseTextInputType::patternMismatch):
        Don't use capturing parentheses. They affected back references in
        pattern attribute values.

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

        PDFPlugin: Cursor should become an i-beam when over selectable text
        https://bugs.webkit.org/show_bug.cgi?id=115018
        <rdar://problem/12645012>

        Reviewed by Alexey Proskuryakov.

        * WebCore.exp.in: Export the I-beam and arrow cursors.

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

        Garbage at the top of http://www.technologyreview.com after scrolling
        https://bugs.webkit.org/show_bug.cgi?id=114825

        Reviewed by Tim Horton.

        Garbage pixels are caused by GraphicsLayerCA setting a layer to be opaque,
        but then not painting anything into it. On this page, the element is
        toggled to be visibility:hidden on scrolling, but RenderLayer::backgroundIsKnownToBeOpaqueInRect()
        failed to consider that as something that can cause backgrounds not to be opaque.
        
        For the bug to happen, some subtle interactions with r142012 come into play
        for the layer to remain visible, hence the slightly complex testcase.
        
        Test: compositing/contents-opaque/visibility-hidden.html

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

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

        Dump layer opaqueness in the Compositing log output
        https://bugs.webkit.org/show_bug.cgi?id=115132

        Reviewed by Tim Horton.

        It's useful to see whether we consider layers to be opaque in the Compositing
        log channel output, so dump it.

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

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

        Add efl to JSInspectorFrontendHost::port()
        https://bugs.webkit.org/show_bug.cgi?id=115137

        Reviewed by Timothy Hatcher.

        No new tests, because there is no change in behavior.

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::port):

2013-04-24  Kangil Han  <kangil.han@samsung.com>

        Function parameter quotePair can be passed by reference
        https://bugs.webkit.org/show_bug.cgi?id=115089

        Reviewed by Alexey Proskuryakov.

        Minor performance patch.

        * rendering/style/QuotesData.cpp:
        (WebCore::QuotesData::addPair):
        * rendering/style/QuotesData.h:
        (QuotesData):

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

        Implementors of CachedResource subclasses should be forced to decide if encoded data can be replaced.
        https://bugs.webkit.org/show_bug.cgi?id=115140

        Reviewed by Beth Dakin.

        No new tests (No behavior change).

        This makes mayTryReplaceEncodedData() return false in CachedResource, but overrides to true
        in all CachedResource subclasses besides CachedFont (which already has an implementation).

        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedImage.h:
        * loader/cache/CachedRawResource.h:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedSVGDocument.h:
        * loader/cache/CachedScript.h:
        * loader/cache/CachedShader.h:
        * loader/cache/CachedTextTrack.h:
        * loader/cache/CachedXSLStyleSheet.h:

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

        Once a custom font is cached to disk, it starts failing to render until the page is refreshed.
        <rdar://problem/13622998> and https://bugs.webkit.org/show_bug.cgi?id=115131

        Reviewed by Alexey Proskuryakov.

        No new tests (Not a tested config, nor are disk cache issues currently testable).

        * loader/cache/CachedResource.h:
        (WebCore::CachedResource:: mayTryReplaceEncodedData): Allow subclasses to refuse encoded data replacement.

        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::tryReplaceEncodedData): Only try if shouldTryReplaceEncodedData() is true.

        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::CachedFont):
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::mayTryReplaceEncodedData): Return false if the custom font data has ever been created.
        * loader/cache/CachedFont.h:

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

        Vertical overlay scrollbar in iframes fades in and out rapidly when you scroll in 
        a circle
        https://bugs.webkit.org/show_bug.cgi?id=115124
        -and corresponding-
        <rdar://problem/13168957>

        Reviewed by Anders Carlsson.

        With http://trac.webkit.org/changeset/119834 we started calling 
        ScrollbarPainterController's contentAreaScrolled/contentAreaScrolledInDirection 
        API on a zero-delay timer instead of calling it right away. This prevented some 
        crashes that we saw whenever this was called during a layout. However, that delay, 
        combined with the particulars of contentAreaScrolledInDirection cause this bug 
        where sometimes the scrollbars in an iframe will fade out very noticeably when 
        scrolling in a circle.

        This change makes it so we will only use the zero-delay timer if the 
        ScrollableArea is not currently handling a wheel event. If it IS handling a wheel 
        event, then we will send the notifications to AppKit right away. I confirmed that 
        this change did not reintroduce the old crashes. 

        Keep track of whether we are currently handling a wheel event with the new member 
        variable m_isHandlingWheelEvent.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::handleWheelEvent):
        * page/EventHandler.h:
        (WebCore::EventHandler::isHandlingWheelEvent):
        (EventHandler):

        To prevent layering violations, the ScrollableArea sub-classes will have to access 
        this information from the EventHandler.
        * page/FrameView.cpp:
        (WebCore::FrameView::isHandlingWheelEvent):
        * page/FrameView.h:
        * platform/ScrollableArea.h:
        (WebCore::ScrollableArea::isHandlingWheelEvent):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::isHandlingWheelEvent):
        * rendering/RenderLayer.h:
        (RenderLayer):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::isHandlingWheelEvent):
        * rendering/RenderListBox.h:

        sendContentAreaScrolledSoon() can be private. Also add new function 
        sendContentAreaScrolled().
        * platform/mac/ScrollAnimatorMac.h:
        (ScrollAnimatorMac):

        If the ScrollableArea is handling a wheel event, call 
        sendContentAreaScrolled(), otherwise call sendContentAreaScrolledSoon()
        * platform/mac/ScrollAnimatorMac.mm:
        (WebCore::ScrollAnimatorMac::notifyContentAreaScrolled):
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolled):

        Re-factored to use sendContentAreaScrolled()
        (WebCore::ScrollAnimatorMac::sendContentAreaScrolledTimerFired):

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

        Fix a merge error in r149007 (was missing a null check added in r148777).

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

2013-04-24  Otto Derek Cheung  <otcheung@rim.com>

        Battery API won't return updated battery status until client calls didChangeBatteryStatus
        https://bugs.webkit.org/show_bug.cgi?id=114891

        Reviewed by Rob Buis.

        The BatteryStatus object in BatteryManager won't get updated until BatteryClient calls
        didChangeBatteryStatus in BatteryController. Any attempts to call webkitBattery.charged()
        or other get functions will always return the default values until the next battery status
        change object gets passed to the controller.

        We need to update the manager when we attach it to the controller, and update all
        existing managers when the controller receives it's first battery status object.

        * Modules/battery/BatteryController.cpp:
        (WebCore::BatteryController::addListener):
        (WebCore::BatteryController::updateBatteryStatus):
        * Modules/battery/BatteryManager.cpp:
        (WebCore::BatteryManager::didChangeBatteryStatus):
        (WebCore::BatteryManager::updateBatteryStatus):
        (WebCore):
        * Modules/battery/BatteryManager.h:
        (BatteryManager):

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

        Clean up unused code in ViewportArguments.h
        https://bugs.webkit.org/show_bug.cgi?id=115121

        Reviewed by Benjamin Poulain.

        The target-densityDPI emulation implementation has been removed by
        r147893, so clean up the remaining code as well.

        * dom/ViewportArguments.h:

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

        ElementData should use 'unsigned' attribute indices.
        <http://webkit.org/b/115103>

        Reviewed by Antti Koivisto.

        Switch to using 'unsigned' for attribute indices. This gives consistent behavior
        on 32/64-bit, and the underlying storage is already limited by Vector's 32-bit capacity.

        Added an ElementData::attributeNotFound constant (-1) since we can't use WTF::notFound.

        * dom/Element.cpp:
        (WebCore::Element::detachAttribute):
        (WebCore::Element::removeAttribute):
        (WebCore::Element::setAttribute):
        (WebCore::Element::setSynchronizedLazyAttribute):
        (WebCore::Element::setAttributeInternal):
        (WebCore::Element::setAttributeNode):
        (WebCore::Element::removeAttributeNode):
        (WebCore::Element::removeAttributeInternal):
        (WebCore::UniqueElementData::removeAttribute):
        (WebCore::ElementData::getAttributeItemIndexSlowCase):
        * dom/Element.h:
        (ElementData):
        (UniqueElementData):
        (Element):
        (WebCore::Element::getAttributeItemIndex):
        (WebCore::Element::attributeCount):
        (WebCore::ElementData::length):
        (WebCore::ElementData::getAttributeItem):
        (WebCore::ElementData::getAttributeItemIndex):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::removeNamedItem):
        (WebCore::NamedNodeMap::removeNamedItemNS):
        (WebCore::NamedNodeMap::length):
        * dom/NamedNodeMap.h:
        (NamedNodeMap):

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

        ElementData::attributeItem() should bounds-check the index.
        <http://webkit.org/b/115076>

        Reviewed by Antti Koivisto.

        Switch the ASSERT_WITH_SECURITY_IMPLICATION to a RELEASE_ASSERT.

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

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

        Setting an inline style property to "" shouldn't cause style recalc unless the property was present.
        <http://webkit.org/b/115122>

        Reviewed by Antti Koivisto.

        StylePropertySet::setProperty() handles empty strings by removing the property entirely.
        If there was no property to remove, it shouldn't claim that it changed something, as that
        will cause the CSSOM wrapper to mark the element for style recalc.

        A common idiom that triggers this is excessive use of { element.style.display = ''; }

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::setProperty):

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

        Moving word boundaries backwards fails when there is a text node starting with an apostrophe
        https://bugs.webkit.org/show_bug.cgi?id=115070

        Reviewed by Alexey Proskuryakov.

        The bug was caused by previousBoundary erroneously assuming that we don't need any more context if a word
        boundary is found at the beginning of a string. For example, when "I'll" is split into two text nodes,
        "I" and "'ll", there is a word boundary between "'" and "ll" in "'ll" so we need to examine the whole "I'll".

        Fixed the bug by obtaining more context when the character starts exactly at offset 1 in a text node to
        work around this bug. In the long term, we probably need to provide Foundation of the entire context since in
        languages like Hebrew and some of European languages, there could be many accents and combining characters
        between split into multiple text nodes as one variant is seen in the newly added test case.

        Test: editing/selection/previous-word-boundary-across-text-nodes.html

        * editing/VisibleUnits.cpp:
        (WebCore::previousBoundary):

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

        Do not use static string in DiagnosticLoggingKeys
        https://bugs.webkit.org/show_bug.cgi?id=115093

        Reviewed by Andreas Kling.

        The code is not hot enough to justify keeping the memory around.
        This removes 3kb from the binary on x86_64.

        * page/DiagnosticLoggingKeys.cpp:
        (WebCore::DiagnosticLoggingKeys::mediaLoadedKey):
        (WebCore::DiagnosticLoggingKeys::mediaLoadingFailedKey):
        (WebCore::DiagnosticLoggingKeys::pluginLoadedKey):
        (WebCore::DiagnosticLoggingKeys::pluginLoadingFailedKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsPluginKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsAtLeastOnePluginKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsMediaEngineKey):
        (WebCore::DiagnosticLoggingKeys::pageContainsAtLeastOneMediaEngineKey):
        (WebCore::DiagnosticLoggingKeys::passKey):
        (WebCore::DiagnosticLoggingKeys::failKey):
        (WebCore::DiagnosticLoggingKeys::noopKey):
        * page/DiagnosticLoggingKeys.h:
        (DiagnosticLoggingKeys):

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

        Remove wxWebKit #ifdefs from WebCore/platform/graphics
        https://bugs.webkit.org/show_bug.cgi?id=115081

        Reviewed by Geoffrey Garen.

        * platform/graphics/BitmapImage.h:
        (BitmapImage):
        * platform/graphics/Color.h:
        (Color):
        * platform/graphics/FloatRect.h:
        (FloatRect):
        * platform/graphics/FloatSize.h:
        (FloatSize):
        * platform/graphics/FontPlatformData.h:
        * platform/graphics/GlyphBuffer.h:
        (WebCore):
        (WebCore::GlyphBuffer::glyphAt):
        (WebCore::GlyphBuffer::add):
        * platform/graphics/Gradient.h:
        * platform/graphics/GraphicsContext.h:
        (GraphicsContext):
        * platform/graphics/Image.cpp:
        (WebCore::Image::drawTiled):
        * platform/graphics/ImageBufferData.h:
        * platform/graphics/IntPoint.h:
        (IntPoint):
        * platform/graphics/IntRect.h:
        * platform/graphics/IntSize.h:
        (IntSize):
        * platform/graphics/NativeImagePtr.h:
        (WebCore):
        * platform/graphics/Path.h:
        * platform/graphics/Pattern.h:
        * platform/graphics/SimpleFontData.h:
        (SimpleFontData):
        (WebCore::SimpleFontData::widthForGlyph):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::collectComplexTextRuns):
        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
        * platform/graphics/transforms/AffineTransform.h:
        (AffineTransform):
        * platform/graphics/transforms/TransformationMatrix.h:
        (TransformationMatrix):

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

        Remove wxWebKit #ifdefs from WebCore/plugins
        https://bugs.webkit.org/show_bug.cgi?id=115080

        Reviewed by Geoffrey Garen.

        * plugins/PluginView.h:
        (PluginView):
        * plugins/mac/PluginViewMac.mm:
        (WebCore::nativeWindowFor):
        (WebCore::cgHandleFor):
        (WebCore::topLevelOffsetFor):
        (WebCore::PluginView::platformStart):
        * plugins/win/PluginViewWin.cpp:
        (windowHandleForPageClient):
        (WebCore::PluginView::handleMouseEvent):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::snapshot):

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

        Remove wxWebKit #ifdefs from WebCore/page
        https://bugs.webkit.org/show_bug.cgi?id=115079

        Reviewed by Geoffrey Garen.

        * page/FrameView.cpp:
        (WebCore::FrameView::wheelEvent):
        * page/Settings.cpp:
        (WebCore):
        * page/Settings.h:
        (Settings):

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

        AX: WAI-ARIA landmarks no longer speak type of landmark on iOS
        https://bugs.webkit.org/show_bug.cgi?id=114547

        Reviewed by David Kilzer.

        We want iOS to speak the landmark type.
        I've moved the landmark role description to the base Mac class and exposed
        these localized strings to iOS (the ones used to return landmark descriptions).

        I've also updated the accessibilityLabel to account for landmark type, but also
        handle multiple label sources more gracefully by appending commas, which changed a few
        tests in minor ways.

        Test: platform/iphone-simulator/accessibility/landmark-type.html

        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
        (-[WebAccessibilityObjectWrapper accessibilityLabel]):
        * accessibility/mac/WebAccessibilityObjectWrapperBase.h:
        * accessibility/mac/WebAccessibilityObjectWrapperBase.mm:
        (-[WebAccessibilityObjectWrapperBase ariaLandmarkRoleDescription]):
        * accessibility/mac/WebAccessibilityObjectWrapperMac.mm:
        (-[WebAccessibilityObjectWrapper roleDescription]):
        * platform/LocalizedStrings.cpp:
        (WebCore):
        (WebCore::AXButtonActionVerb):
        (WebCore::AXRadioButtonActionVerb):
        (WebCore::AXTextFieldActionVerb):
        (WebCore::AXCheckedCheckBoxActionVerb):
        (WebCore::AXUncheckedCheckBoxActionVerb):
        (WebCore::AXLinkActionVerb):
        (WebCore::AXMenuListPopupActionVerb):
        (WebCore::AXMenuListActionVerb):
        * platform/LocalizedStrings.h:
        (WebCore):

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

        CSS attribute selectors cause unnecessary style recalc when setting attribute to same value.
        <http://webkit.org/b/115116>
        <rdar://problem/13727709>

        Reviewed by Simon Fraser.

        The logic that dirties the style if there's a relevant attribute selector in the document
        shouldn't run if the attribute is being overwritten with an identical value.
        Move this into willModifyAttribute() instead, since we need access to both the old and the new value.

        This reduces unnecessary style recalculation in Mac App Store content.

        * dom/Element.cpp:
        (WebCore::Element::attributeChanged):
        (WebCore::Element::willModifyAttribute):

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

        [BlackBerry] Fixes the San Angeles demo on khronos.org
        https://bugs.webkit.org/show_bug.cgi?id=115106

        Reviewed by Rob Buis
        Internally Reviewed by Jeremy Nicholl and Arvid Nilsson

        Fixes a bug in which the currently bound vertex array object's vertex array
        state was being modified as opposed to the default vertex array state.

        * platform/graphics/blackberry/EGLImageLayerWebKitThread.cpp:
        (EGLImageLayerWebKitThread::blitToFrontBuffer):

2013-04-24  Nico Weber  <thakis@chromium.org>

        Fold RenderThemeMacShared into RenderThemeMac
        https://bugs.webkit.org/show_bug.cgi?id=115086

        Reviewed by Anders Carlsson.

        No intended functionality change.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderThemeMac.h:
        (RenderThemeMac):
        (WebCore::RenderThemeMac::supportsControlTints):
        (WebCore::RenderThemeMac::scrollbarControlSizeForPart):
        (WebCore::RenderThemeMac::supportsSelectionForegroundColors):
        (WebCore::RenderThemeMac::supportsClosedCaptioning):
        (WebCore::RenderThemeMac::updateActiveState):
        * rendering/RenderThemeMac.mm:
        (-[WebCoreRenderThemeNotificationObserver initWithTheme:WebCore::]):
        (-[WebCoreRenderThemeNotificationObserver systemColorsDidChange:]):
        (-[WebCoreTextFieldCell _coreUIDrawOptionsWithFrame:inView:includeFocus:]):
        (WebCore::RenderThemeMac::RenderThemeMac):
        (WebCore::RenderThemeMac::~RenderThemeMac):
        (WebCore::RenderThemeMac::platformActiveSelectionBackgroundColor):
        (WebCore):
        (WebCore::RenderThemeMac::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeMac::platformActiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeMac::platformFocusRingColor):
        (WebCore::RenderThemeMac::platformInactiveListBoxSelectionBackgroundColor):
        (WebCore::toFontWeight):
        (WebCore::RenderThemeMac::systemFont):
        (WebCore::convertNSColorToColor):
        (WebCore::menuBackgroundColor):
        (WebCore::RenderThemeMac::platformColorsDidChange):
        (WebCore::RenderThemeMac::systemColor):
        (WebCore::RenderThemeMac::usesTestModeFocusRingColor):
        (WebCore::RenderThemeMac::isControlStyled):
        (WebCore::RenderThemeMac::adjustRepaintRect):
        (WebCore::RenderThemeMac::inflateRect):
        (WebCore::RenderThemeMac::convertToPaintingRect):
        (WebCore::RenderThemeMac::updateCheckedState):
        (WebCore::RenderThemeMac::updateEnabledState):
        (WebCore::RenderThemeMac::updateFocusedState):
        (WebCore::RenderThemeMac::updatePressedState):
        (WebCore::RenderThemeMac::controlSupportsTints):
        (WebCore::RenderThemeMac::controlSizeForFont):
        (WebCore::RenderThemeMac::setControlSize):
        (WebCore::RenderThemeMac::sizeForFont):
        (WebCore::RenderThemeMac::sizeForSystemFont):
        (WebCore::RenderThemeMac::setSizeFromFont):
        (WebCore::RenderThemeMac::setFontFromControlSize):
        (WebCore::RenderThemeMac::controlSizeForSystemFont):
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::adjustTextFieldStyle):
        (WebCore::RenderThemeMac::paintCapsLockIndicator):
        (WebCore::RenderThemeMac::paintTextArea):
        (WebCore::RenderThemeMac::adjustTextAreaStyle):
        (WebCore::RenderThemeMac::popupButtonMargins):
        (WebCore::RenderThemeMac::popupButtonSizes):
        (WebCore::RenderThemeMac::popupButtonPadding):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::meterSizeForBounds):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::supportsMeter):
        (WebCore::RenderThemeMac::levelIndicatorStyleFor):
        (WebCore::RenderThemeMac::levelIndicatorFor):
        (WebCore::RenderThemeMac::progressBarSizes):
        (WebCore::RenderThemeMac::progressBarMargins):
        (WebCore::RenderThemeMac::minimumProgressBarHeight):
        (WebCore::RenderThemeMac::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeMac::animationDurationForProgressBar):
        (WebCore::RenderThemeMac::adjustProgressBarStyle):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::TopGradientInterpolate):
        (WebCore::BottomGradientInterpolate):
        (WebCore::MainGradientInterpolate):
        (WebCore::TrackGradientInterpolate):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::menuListButtonSizes):
        (WebCore::RenderThemeMac::adjustMenuListStyle):
        (WebCore::RenderThemeMac::popupInternalPaddingLeft):
        (WebCore::RenderThemeMac::popupInternalPaddingRight):
        (WebCore::RenderThemeMac::popupInternalPaddingTop):
        (WebCore::RenderThemeMac::popupInternalPaddingBottom):
        (WebCore::RenderThemeMac::adjustMenuListButtonStyle):
        (WebCore::RenderThemeMac::setPopupButtonCellState):
        (WebCore::RenderThemeMac::menuListSizes):
        (WebCore::RenderThemeMac::minimumMenuListSize):
        (WebCore::RenderThemeMac::adjustSliderTrackStyle):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::adjustSliderThumbStyle):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::setSearchCellState):
        (WebCore::RenderThemeMac::searchFieldSizes):
        (WebCore::RenderThemeMac::setSearchFieldSize):
        (WebCore::RenderThemeMac::adjustSearchFieldStyle):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::cancelButtonSizes):
        (WebCore::RenderThemeMac::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeMac::resultsButtonSizes):
        (WebCore::RenderThemeMac::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeMac::paintSearchFieldDecoration):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::RenderThemeMac::paintSnapshottedPluginOverlay):
        (WebCore::RenderThemeMac::sliderTickSize):
        (WebCore::RenderThemeMac::sliderTickOffsetFromTrackCenter):
        (WebCore::RenderThemeMac::adjustSliderThumbSize):
        (WebCore::RenderThemeMac::shouldShowPlaceholderWhenFocused):
        (WebCore::RenderThemeMac::popupButton):
        (WebCore::RenderThemeMac::search):
        (WebCore::RenderThemeMac::searchMenuTemplate):
        (WebCore::RenderThemeMac::sliderThumbHorizontal):
        (WebCore::RenderThemeMac::sliderThumbVertical):
        (WebCore::RenderThemeMac::textField):
        (WebCore::RenderThemeMac::fileListNameForWidth):
        * rendering/RenderThemeMacShared.h: Removed.
        * rendering/RenderThemeMacShared.mm: Removed.

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

        [GTK][AC] Visible rect doesn't update after resizing a window.
        https://bugs.webkit.org/show_bug.cgi?id=115096

        Reviewed by Gustavo Noronha Silva.

        Once we set actor's a clip rect, we should update the rect when resizing the actor.

        No new tests since no new functionality.

        * platform/graphics/clutter/GraphicsLayerClutter.cpp:
        (WebCore::GraphicsLayerClutter::setSize):

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

        [GTK][AC] Fix unexpected clear of ClutterContent.
        https://bugs.webkit.org/show_bug.cgi?id=115099

        Reviewed by Gustavo Noronha Silva.

        adoptGRef doesn't increase a reference count. So if a actor has a valid ClutterContent,
        it would be cleared unexpectedly by smart pointer when escaping a function.

        No new tests, no functionality changed.

        * platform/graphics/clutter/GraphicsLayerActor.cpp:
        (graphicsLayerActorUpdateTexture):

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

        DOMFileSystemBase: fix multiple definitions in the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=114950

        Reviewed by Xan Lopez.

        The following  methods are already defined in DOMFileSystemBlackBerry.cpp:

        crackFileSystemURL()
        createFileSystemURL()
        isValidType()
        supportsToURL()

        * Modules/filesystem/DOMFileSystemBase.cpp:
        (WebCore):

2013-04-24  George Staikos  <gstaikos@rim.com>

        [BlackBerry] Add support for JPEG image quality during encoding.
        https://bugs.webkit.org/show_bug.cgi?id=105773

        Reviewed by Xan Lopez.

        PR 271611
        Internally reviewed by Liam Quinn.

        Pass the quality flag into the encoder, with a default of 65

        Covered by existing tests.

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

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

        Fix cast-align WebCore/platform/graphics/GraphicsContext3D.cpp on ARM
        https://bugs.webkit.org/show_bug.cgi?id=115036

        Reviewed by Benjamin Poulain.

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

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

        Remove unnecessary MutableStylePropertySet casts.
        <http://webkit.org/b/115075>

        Reviewed by Geoffrey Garen.

        Get rid of some now-unneeded static_casts that were left from the StylePropertySet
        refactoring last weekend.

        * css/StylePropertySet.cpp:
        (WebCore::MutableStylePropertySet::setProperty):
        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::triStateOfStyle):
        (WebCore::EditingStyle::removeStyleFromRulesAndContext):

2013-04-24  Kangil Han  <kangil.han@samsung.com>

        [Minor code cleanup] Remove duplicated condition check
        https://bugs.webkit.org/show_bug.cgi?id=115082

        Reviewed by Andreas Kling.

        areRectsPartiallyAligned() has duplicated condition check, so remove it.

        * page/SpatialNavigation.cpp:
        (WebCore::areRectsPartiallyAligned):

2013-04-24  Krzysztof Wolanski  <k.wolanski@samsung.com>

        [EFL] Fix build warnings caused by missing images attributes for default buttons
        https://bugs.webkit.org/show_bug.cgi?id=114955

        Reviewed by Gyuyoung Kim.

        Added default image for each button from mediacontrol catalog.

        No new tests, because there is no change in behavior.

        * platform/efl/DefaultTheme/widget/mediacontrol/fullscreenbutton/fullscreen_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/mutebutton/mute_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/playpausebutton/playpause_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/seekbackwardbutton/seekbackward_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/seekforwardbutton/seekforward_button.edc:
        * platform/efl/DefaultTheme/widget/mediacontrol/togglecaptionsbutton/toggle_captions_button.edc:

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

        Unreviewed build fix with gstreamer 0.10.x after r147555.

        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:
        (webKitWebAudioSrcLoop):

== Rolled over to ChangeLog-2013-04-24 ==
